STM32 USB部分中斷函數簡要分析
在"stm32f10x_it.c"中有下面這個函數
本文引用地址:http://cqxgywz.com/article/201611/320872.htmvoid 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
}


評論