STM32 USB部分中斷函數(shù)簡(jiǎn)要分析
在"stm32f10x_it.c"中有下面這個(gè)函數(shù)
本文引用地址:http://www.biyoush.com/article/201611/320872.htmvoid USB_LP_CAN1_RX0_IRQHandler(void)
{
}
可見USB_Istr()是處理USB_LP_CAN1_RX0_IRQHandler中斷的,而這個(gè)中斷管理的是控制傳輸、中斷傳輸、批量傳輸(單緩沖區(qū))。
下面對(duì)此函數(shù)中關(guān)鍵部分進(jìn)行分析
wIstr = _GetISTR();這句說白了就是獲取ISTR寄存器的值,從usb_regs.h中這個(gè)宏定義#define _GetISTR()
#define IMR_MSK (CNTR_CTRM
ISTR_CTR是寄存器USB_ISTR中的CTR位,表明端點(diǎn)一次正確的傳輸
wInterrupt_Mask這個(gè)可能是表示允許CNTR中的哪些位中斷
if (wIstr & ISTR_CTR & wInterrupt_Mask)那么這句話就容易理解了,就是說某位中斷了并且是正確的傳輸,意思是我們可以來處理了
ISTR_EP_ID是端點(diǎn)號(hào)
CTR_LP()這個(gè)函數(shù)是真正的中斷服務(wù)函數(shù),大致上的結(jié)構(gòu)是這樣的
EPindex = (uint8_t)(wIstr & ISTR_EP_ID);這句是讀取端點(diǎn)號(hào),下面分端點(diǎn)是否為0展開
if (EPindex == 0)
{//端點(diǎn)是0
}
else
{//端點(diǎn)非0
}
評(píng)論