コード例 #1
0
ファイル: Test_USB_Restart.c プロジェクト: rsenn/pictest
void main()
{
    char a;
    USB_Reset();    // Schaltet USB ab
    printf("Testprogramm USB Restart\n\r");// Sende an USART

    DELAY_MS(10000);   //Wartet 10sek

    while(!USB_Verbunden) USB_Verbinde(); // Baut USB-Verbindung auf

    while(1)
    {
        a=USB_Char_empf();         //Empange ein zeichen über USB
        if (a==0x80)       //Wenn sich der Bootloader meldet
        {
            #asm
            goto 0x1002    //Bootloader starten
            #endasm
        }
    }
}
コード例 #2
0
ファイル: SystemIntoUSB.c プロジェクト: billev/literacybridge
int SystemIntoUDisk()
{

	int ret,i;
	SysDisableWaitMode(3);
	SysIntoHighSpeed();

	MaxLUN = -1;
	R_NAND_Present=0;
	R_SDC_Present=0;     //no have SD modify by haoyu 2007.1.29	

	for(i=0 ; i<10 ; i++)
	{
		ret = DrvSDCInitial();	
		if(ret==0)
		{
			R_SDC_Present=1;		// SD Card Initial Success
			MaxLUN++;  
			break;
		_deviceunmount(0);
		}
	}
	USB_TimeOut_Enable();		
	USB_Initial();
	USB_Reset();
	USB_ServiceLoop(1);

	*P_USBD_Config=0x00;
	*P_USBD_INTEN=0x00;	

    if(1 == R_SDC_Present)
    {
	    _devicemount(0);
	}
	SysEnableWaitMode( 3 );

	return 0;
}
コード例 #3
0
ファイル: SystemIntoUSB.c プロジェクト: billev/literacybridge
int SystemIntoUDisk(unsigned int serviceloop)
{
	extern flash *RHM_FlashPtr; //RHM , *FP_RHM_FlashPtr;
	int i;
#ifdef USBRP
	int fl_size = USB_Flash_init((flash *)0, 0);
	flash FL;
	int flash_execution_buf[fl_size];
	RHM_FlashPtr = &FL;

	for(i=0; i<N_USB_LUN; i++) {
		FP_USB_Lun_Define[i] = &USB_Lun_Define[i];
		if( USB_Lun_Define[i].unLunType == LunType_NOR) {
			USB_Lun_Define[i].rhmLunData = (unsigned long) RHM_FlashPtr;
		}
	}
	FL.flash_exe_buf = (void *) &flash_execution_buf[0];
	USB_Flash_init(&FL, 1);
	
#endif
	SysDisableWaitMode(3);
	SetSystemClockRate(48);

	if(serviceloop) {
		R_NAND_Present=0;
		MaxLUN = 0;
		R_SDC_Present=1;
		_deviceunmount(0);
	
		USB_TimeOut_Enable();		
		USB_Initial();
		USB_Reset();
		
		if(serviceloop == USB_CLIENT_SETUP_ONLY) {
			return(1);
		}
	}
	
	if(!serviceloop) {
		int tmp;
		long j;
		tmp = R_USB_State_Machine;
		for(j=0; j<100000; j++) {
			USB_ServiceLoop(0);
			if(R_USB_State_Machine > 0 && R_USB_State_Machine <= SCSI_CSW_Stage) {
				goto xxx;
			} else {
				if (!(j % 50)) {
					context.keystroke = keyCheck(0);
					if (context.keystroke)
						break;
				}
			}
		}
		if (tmp == 0 && R_USB_State_Machine == 0) {
			SetSystemClockRate(CLOCK_RATE);
			return(2);
		}

		if(R_USB_State_Machine == 0xf5f5) {
			SetSystemClockRate(CLOCK_RATE);
			return(2);
		}
		if(!(R_USB_State_Machine > 0 && R_USB_State_Machine <= SCSI_CSW_Stage)) {
			SysEnableWaitMode(3);
			RHM_FlashPtr = 0;
			SetSystemClockRate(CLOCK_RATE);
			return 1;
		}
	}
xxx:
	if (LED_GREEN)
		setLED(LED_GREEN,FALSE);
	else // for USB before reading config file, or if config corrupted
		setLED(0x040,FALSE);		
	if (LED_RED)
		setLED(LED_RED,TRUE);
	else // for USB before reading config file, or if config corrupted
		setLED(0x200,TRUE);		
	
	//TODO: log entering USB device mode
	
	USB_ServiceLoop(1);

	*P_USBD_Config=0x00;
	*P_USBD_INTEN=0x00;	

    if(1 == R_SDC_Present)
    {
	    _devicemount(0);
	}
	SysEnableWaitMode( 3 );
	
	R_USB_State_Machine == 0xf5f5; //CS: THIS LOOKS LIKE A BUG -- A TEST; NOT AN ASSIGNMENT!
	RHM_FlashPtr = 0;
	
	if (LED_RED)
		setLED(LED_RED,FALSE);
	else // for USB before reading config file, or if config corrupted
		setLED(0x200,FALSE);		
	SetSystemClockRate(CLOCK_RATE);
	return 0;
}
コード例 #4
0
ファイル: usbhw_STM32F10x.c プロジェクト: mcufans/xlink
void USB_LP_IRQHandler (void) {
  U32 istr, num, val;

  istr = ISTR;

  /* USB Reset Request */
  if (istr & ISTR_RESET) {
    USB_Reset();
#if USB_RESET_EVENT
    USB_Reset_Event();
#endif
    ISTR = ~ISTR_RESET;
  }

  /* USB Suspend Request */
  if (istr & ISTR_SUSP) {
    USB_Suspend();
#if USB_SUSPEND_EVENT
    USB_Suspend_Event();
#endif
    ISTR = ~ISTR_SUSP;
  }

  /* USB Wakeup */
  if (istr & ISTR_WKUP) {
    USB_WakeUp();
#if USB_RESUME_EVENT
    USB_Resume_Event();
#endif
    ISTR = ~ISTR_WKUP;
  }

  /* Start of Frame */
  if (istr & ISTR_SOF) {
#if USB_SOF_EVENT
    USB_SOF_Event();
#endif
    ISTR = ~ISTR_SOF;
  }

#if USB_ERROR_EVENT

  /* PMA Over/underrun */
  if (istr & ISTR_PMAOVR) {
    USB_Error_Event(1);
    ISTR = ~ISTR_PMAOVR;
  }

  /* Error: No Answer, CRC Error, Bit Stuff Error, Frame Format Error */
  if (istr & ISTR_ERR) {
    USB_Error_Event(0);
    ISTR = ~ISTR_ERR;
  }

#endif

  /* Endpoint Interrupts */
  while ((istr = ISTR) & ISTR_CTR) {
    ISTR = ~ISTR_CTR;

    num = istr & ISTR_EP_ID;

    val = EPxREG(num);
    if (val & EP_CTR_RX) {
      EPxREG(num) = val & ~EP_CTR_RX & EP_MASK;
      if (USB_P_EP[num]) {
        if (val & EP_SETUP) {
          USB_P_EP[num](USB_EVT_SETUP);
        } else {
          USB_P_EP[num](USB_EVT_OUT);
        }
      }
    }
    if (val & EP_CTR_TX) {
      EPxREG(num) = val & ~EP_CTR_TX & EP_MASK;
      if (USB_P_EP[num]) {
        USB_P_EP[num](USB_EVT_IN);
      }
    }
  }
}
コード例 #5
0
ファイル: SystemIntoUSB.c プロジェクト: billev/literacybridge
int SystemIntoUDisk(unsigned int serviceloop)
{
	extern flash *RHM_FlashPtr; //RHM , *FP_RHM_FlashPtr;
	int i;
	char strLog[60];
#ifdef USBRP
	int fl_size = USB_Flash_init((flash *)0, 0);
	flash FL;
	int flash_execution_buf[fl_size];
	RHM_FlashPtr = &FL;

	if(vCur_1 < V_MIN_USB_VOLTAGE) {
		refuse_lowvoltage(0);
		return(2);
	}
	
	for(i=0; i<N_USB_LUN; i++) {
		FP_USB_Lun_Define[i] = &USB_Lun_Define[i];
		if( USB_Lun_Define[i].unLunType == LunType_NOR) {
			USB_Lun_Define[i].rhmLunData = (unsigned long) RHM_FlashPtr;
		}
	}
	FL.flash_exe_buf = (void *) &flash_execution_buf[0];
	USB_Flash_init(&FL, 1);
	
#endif
	SysDisableWaitMode(3);
	SetSystemClockRate(48);

	if(serviceloop) {
		R_NAND_Present=0;
		MaxLUN = 0;
		R_SDC_Present=1;
		_deviceunmount(0);
	
		USB_TimeOut_Enable();		
		USB_Initial();
		USB_Reset();
		
		if(serviceloop == USB_CLIENT_SETUP_ONLY) {
			return(1);
		}
	}
	
	if(!serviceloop) {
		int tmp;
		long j;
		tmp = R_USB_State_Machine;
		for(j=0; j<100000; j++) {


			USB_ServiceLoop(0);
			if(R_USB_State_Machine > 0 && R_USB_State_Machine <= SCSI_CSW_Stage) {
				goto xxx;
			} else {
				KeyScan_ServiceLoop();
				if (!(j % 0x40)) {
					context.keystroke = keyCheck(0);
					if (context.keystroke)
						break;
				}
			}
		}
		if (tmp == 0 && R_USB_State_Machine == 0) {
			SetSystemClockRate(CLOCK_RATE);
			_devicemount(0);
			return(2);
		}

		if(R_USB_State_Machine == 0xf5f5) {
			SetSystemClockRate(CLOCK_RATE);
			_devicemount(0);
			return(2);
		}
		if(!(R_USB_State_Machine > 0 && R_USB_State_Machine <= SCSI_CSW_Stage)) {
			SysEnableWaitMode(3);
			RHM_FlashPtr = 0;
			SetSystemClockRate(CLOCK_RATE);
			return 1;
		}
	}
xxx:
	if (LED_GREEN)
		setLED(LED_GREEN,FALSE);
	else // for USB before reading config file, or if config corrupted
		setLED(0x040,FALSE);		
	if (LED_RED)
		setLED(LED_RED,TRUE);
	else // for USB before reading config file, or if config corrupted
		setLED(0x200,TRUE);		
		
	USB_ServiceLoop(1);

	*P_USBD_Config=0x00;
	*P_USBD_INTEN=0x00;	

    if(1 == R_SDC_Present)
    {
	    _devicemount(0);
	}
	SysEnableWaitMode( 3 );
	
	RHM_FlashPtr = 0;
	
	strcpy(strLog, "returned from USB Device Mode");	
	logString(strLog, ASAP, LOG_NORMAL);
	
	if (LED_RED)
		setLED(LED_RED,FALSE);
	else // for USB before reading config file, or if config corrupted
		setLED(0x200,FALSE);		
	SetSystemClockRate(CLOCK_RATE);
	return 0;
}
コード例 #6
0
ファイル: main.c プロジェクト: j1rie/IRMP_STM32
int main(void)
{
	uint8_t buf[HID_OUT_BUFFER_SIZE-1];
	IRMP_DATA myIRData;
	int8_t ret;

	LED_Switch_init();
	Systick_Init();
	USB_Reset();
	USB_HID_Init();
	USB_DISC_release();
	IRMP_Init();
	irsnd_init();
	FLASH_Unlock();
	EE_Init();
	irmp_set_callback_ptr (led_callback);

	while (1) {
		if (!AlarmValue)
			Wakeup();

		if (!send_ir_on_delay)
			send_magic();

		wakeup_reset();

		/* test if USB is connected to PC, sendtransfer is complete and configuration command is received */
		if (USB_HID_GetStatus() == CONFIGURED && PrevXferComplete && USB_HID_ReceiveData(buf) == RX_READY && buf[0] == STAT_CMD) {

			switch ((enum access) buf[1]) {
			case ACC_GET:
				ret = get_handler(buf);
				break;
			case ACC_SET:
				ret = set_handler(buf);
				break;
			case ACC_RESET:
				ret = reset_handler(buf);
				break;
			default:
				ret = -1;
			}

			if (ret == -1) {
				buf[0] = STAT_FAILURE;
				ret = 3;
			} else {
				buf[0] = STAT_SUCCESS;
			}

			/* send configuration data */
			USB_HID_SendData(REPORT_ID_CONFIG, buf, ret);
			blink_LED();
			if(Reboot)
				reboot();
		}

		/* poll IR-data */
		if (irmp_get_data(&myIRData)) {
			myIRData.flags = myIRData.flags & IRMP_FLAG_REPETITION;
			if (!(myIRData.flags)) {
				store_wakeup(&myIRData);
				check_macros(&myIRData);
				check_wakeups(&myIRData);
				check_resets(&myIRData);
				check_reboot(&myIRData);
			}

			/* send IR-data */
			USB_HID_SendData(REPORT_ID_IR, (uint8_t *) &myIRData, sizeof(myIRData));
		}
	}
}
コード例 #7
0
void 
CmtUsbDev::Init() {
  USB_Reset();
  }
コード例 #8
0
void
CmtUsbDev::IrqHandler() {
  uint32 istr, num, val;

  istr = ISTR;

  /* USB Reset Request */
  if (istr & ISTR_RESET) {
    USB_Reset();
    ISTR = ~ISTR_RESET;
    }

  /* USB Suspend Request */
  if (istr & ISTR_SUSP) {
    USB_Suspend();
    ISTR = ~ISTR_SUSP;
    }

  /* USB Wakeup */
  if (istr & ISTR_WKUP) {
    USB_WakeUp();
    ISTR = ~ISTR_WKUP;
    }

  /* Start of Frame */
  if (istr & ISTR_SOF) {
    USB_StartOfFrame();
    ISTR = ~ISTR_SOF;
    }

  /* PMA Over/underrun */
  if (istr & ISTR_PMAOVR) {
    USB_Error(1);
    ISTR = ~ISTR_PMAOVR;
    }

  /* Error: No Answer, CRC Error, Bit Stuff Error, Frame Format Error */
  if (istr & ISTR_ERR) {
    USB_Error(0);
    ISTR = ~ISTR_ERR;
    }

  /* Endpoint Interrupts */
  while( (istr = ISTR) & ISTR_CTR) {
    ISTR = ~ISTR_CTR;

    num = istr & ISTR_EP_ID;

    val = EPxREG(num);
    if (val & EP_CTR_RX) {
      EPxREG(num) = val & ~EP_CTR_RX & EP_MASK;
      switch( num ) {
        case 0  : EndPoint0( val & EP_SETUP ? USB_EVT_SETUP : USB_EVT_OUT ); break;
        case 1  : EndPoint1( USB_EVT_OUT ); break;
        case 2  : EndPoint2( USB_EVT_OUT ); break;
        case 3  : EndPoint3( USB_EVT_OUT ); break;
        case 4  : EndPoint4( USB_EVT_OUT ); break;
        case 5  : EndPoint5( USB_EVT_OUT ); break;
        case 6  : EndPoint6( USB_EVT_OUT ); break;
        case 7  : EndPoint7( USB_EVT_OUT ); break;
        case 8  : EndPoint8( USB_EVT_OUT ); break;
        case 9  : EndPoint9( USB_EVT_OUT ); break;
        case 10 : EndPoint10( USB_EVT_OUT ); break;
        case 11 : EndPoint11( USB_EVT_OUT ); break;
        case 12 : EndPoint12( USB_EVT_OUT ); break;
        case 13 : EndPoint13( USB_EVT_OUT ); break;
        case 14 : EndPoint14( USB_EVT_OUT ); break;
        case 15 : EndPoint15( USB_EVT_OUT ); break;
        }
      }
    if (val & EP_CTR_TX) {
      EPxREG(num) = val & ~EP_CTR_TX & EP_MASK;
      switch( num ) {
        case 0  : EndPoint0( USB_EVT_IN ); break;
        case 1  : EndPoint1( USB_EVT_IN ); break;
        case 2  : EndPoint2( USB_EVT_IN ); break;
        case 3  : EndPoint3( USB_EVT_IN ); break;
        case 4  : EndPoint4( USB_EVT_IN ); break;
        case 5  : EndPoint5( USB_EVT_IN ); break;
        case 6  : EndPoint6( USB_EVT_IN ); break;
        case 7  : EndPoint7( USB_EVT_IN ); break;
        case 8  : EndPoint8( USB_EVT_IN ); break;
        case 9  : EndPoint9( USB_EVT_IN ); break;
        case 10 : EndPoint10( USB_EVT_IN ); break;
        case 11 : EndPoint11( USB_EVT_IN ); break;
        case 12 : EndPoint12( USB_EVT_IN ); break;
        case 13 : EndPoint13( USB_EVT_IN ); break;
        case 14 : EndPoint14( USB_EVT_IN ); break;
        case 15 : EndPoint15( USB_EVT_IN ); break;
        }
      }
    }  
  }