TA的每日心情 | 开心 2024-8-5 14:39 |
---|
签到天数: 4 天 [LV.2]偶尔看看I
注册会员
- 积分
- 57
|
发表于 2024-8-5 15:08:21
|
显示全部楼层
老师好,请问USB中断问题,代码如下,在没有接收HID数据,或者没有向USB口发送数据,USB就不产生中断(P24不会翻转状态),理论上应该1ms产生一次中断呢,是不是某些寄存器为没有清除呢?
目的是想在USB中断里完成串口数据的转发,而不是在主程序里查询方式发送(uart_polling())
void usb_isr() interrupt 25
{
static BYTE cdc1cnt=0;
BYTE intrusb;
BYTE intrin;
BYTE introut;
BYTE adrTemp;
adrTemp = USBADR; //USBADR 现场保存,避免主循环里写完 USBADR 后产生中断,在中断里修改了 USBADR 内容
intrusb = usb_read_reg(INTRUSB);
intrin = usb_read_reg(INTRIN1);
introut = usb_read_reg(INTROUT1);
if (intrusb & RSUIF) usb_resume();
if (intrusb & RSTIF) usb_reset();
if (intrin & EP0IF) usb_setup();
#ifdef EN_EP1IN
if (intrin & EP1INIF) usb_in_ep1();
#endif
#ifdef EN_EP2IN
if (intrin & EP2INIF) usb_in_ep2();
#endif
#ifdef EN_EP3IN
if (intrin & EP3INIF) usb_in_ep3();
#endif
#ifdef EN_EP4IN
if (intrin & EP4INIF) usb_in_ep4();
#endif
#ifdef EN_EP5IN
if (intrin & EP5INIF) usb_in_ep5();
#endif
#ifdef EN_EP1OUT
if (introut & EP1OUTIF) usb_out_ep1();
#endif
#ifdef EN_EP2OUT
if (introut & EP2OUTIF) usb_out_ep2();
#endif
#ifdef EN_EP3OUT
if (introut & EP3OUTIF) usb_out_ep3();
#endif
#ifdef EN_EP4OUT
if (introut & EP4OUTIF) usb_out_ep4();
#endif
#ifdef EN_EP5OUT
if (introut & EP5OUTIF) usb_out_ep5();
#endif
if (intrusb & SUSIF) usb_suspend();
USBADR = adrTemp; //USBADR 现场恢复
++cdc1cnt;
if(!cdc1cnt)P24^=1;
}
|
|