⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbdevdriver.c

📁 SmartARM2400系列开发板全套资料
💻 C
📖 第 1 页 / 共 2 页
字号:
** 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 + -