?? untitled1
字號:
void USB_DeviceInterrupt( void ) // USB設備中斷服務程序
{
UINT8 s, l;
static UINT8 SetupReq, SetupLen;
static PUINT8 pDescr;
s = Read374Byte( REG_INTER_FLAG ); // 獲取中斷狀態
if ( s & BIT_IF_BUS_RESET ) { // USB總線復位
Write374Byte( REG_USB_ADDR, 0x00 ); // 清USB設備地址
Write374Byte( REG_USB_ENDP0, M_SET_EP0_TRAN_NAK( 0 ) );
Write374Byte( REG_USB_ENDP1, M_SET_EP1_TRAN_NAK( 0 ) );
Write374Byte( REG_USB_ENDP2, M_SET_EP2_TRAN_NAK( 0 ) );
Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_BUS_RESET ); // 清中斷標志
}
else if ( s & BIT_IF_TRANSFER ) { // USB傳輸完成
s = Read374Byte( REG_USB_STATUS );
switch( s & BIT_STAT_PID_ENDP ) { // USB設備中斷狀態
case USB_INT_EP2_OUT: { // 批量端點下傳成功
case USB_INT_EP2_IN: { // 批量端點上傳成功,未處理
case USB_INT_EP1_IN: { // 中斷端點上傳成功,未處理
case USB_INT_EP0_SETUP: { // 控制傳輸
// 標準請求
SetupReq = SetupReqBuf.bReq; // 請求碼
switch( SetupReq ) {
case DEF_USB_GET_DESCR:
case DEF_USB_SET_ADDRESS:
case DEF_USB_GET_CONFIG:
case DEF_USB_SET_CONFIG:
case DEF_USB_CLR_FEATURE:
case DEF_USB_GET_INTERF:
case DEF_USB_GET_STATUS:
default:
}
case USB_INT_EP0_IN: {
}
case USB_INT_EP0_OUT: {
switch( SetupReq ) {
// case download:
// get_data;
// break;
case DEF_USB_GET_DESCR:
default:
Write374Byte( REG_USB_ENDP0, M_SET_EP0_TRAN_NAK( 0 ) ); // 結束
break;
}
break;
}
default: {
break;
}
}
Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_TRANSFER ); // 清中斷標志
}
else if ( s & BIT_IF_USB_SUSPEND ) { // USB總線掛起
Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_USB_SUSPEND ); // 清中斷標志
Write374Byte( REG_SYS_CTRL, Read374Byte( REG_SYS_CTRL ) | BIT_CTRL_OSCIL_OFF ); // 時鐘振蕩器停止振蕩,進入睡眠狀態
}
else if ( s & BIT_IF_WAKE_UP ) { // 芯片喚醒完成
Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_WAKE_UP ); // 清中斷標志
}
else { // 意外的中斷,不可能發生的情況,除了硬件損壞
Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_INTER_FLAG ); // 清中斷標志
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -