神农鼎 发表于 2023-12-27 17:51
LAOXU 发表于 2023-12-27 17:49
什么时候出样片 ?
老师好,请问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;
}
{:5_272:}
{:5_332:}
{:4_165:}
学习
{:4_167:}{:4_167:}
梁工 发表于 2024-1-15 21:20
可以的。
stc的mcu可以接32.768k的晶振吗 文件说明是4M以上
这个如果加了32.768k的晶振就可以实现低功耗运行了吗? 不加的话大约是2-7MA或更多。5M主频无程序可以到1.8 MA 加了可以不休眠无程序的话实现更低的功耗吗。
qepuemc 发表于 2024-11-22 21:15
stc的mcu可以接32.768k的晶振吗 文件说明是4M以上
可以外接32.768K晶振。
参数挺不错。。。。
学习一下。正在找串口DMA接收,超时时间是如何计算的。