📄 usb_function.c
字号:
/****************************************************************/
/* 文件名: USB_FUNCTION.c */
/* 功能: 定义5509片上usb的配置和操作函数 */
/* 设计日期: 10/20/2004 */
/****************************************************************/
#include <stdio.h>
#include <csl.h>
#include <csl_irq.h>
#include <csl_pll.h>
#include <csl_usb.h>
#include <csl_chiphal.h>
#include "Descriptors.h"
#include "Global_Maco.h"
/* Reference start of interrupt vector table */
/* This symbol is defined in file, vectors.s55 */
extern void VECSTART(void);
/* 定义全局变量 */
Uint16 usbbuffer[200];
Uint16 usbflag = 0;
Uint16 usbreceilen = 0; // 用来暂存从PC机传来的数据,以便读回
Uint16 CtrlDataLen = 0; // 控制节点的数据域长度
/* 节点和数据结构初始化 */
USB_SetupStruct USB0_SetupPkt; // 初始化一个Setup数据结构
USB_EpObj EndptObjOut0, EndptObjIn0, // 初始化控制endpoint0
EndptObjOut1, EndptObjIn1, // 初始化块操作节点1-7
EndptObjOut2, EndptObjIn2,
EndptObjOut3, EndptObjIn3,
EndptObjOut4, EndptObjIn4,
EndptObjOut5, EndptObjIn5,
EndptObjOut6, EndptObjIn6,
EndptObjOut7, EndptObjIn7;
/* 产生一个无界的Endpoints的初始化的数组 */
USB_EpHandle hEpObjArray[] =
{
&EndptObjOut0,
&EndptObjIn0,
&EndptObjOut1,
&EndptObjIn1,
&EndptObjOut2,
&EndptObjIn2,
&EndptObjOut3,
&EndptObjIn3,
&EndptObjOut4,
&EndptObjIn4,
&EndptObjOut5,
&EndptObjIn5,
&EndptObjOut6,
&EndptObjIn6,
&EndptObjOut7,
&EndptObjIn7,
NULL
};
/* 控制节点0的事件处理设置 */
Uint16 EpIn0Event_mask = USB_EVENT_NONE;
Uint16 EpOut0Event_mask = USB_EVENT_RESET | USB_EVENT_SETUP |
USB_EVENT_SUSPEND | USB_EVENT_RESUME;
/* 块传输节点的事件处理设置 */
Uint16 EpIn1Event_mask = USB_EVENT_NONE; // 节点1
Uint16 EpOut1Event_mask = USB_EVENT_EOT;
Uint16 EpIn2Event_mask = USB_EVENT_NONE; // 节点2
Uint16 EpOut2Event_mask = USB_EVENT_EOT;
Uint16 EpIn3Event_mask = USB_EVENT_NONE; // 节点3
Uint16 EpOut3Event_mask = USB_EVENT_EOT;
Uint16 EpIn4Event_mask = USB_EVENT_NONE; // 节点4
Uint16 EpOut4Event_mask = USB_EVENT_EOT;
Uint16 EpIn5Event_mask = USB_EVENT_NONE; // 节点5
Uint16 EpOut5Event_mask = USB_EVENT_EOT;
Uint16 EpIn6Event_mask = USB_EVENT_NONE; // 节点6
Uint16 EpOut6Event_mask = USB_EVENT_EOT;
Uint16 EpIn7Event_mask = USB_EVENT_NONE; // 节点7
Uint16 EpOut7Event_mask = USB_EVENT_EOT;
/* 节点的中断处理程序声明 */
void Endpt0EvHndler(void); // 节点0的中断处理程序
void EndptIn1EvHndler(void); // 节点1的中断处理程序
void EndptOut1EvHndler(void);
void EndptIn2EvHndler(void); // 节点2的中断处理程序
void EndptOut2EvHndler(void);
void EndptIn3EvHndler(void); // 节点3的中断处理程序
void EndptOut3EvHndler(void);
void EndptIn4EvHndler(void); // 节点4的中断处理程序
void EndptOut4EvHndler(void);
void EndptIn5EvHndler(void); // 节点5的中断处理程序
void EndptOut5EvHndler(void);
void EndptIn6EvHndler(void); // 节点6的中断处理程序
void EndptOut6EvHndler(void);
void EndptIn7EvHndler(void); // 节点7的中断处理程序
void EndptOut7EvHndler(void);
USB_Boolean USB_ReceivData(USB_EpNum EpNum, Uint16 *DataPtr, Uint16 *ByteCnt);
void USB_EnableDInt(USB_EpHandle hEp[]);
/****************************************************************/
/* 函数名: USB_EndpointInit() */
/* 功能: 对5509片上的USB节点进行初始化 */
/* 参数: */
/* EpIn0EventMark---输入控制节点中断事件的或组合 */
/* EpOut0EventMark---输出控制节点中断事件的或组合 */
/****************************************************************/
void USB_EndpointInit(Uint16 EpIn0EventMark, Uint16 EpOut0EventMark)
{
/* 对节点OUT0进行初始化 */
USB_initEndptObj(USB0,
&EndptObjOut0,
USB_OUT_EP0,
USB_CTRL,
0x40,
EpOut0EventMark,
Endpt0EvHndler);
/* 对节点INT0进行初始化 */
USB_initEndptObj(USB0,
&EndptObjIn0,
USB_IN_EP0,
USB_CTRL,
0x40,
EpIn0EventMark,
Endpt0EvHndler);
/* 对节点OUT1进行初始化 */
USB_initEndptObj(USB0,
&EndptObjOut1,
USB_OUT_EP1,
USB_BULK,
0x40,
EpOut1Event_mask,
EndptOut1EvHndler);
/* 对节点INT1进行初始化 */
USB_initEndptObj(USB0,
&EndptObjIn1,
USB_IN_EP1,
USB_BULK,
0x40,
EpIn1Event_mask,
EndptIn1EvHndler);
/* 对节点OUT2进行初始化 */
USB_initEndptObj(USB0,
&EndptObjOut2,
USB_OUT_EP2,
USB_BULK,
0x40,
EpOut2Event_mask,
EndptOut2EvHndler);
/* 对节点INT2进行初始化 */
USB_initEndptObj(USB0,
&EndptObjIn2,
USB_IN_EP2,
USB_BULK,
0x40,
EpIn2Event_mask,
EndptIn2EvHndler);
/* 对节点OUT3进行初始化 */
USB_initEndptObj(USB0,
&EndptObjOut3,
USB_OUT_EP3,
USB_BULK,
0x40,
EpOut3Event_mask,
EndptOut3EvHndler);
/* 对节点INT3进行初始化 */
USB_initEndptObj(USB0,
&EndptObjIn3,
USB_IN_EP3,
USB_BULK,
0x40,
EpIn2Event_mask,
EndptIn3EvHndler);
/* 对节点OUT3进行初始化 */
USB_initEndptObj(USB0,
&EndptObjOut3,
USB_OUT_EP3,
USB_BULK,
0x40,
EpOut3Event_mask,
EndptOut3EvHndler);
/* 对节点INT3进行初始化 */
USB_initEndptObj(USB0,
&EndptObjIn3,
USB_IN_EP3,
USB_BULK,
0x40,
EpIn3Event_mask,
EndptIn3EvHndler);
/* 对节点OUT4进行初始化 */
USB_initEndptObj(USB0,
&EndptObjOut4,
USB_OUT_EP4,
USB_BULK,
0x40,
EpOut4Event_mask,
EndptOut4EvHndler);
/* 对节点INT4进行初始化 */
USB_initEndptObj(USB0,
&EndptObjIn4,
USB_IN_EP4,
USB_BULK,
0x40,
EpIn4Event_mask,
EndptIn4EvHndler);
/* 对节点OUT5进行初始化 */
USB_initEndptObj(USB0,
&EndptObjOut5,
USB_OUT_EP5,
USB_BULK,
0x40,
EpOut5Event_mask,
EndptOut5EvHndler);
/* 对节点INT5进行初始化 */
USB_initEndptObj(USB0,
&EndptObjIn5,
USB_IN_EP5,
USB_BULK,
0x40,
EpIn5Event_mask,
EndptIn5EvHndler);
/* 对节点OUT6进行初始化 */
USB_initEndptObj(USB0,
&EndptObjOut6,
USB_OUT_EP6,
USB_BULK,
0x40,
EpOut6Event_mask,
EndptOut6EvHndler);
/* 对节点INT6进行初始化 */
USB_initEndptObj(USB0,
&EndptObjIn6,
USB_IN_EP6,
USB_BULK,
0x40,
EpIn6Event_mask,
EndptIn6EvHndler);
/* 对节点OUT7进行初始化 */
USB_initEndptObj(USB0,
&EndptObjOut7,
USB_OUT_EP7,
USB_BULK,
0x40,
EpOut7Event_mask,
EndptOut7EvHndler);
/* 对节点INT7进行初始化 */
USB_initEndptObj(USB0,
&EndptObjIn7,
USB_IN_EP7,
USB_BULK,
0x40,
EpIn7Event_mask,
EndptIn7EvHndler);
}
/****************************************************************/
/* 函数名: OutPackage_Hndler() */
/* 功能: 对输出设置包中断事件进行处理 */
/* 参数: */
/* 无 */
/****************************************************************/
void OutPackage_Hndler(void)
{
switch(USB0_SetupPkt.bRequest)
{
case 0x0: // GET_STATUS
break;
case 0x1: // CLEAR_FEATURE
break;
case 0x2: // RESERVED
case 0x4: // RESERVED
USB_stallEndpt(&EndptObjIn0); // 系统未定义,取消
break;
case 03: // SET_FEATURE
case 07: // SET_DESCRIPTOR
case 0x9: // SET_CONFIGURATION
case 0xb: // SET_INTERFACE
USB_postTransaction( &EndptObjIn0,0,NULL,USB_IOFLAG_NONE);
break;
case 0x5: // SET_ADDRESS
USB_setDevAddr(USB0,((USB0_SetupPkt.wValue)&0xFF));
USB_postTransaction( &EndptObjIn0,0,NULL,USB_IOFLAG_NONE);
break;
case 0xc: // SYNCH_FRAME
USB_postTransaction( &EndptObjIn0,0,NULL,USB_IOFLAG_NONE);
break;
case 0xb6: // 用户需求代码
switch(USB0_SetupPkt.wValue)
{
case 0x2:
usbflag = USB_BULK1_WRITE; // host读endpoint1
USB_postTransaction( &EndptObjIn0,0,NULL,USB_IOFLAG_NONE);
break;
case 0x3:
usbflag = USB_BULK2_WRITE; // host读endpoint2
USB_postTransaction( &EndptObjIn0,0,NULL,USB_IOFLAG_NONE);
break;
case 0x4:
usbflag = USB_BULK3_WRITE; // host读endpoint3
USB_postTransaction( &EndptObjIn0,0,NULL,USB_IOFLAG_NONE);
break;
case 0x5:
usbflag = USB_BULK4_WRITE; // host读endpoint4
USB_postTransaction( &EndptObjIn0,0,NULL,USB_IOFLAG_NONE);
break;
case 0x6:
usbflag = USB_BULK5_WRITE; // host读endpoint5
USB_postTransaction( &EndptObjIn0,0,NULL,USB_IOFLAG_NONE);
break;
case 0x7:
usbflag = USB_BULK6_WRITE; // host读endpoint6
USB_postTransaction( &EndptObjIn0,0,NULL,USB_IOFLAG_NONE);
break;
case 0x8:
usbflag = USB_BULK5_WRITE; // host读endpoint7
USB_postTransaction( &EndptObjIn0,0,NULL,USB_IOFLAG_NONE);
break;
// 用户可以在这继续添加自己的需求指令
default:
break;
}
break;
case 0xb3: // 为用户开辟
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -