📄 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 + -