USB分析(一):中斷函式分析
阿新 • • 發佈:2019-01-28
USB中斷函式分析:
__usb_device_interrupt_handler()
首先看下暫存器:
Common Device Host Registers
Device Registers - Endpoint
1、讀取中斷埠暫存器:
ep_inst = _usb_instances->hw->DEVICE.EPINTSMRY.reg;
2、首先IF判斷如果是端點0程式如下:
器件端點中斷標誌:
程式碼分析:
1、首先中斷標誌暫存器賦值
2、回撥函式的呼叫
中斷標誌如下:
在udd_attach中註冊瞭如下幾個回撥函式,其他沒有註冊的指向NULL。
3、其次else為其它埠:
首先讀取:Device EndPoint Interrupt Flag
判斷EndPoint Interrupt Flag 標誌:
1、USB_DEVICE_EPINTFLAG_STALL_Msk(Transmit Stall 0 Interrupt Flag 令牌中斷&傳送中斷標誌位0)
udd_ep_transfer_process
2、USB_DEVICE_EPINTFLAG_RXSTP ( Received Setup Interrupt Flag 接收建立中斷)
_usb_ep0_on_setup
3、USB_DEVICE_EPINTFLAG_TRCPT_Msk ( Transfer Fail 0 Interrupt Flag 傳輸完成中斷0)
_usb_ep0_on_tansfer_ok
4、USB_DEVICE_EPINTFLAG_TRFAIL_Msk( Transfer Fail 0 Interrupt Flag 傳輸失敗中斷0)
_usb_ep0_on_tansfer_fail
現在分析下回調函式的註冊
第一處:
第二處:
配置埠資訊中:
bool udd_ep_alloc(udd_ep_id_t ep, uint8_t bmAttributes, uint16_t MaxEndpointSize)
第三處:
Array to store device related callback functions
usb_host_callback_t host_callback[USB_HOST_CALLBACK_N];
usb_host_pipe_callback_t host_pipe_callback[USB_PIPE_NUM][USB_HOST_PIPE_CALLBACK_N];
現在分析register函式和enable函式:
register:
enable: