📄 usbdriver.c
字号:
{
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 + -