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

📄 usb_function.c

📁 TMS320VC5509设备端USB设备驱动程序源文件
💻 C
📖 第 1 页 / 共 3 页
字号:

/****************************************************************/
/*	文件名:		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 + -