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

📄 usbdriver.c

📁 周立功 214x pack 配套光盘
💻 C
📖 第 1 页 / 共 2 页
字号:
{
	INT32U ep_st;
	
	ep_st = USBEpIntSt;									/* 读端点中断状态寄存器 	read endpoint interrupt status register */
		
	if(ep_st & USB_ENDP00)
		ep0_rxdone();									/* 控制端点接收数据处理 	process controll endpoint receive data */
	if(ep_st & USB_ENDP01)
		ep0_txdone();									/* 控制端点发送数据处理 	process controll endpoint transmit data */
			
	if(ep_st & USB_ENDP02)
		ep1_rxdone();									/* 逻辑端点1接收数据处理    process logic endpoint 1 receive data */	
	if(ep_st & USB_ENDP03)
		ep1_txdone();									/* 逻辑端点1发送数据处理    process logic endpoint 1 transmit data */
			
	if(ep_st & USB_ENDP04)
		ep2_rxdone();									/* 逻辑端点2接收数据处理    process logic endpoint 2 receive data */	
	if(ep_st & USB_ENDP05)	
		ep2_txdone();									/* 逻辑端点2发送数据处理    process logic endpoint 2 transmit data */	
		
	USBDevIntClr = FASTINTERRUPT;
}


/***************************************************************************************************************
** 函数名称 : Usb_LPService()							Name	 : Usb_LPService()
** 功能描述 : USB 端点慢速中断服务程序	  			    Function : USB endpoint slow Interrupt Service Program
** 输	 入 : 无							 			Input	 : NULL
** 输	 出 : 无										Output	 : NULL
****************************************************************************************************************/
void Usb_LPService(void)
{
	INT32U ep_st;
	
	ep_st = USBEpIntSt;									/* 读端点中断状态寄存器 read endpoint interrupt status register */
		
	if(ep_st & USB_ENDP00)
		ep0_rxdone();									/* 控制端点接收数据处理 process controll endpoint receive data */
	if(ep_st & USB_ENDP01)
		ep0_txdone();									/* 控制端点发送数据处理 process controll endpoint transmit data */
			
	if(ep_st & USB_ENDP02)
		ep1_rxdone();									/* 端点1接收数据处理    process logic endpoint 1 receive data */	
	if(ep_st & USB_ENDP03)
		ep1_txdone();									/* 端点1发送数据处理    process logic endpoint 1 transmit data */
			
	if(ep_st & USB_ENDP04)
		ep2_rxdone();									/* 端点2接收数据处理    process logic endpoint 2 receive data */	
	if(ep_st & USB_ENDP05)	
		ep2_txdone();									/* 端点2发送数据处理    process logic endpoint 2 transmit data */	

	USBDevIntClr = SLOWINTERRUPT;
}


/***************************************************************************************************************
** 函数名称 : ep1_txdone()								Name	 : ep1_txdone()
** 功能描述 : 逻辑端点1发送数据处理		  			    Function : logic endpoint 1 TX 
** 输	 入 : 无							 			Input	 : NULL
** 输	 出 : 无										Output	 : NULL
****************************************************************************************************************/
void ep1_txdone(void)
{
	USB_SelectClrIntEndpoint(3);				   		 /* 选择端点并清除中断  select endpoint/clear interrupt */
}


/***************************************************************************************************************
** 函数名称 : ep1_txdone()								Name	 : ep1_txdone()
** 功能描述 : 逻辑端点1接收数据处理		  			    Function : logic endpoint 1 RX 
** 输	 入 : 无							 			Input	 : NULL
** 输	 出 : 无										Output	 : NULL
****************************************************************************************************************/
void ep1_rxdone(void)
{
	INT8U len;

	USB_SelectClrIntEndpoint(2);						 /* 选择端点并清除中断      select endpoint/clear interrupt */
	
	len = USB_ReadEndpoint(2,sizeof(GenEpBuf),GenEpBuf); /* 从接收缓冲区中读出数据  read data from EP RAM */
	if(len != 0)
		bEPPflags.bits.ep1_rxdone = 1;					 /* 标识该端点收到数据      flag endpoint received data */
}


/***************************************************************************************************************
** 函数名称 : ep2_txdone()								Name	 : ep2_txdone()
** 功能描述 : 逻辑端点2发送数据处理		  			    Function : logic endpoint 2 TX 
** 输	 入 : 无							 			Input	 : NULL
** 输	 出 : 无										Output	 : NULL
****************************************************************************************************************/
void ep2_txdone(void)
{
	INT32U len;
	INT8U i,status;

	status = USB_SelectClrIntEndpoint(5);			  	/* 选择端点/清除端点中断 */
	
	if (Usb.Cnt >= Usb.Len)
		return;				  							/* 如果发送长度已达到, 则无须再往下执行 */
	
	for (i = 0; i < 2; i++)
	{
		status = USB_SelectEndpoint(5) & 0x60;
		if (status == 0x60)  break;						/* 双缓冲区都满, 不能再往里面写数据 */

		len = Usb.Len - Usb.Cnt;
		if (len > 0)
		{					   						 
			if (len >= 64)								/* 写64个字节 	*/
				len = USB_WriteEndpoint(5, 64, Usb.pbuff + Usb.Cnt); 
			else
				len = USB_WriteEndpoint(5, len, Usb.pbuff + Usb.Cnt);  
														/* 写少于64个字节 */
			Usb.Cnt += len;								/* 计数 */
		}//end of if (len > 0)
	}//end of for()
}



/***************************************************************************************************************
** 函数名称 : ep2_rxdone()								Name	 : ep2_rxdone()
** 功能描述 : 逻辑端点2接收数据处理		  			    Function : logic endpoint 2 RX 
** 输	 入 : 无							 			Input	 : NULL
** 输	 出 : 无										Output	 : NULL
****************************************************************************************************************/
void ep2_rxdone(void)
{
	INT32U i,len;
	INT8U status;
	
	USB_SelectClrIntEndpoint(4); 					    /* 选择端点/清除端点中断 */
	
	if (Usb.Cnt >= Usb.Len)
	{
		Usb.bRecFinish = 1;								/* 接收完成 */
		return;
	}

	for(i = 0; i < 2; i++)
	{
		len = Usb.Len - Usb.Cnt;
		if (len > 0)
		{	
			if (len >= 64)
			{											/* 接收 64 个字节 */
				len = USB_ReadEndpoint(4, 64, Usb.pbuff + Usb.Cnt); 
				Usb.Cnt = Usb.Cnt + 64;
			}
			else
			{											/* 接收少于64个字节 */
				len = USB_ReadEndpoint(4, len, Usb.pbuff + Usb.Cnt); 
				Usb.Cnt = Usb.Cnt + len;	
			}	
		}//end of if (len > 0)
		
		status = USB_SelectEndpoint(4) & 0x60;
		if (status == 0)  break;						/* 无缓冲区满 */
	}

	if (Usb.Cnt >= Usb.Len)								
		Usb.bRecFinish = 1;						   		/* 接收完成 */
}



/***************************************************************************************************************
** 函数名称 : USB_BusReset()							Name	 : USB_BusReset()
** 功能描述 : USB 总线复位处理				  			Function : process USB bus reset  
** 输	 入 : 无							 			Input	 : NULL
** 输	 出 : 无										Output	 : NULL
****************************************************************************************************************/
void USB_BusReset(void)
{
	USB_USBDevIntConfig();
	USB_ConfigEndpoint();								/* 重新配置所有端点最大包大小 */
}


/***************************************************************************************************************
** 函数名称 : USB_Suspend()								Name	 : USB_Suspend()
** 功能描述 : USB 总线挂起改变				  			Function : process USB bus suspend change 
** 输	 入 : 无							 			Input	 : NULL
** 输	 出 : 无										Output	 : NULL
****************************************************************************************************************/
void USB_SuspendChange(void)
{

}


/***************************************************************************************************************
** 函数名称 : USB_ConnectChange()						Name	 : USB_ConnectChange()
** 功能描述 : USB 总线连接改变				  			Function : process USB bus connect change
** 输	 入 : 无							 			Input	 : NULL
** 输	 出 : 无										Output	 : NULL
****************************************************************************************************************/
void USB_ConnectChange(void)
{

}


/***************************************************************************************************************
** 函数名称 : Get_USB214x_FirmwareVer()					Name	 : Get_USB214x_FirmwareVer()
** 功能描述 : 取得LPC214x USB固件版本号		  			Function : get the version of LPC214x USB firmware
** 输	 入 : 无							 			Input	 : NULL
** 输	 出 : 16位版本号								Output	 : 16bit Version Code
****************************************************************************************************************/
INT16U Get_USB214x_FirmwareVer(void)
{
	return 0x0100;										/* LPC214x USB 固件版本为 1.00 */
}														/* LPC214x USB Firmware Version is 1.00 */


/*******************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -