STM32 USB部分中断函数简要分析
在"stm32f10x_it.c"中有下面这个函数
void USB_LP_CAN1_RX0_IRQHandler(void)
{
}
可见USB_Istr()是处理USB_LP_CAN1_RX0_IRQHandler中断的,而这个中断管理的是控制传输、中断传输、批量传输(单缓冲区)。
下面对此函数中关键部分进行分析
wIstr = _GetISTR();这句说白了就是获取ISTR寄存器的值,从usb_regs.h中这个宏定义#define _GetISTR()
#define IMR_MSK (CNTR_CTRM
ISTR_CTR是寄存器USB_ISTR中的CTR位,表明端点一次正确的传输
wInterrupt_Mask这个可能是表示允许CNTR中的哪些位中断
if (wIstr & ISTR_CTR & wInterrupt_Mask)那么这句话就容易理解了,就是说某位中断了并且是正确的传输,意思是我们可以来处理了
ISTR_EP_ID是端点号
CTR_LP()这个函数是真正的中断服务函数,大致上的结构是这样的
EPindex = (uint8_t)(wIstr & ISTR_EP_ID);这句是读取端点号,下面分端点是否为0展开
if (EPindex == 0)
{//端点是0
}
else
{//端点非0
}
STM32USB部分中断函 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)