USB分析(一):中断函数分析

USB中断函数分析:

__usb_device_interrupt_handler()

首先看下寄存器:
Common Device Host Registers
USB分析(一):中断函数分析_第1张图片

Device Registers - Endpoint
USB分析(一):中断函数分析_第2张图片

1、读取中断端口寄存器:

ep_inst = _usb_instances->hw->DEVICE.EPINTSMRY.reg;

USB分析(一):中断函数分析_第3张图片

2、首先IF判断如果是端点0程序如下:

USB分析(一):中断函数分析_第4张图片

器件端点中断标志:
USB分析(一):中断函数分析_第5张图片

代码分析:
1、首先中断标志寄存器赋值
2、回调函数的调用

中断标志如下:
USB分析(一):中断函数分析_第6张图片

在udd_attach中注册了如下几个回调函数,其他没有注册的指向NULL。
USB分析(一):中断函数分析_第7张图片

3、其次else为其它端口:

首先读取:Device EndPoint Interrupt Flag
USB分析(一):中断函数分析_第8张图片

判断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

现在分析下回调函数的注册

第一处:
USB分析(一):中断函数分析_第9张图片

第二处:
配置端口信息中:

    bool udd_ep_alloc(udd_ep_id_t ep, uint8_t bmAttributes, uint16_t MaxEndpointSize)

这里写图片描述

第三处:
USB分析(一):中断函数分析_第10张图片

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:
USB分析(一):中断函数分析_第11张图片

USB分析(一):中断函数分析_第12张图片

USB分析(一):中断函数分析_第13张图片

enable:
USB分析(一):中断函数分析_第14张图片

你可能感兴趣的:(USB)