void usb_lp_can1_rx0_irqhandler(void)
可見usb_istr()是處理usb_lp_can1_rx0_irqhandler中斷的,而這個中斷管理的是控制傳輸、中斷傳輸、批量傳輸(單緩衝區)。
下面對此函式中關鍵部分進行分析
wistr = _getistr();這句說白了就是獲取istr暫存器的值,從usb_regs.h中這個巨集定義#define _getistr()
((uint16_t) *istr)中便知
#define imr_msk (cntr_ctrm | cntr_wkupm | cntr_suspm | cntr_errm | cntr_sofm \
| cntr_esofm | cntr_resetm )這個巨集定義就是宣告下這些位的集合,估計要跟什麼&下
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)
else
else if ((wepval & ep_ctr_rx) != 0) }
}else
if ((wepval & ep_ctr_tx) != 0)
}
STM32 USB學習筆記
stm32 usb學習筆記 一 usb fs device firmware library 使用韌體庫開發程式,需要包含幾個檔案 從圖中可見,應用程式介面部分,有 usb pwr,usb conf,usb desc,usb istr,usb prop,usb endp六個檔案,在裝置驅動中有六個檔...
STM32 USB設計 硬體篇
stm32晶元內部整合了usb外設,大大減輕了usb電路的設計負擔,只需設計usb介面電路,就可以實現基於stm32晶元的電路板的usb通訊設計。本文將具體講述基於stm32f103rbt6晶元的usb設計 本文為硬體篇。首先,我們來認識一下stm32f103rbt6晶元。其中usb相關引腳為pa1...
STM32 USB學習整理3
這個檔案主要和 vcp 驅動有直接關係!很多部分都是空的內容,其中包含了一些引數的設定,需要注意的是 波特率的大小與usb速度沒有關係,波特率的設定會影響串列埠速度 usb虛擬串列埠相關配置引數 line coding linecoding u8 usart printf buffer usb us...