1. 程式人生 > >USB分析(一):中斷函式分析

USB分析(一):中斷函式分析

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:
這裡寫圖片描述