📄 usbintrhandler.c
字号:
// This is the main handler for USB interrups.
// It will then call appropriate routine to according to the nature of the
// interrupt.
#include "usb_pptt.h"
#include "usb_pdef.h"
#include "usb_pvar.h"
void _UsbIntrHandler(void)
{
// handle general interrupt
if (_reg_USB_ISR & USB_INTR_GEN_MASK)
{
/*
// nothing to be done for CFG_CHG interrupt, just clear the interrupt flag
if (_reg_USB_GEN_ISR & USB_CFG_CHG_MASK)
{
}
*/
// reset signalling from host
if (_reg_USB_GEN_ISR & USB_RESET_MASK)
{
_iUsbReset();
}
// It seems that the command over mechanism is not functioning
// properly. So we'll signal command over every frame.
if (_reg_USB_GEN_ISR & USB_SOF_MASK)
{
_reg_USB_CTRL |= USB_CTRL_CMOV_MASK; // signal CMD_OVER
}
_reg_USB_GEN_ISR = 0x800000FF;
}
/* handle interrupt from EP0 (device request) */
if (_reg_USB_ISR & USB_INTR_EP0_MASK)
{
_iUsbHandleDevReq();
_reg_USB_EP0_ISR = 0x1FF; // clear all interrupts
}
/* handle interrupt from EP3 */
if (_reg_USB_ISR & USB_INTR_EP3_MASK)
{
if (_reg_USB_EP3_ISR & USB_EPINTR_EOT_MASK)
{ // EOT interrupt, command from host
_reg_USB_MASK = ENABLE_CFG_CHG & ENABLE_RESET;
_iUsbProcessCommand();
}
if (_reg_USB_EP3_ISR & USB_EPINTR_EOF_MASK)
{ // EOF interrupt, data transfer from host complete
_iUsbProcessDataFromHost();
}
_reg_USB_EP3_ISR = 0x1FF; // clear all interrupts
}
/* handle interrupt from EP4 (EOF interrupt, data transfer to host complete) */
if (_reg_USB_ISR & USB_INTR_EP4_MASK)
{
_iUsbProcessDataToHost();
_reg_USB_EP4_ISR = 0x1FF; // clear all interrupts
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -