📄 usbdevdriver.c
字号:
** Descriptions: USB 端点慢速中断服务程序
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void __usbDevLpService (void)
{
INT32U ep_st;
ep_st = (INT32U)USBEpIntSt; /* 读端点中断状态寄存器 */
if(ep_st & USB_ENDP00)
__usbDevEp0RxDone(); /* 控制端点接收数据处理 */
if(ep_st & USB_ENDP01)
__usbDevEp0TxDone(); /* 控制端点发送数据处理 */
if(ep_st & USB_ENDP02)
__usbDevEp1RxDone(); /* 逻辑端点1接收数据处理 */
if(ep_st & USB_ENDP03)
__usbDevEp1TxDone(); /* 逻辑端点1发送数据处理 */
if(ep_st & USB_ENDP04)
__usbDevEp2RxDone(); /* 逻辑端点2接收数据处理 */
if(ep_st & USB_ENDP05)
__usbDevEp2TxDone(); /* 端点2发送数据处理 */
USBDevIntClr = SLOWINTERRUPT;
}
/*********************************************************************************************************
** Function name: __usbDevBusReset
** Descriptions: USB 总线复位处理
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void __usbDevBusReset (void)
{
__usbDevIntConfig();
__usbDevConfigEndpoint(); /* 重新配置所有端点最大包大小 */
}
/*********************************************************************************************************
** Function name: __usbDevSuspendChange
** Descriptions: USB 总线挂起改变
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void __usbDevSuspendChange (void)
{
}
/*********************************************************************************************************
** Function name: _usbConnectChange
** Descriptions: USB 总线连接改变
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void __usbDevConnectChange (void)
{
}
/*********************************************************************************************************
** Function name: usbDevInit
** Descriptions: 初始化 USB 设备控制器
** input parameters: 无
** output parameters: 无
** Returned value: 初始化成功 0
** 初始化失败 错误码
*********************************************************************************************************/
INT8U usbDevInit (void)
{
__usbDevHardwareInit(); /* 初始化硬件 */
bEPPflags.value = 0; /* 置USB事件标志为0 */
if (__usbDevReadTestRegister() != 0xA50F) { /* 读测试寄存器 */
return 1; /* 初始化失败 */
}
__usbDevIntConfig(); /* 配置中断 */
__usbDevConfigEndpoint(); /* 配置端点 */
#if DMA_ENGINE_EN
usbDevDMAInit(); /* 初始化USB DMA */
__usbDevSetMode(0x28);
#else
__usbDevSetMode(0x00); /* 成功传输才产生中断 */
#endif
__usbDevHadwareReconnect();
__usbDevSoftReconnect(); /* 重新连接USB */
return 0; /* 初始化USB成功 */
}
/*********************************************************************************************************
** Function name: usbDevServe
** Descriptions: USB 设备控制器事件处理函数
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void usbDevServe (void)
{
if (bEPPflags.bits.setup_packet) {
/* 收到 SETUP 包 */
IRQ_DISABLE();
bEPPflags.bits.setup_packet = 0;
__usbDevControlHandler(); /* 控制传输处理 */
IRQ_ENABLE();
}
if (bEPPflags.bits.bus_reset) {
/* USB总线复位处理 */
IRQ_DISABLE();
bEPPflags.bits.bus_reset = 0;
IRQ_ENABLE();
}
if (bEPPflags.bits.suspend) {
/* USB总线挂起改变处理 */
IRQ_DISABLE();
bEPPflags.bits.suspend= 0;
IRQ_ENABLE();
__usbDevSuspendChange();
}
if (bEPPflags.bits.con_change) {
/* USB总线连接改变处理 */
IRQ_DISABLE();
bEPPflags.bits.con_change = 0;
IRQ_ENABLE();
__usbDevConnectChange();
}
}
/*********************************************************************************************************
** Function name: USB_Exception
** Descriptions: USB 中断服务程序
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void __irq usbDevException (void)
{
INT32U ulUsbIntState = 0;
INT32U ulDevIntState = 0;
INT32U ulDevState = 0;
bEPPflags.bits.in_isr = 1; /* 标识程序进入中断 */
ulDevIntState = (INT32U)USBDevIntSt; /* 读设备中断状态寄存器 */
if (ulDevIntState & DEVINT_STATUS_DEVSTAT) {
ulDevState = __usbDevGetDevStatus();
if ((ulDevState & 0x10) != 0) {
__usbDevBusReset(); /* 总线复位处理 */
bEPPflags.bits.bus_reset = 1; /* 标识总线复位 */
}
if ((ulDevState & 0x08) != 0) {
bEPPflags.bits.suspend = 1; /* 标识总线挂起改变 */
}
if ((ulDevState & 0x02) != 0) {
bEPPflags.bits.con_change = 1; /* 标识总线连接改变 */
}
USBDevIntClr = DevStatusInterrupt;
goto USB_ISR_EXIT; /* 退出中断服务程序 */
}
ulUsbIntState = (INT32U)(USBIntSt & 0x7);
if (ulUsbIntState != 0) {
if (ulUsbIntState & USBINT_STATUS_HP) {
__usbDevHpService(); /* 高优先级中断处理 */
}
if (ulUsbIntState & USBINT_STATUS_LP) {
__usbDevLpService(); /* 低优先级中断处理 */
}
#if DMA_ENGINE_EN
if (ulUsbIntState & USBINT_STATUS_DMA)
usbDevDMAService(); /* DMA中断处理 */
#endif
}
USB_ISR_EXIT:
bEPPflags.bits.in_isr = 0; /* 标识程序退出中断 */
VICVectAddr = 0x00; /* 通知LPC23xx中断结束 */
}
/*********************************************************************************************************
** Function name: usbDevGetVer
** Descriptions: 得到 USB Device 软件包版本号
** input parameters: 无
** output parameters: 无
** Returned value: ZLG/USB23xx 软件包版本号
*********************************************************************************************************/
INT16U usbDevGetVer(void)
{
return 0x0110;
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -