中断处理-docker部署python爬虫项目的方法步骤

view_64339 7 0 pdf 2024-07-22 01:07:38

中断处理本节描述了如何将任意端点上的一个中断事件发送到嵌套的向量中断控制器(NVIC)。中断事件处理如图所示。所有的非同步OUT端点(控制、批量和中断端点)在成功地接收到一个信息包时产生中断。所有的非同步IN端点在成功地发送一个信息包时,或者在发送一个NAK信号并且通过SIE设置模式命令将NAK上的中断使能时产生中断,详见设置模式的描述。对于同步端点,每1ms产生一个帧中断。从模式和DMA模式的中断处理是不同的。

从模式:如果在端点上出现一个中断事件并且该端点中断在USBEpIntEn寄存器中是使能的,则USBEpIntSt寄存器中的对应状态位将置位。对于非同步端点,根据对应的USBEpIntPri寄存器,我们将所有的端点中断事件划分为两种类型:快速端点中断事件和慢速端点中断事件。所有快速端点中断事件相或并发送到USBDevIntSt寄存器中的EP_FAST位。所有慢速端点中断事件相或并发送到USBDevIntSt中的EP_SLOW位。对于同步端点,USBDevIntSt寄存器中的FRAME位每1ms置位一次。 USBDevIntSt寄存器保存所有端点中断事件的状态以及其它各种中断的状态(见USB设备中断状态寄存器)。默认情况下,将所有中断(如果已在USBDevIntEn寄存器中使能)发送到USBIntSt寄存器中的USB_INT_REQ_LP位,请求低优先级中断处理。而利用USBDevIntPri寄存器,也可以将FRAME或EP_FAST位发送到USBIntSt寄存器中的USB_INT_REQ_HP位。 EP_FAST和FRAME中断中只有一个能够发送到USB_INT_REQ_HP位。如果试图将这两个位都发送到USB_INT_REQ_HP,则这两个中断事件会都发送到USB_INT_REQ_LP。慢速端点中断事件始终直接发送到USB_INT_REQ_LP位,通过软件请求低优先级中断处理。发送到NVIC的最后一个中断信号由USBIntSt寄存器中的EN_USB_INTS位控制。只有当EN_USB_INTS位置位时,USB中断才会发送到NVIC。

DMA模式:如果在非控制端点上出现中断事件并且该端点中断在USBEpIntEn寄存器中没有使能,则USBDMARSt寄存器中对应的状态位由硬件置位。如果DMA传输对于USBEpDMASt寄存器中的对应端点是使能的,则USBDMARSt中置位的位可作为DMA引擎传输数据的标志。每个端点在DMA模式中传输数据时可产生3种类型的中断:传输结束中断、新DD请求中断和系统错误中断。这些中断事件会分别把USBEoTIntSt、USBNDDRIntSt和USBSysErrIntSt寄存器中与各个端点对应的位置位。然后,来自所有端点的传输结束中断相或并发送到USBDMAIntSt中的EOT位。同样,所有的新DD请求中断和系统错误中断事件分别发送到USBDMAStInt寄存器中的NDDR位和ERR位。 EOT、NDDR和ERR位(如果已在USBDMAIntEn寄存器中使能)相或来将USBIntSt寄存器中的USB_INT_REQ_DMA位置位。如果USBIntSt中的EN_USB_INTS位是置位的,则将中断发送到NVIC。

真是令人着迷的中断处理机制!是不是有点眼花缭乱呢?了解更多Docker部署Python爬虫项目的方法步骤也许能帮助你更好地掌握这些技术细节!

用户评论
请输入评论内容
评分:
暂无评论