www.pudn.com > CAN_USB.rar > define.h


//出错延时 
#define TIME_OUT	8000 
 
#define UINT uint 
#define UCHAR uchar 
#define ULONG ulong 
 
 
void Delay(ulong time) 
{ 
	while(time--); 
} 
 
ULONG RTI_count = 0; 
ULONG CAN_REV_COUNT = 0; 
 
//CAN的波特率设置 
#define	BTR0_125kbps	0x87 
#define	BTR1_125kbps	0xD8 
 
#define	BTR0_250kbps	0x83 
#define	BTR1_250kbps	0xD8 
 
#define	BTR0_500kbps	0x81 
#define	BTR1_500kbps	0xD8 
 
#define	BTR0_1000kbps	0x80//有问题 
#define	BTR1_1000kbps	0xD8//有问题 
 
UCHAR	CAN_BTR0 = BTR0_500kbps;//波特率初始值是500kbps 
UCHAR	CAN_BTR1 = BTR1_500kbps;//波特率初始值是500kbps 
 
//-------------------   CAN   ------------------------ 
//定义CAN信息帧的数据类型。 
typedef  struct  _ASCL_CAN_OBJ{ 
	ulong	time; 
	ulong	channel 	;//接收该帧的CAN通道 
	ulong	ID; 
	uchar	RemoteFlag	;//是否是远程帧 
	uchar	ExternFlag	;//是否是扩展帧 
	uchar	DataLen		; 
	uchar	Data[8]; 
	uchar	Recv_buffer_overflow_status; 
}ASCL_CAN_OBJ; 
 
uchar Recv_buffer_overflow = 0; 
uchar SCI_CMD = 0; 
uchar RX0_OK = 0; 
uchar RX1_OK = 0; 
uchar TX_OK = 0; 
 
//发送帧信息格式定义 
typedef  struct  _SendFrame_OBJ 
{ 
	uchar   RemoteFlag;         //远程帧标志 
	uchar   ExternFlag;         //扩展帧标志 
	ulong   ID;                 //标识符 
	uchar   Priority;           //优先级  
	uchar   DataLen;            //数据长度 
	uchar   Data[8];            //数据域 
}SendFrame_OBJ; 
SendFrame_OBJ   SendFrame; 
 
 
//-------------------   USB   ------------------------ 
 
#define D12_DATA	(*((volatile unsigned char*)(0x0000))) 
#define D12_CMD		(*((volatile unsigned char*)(0x0001))) 
 
#define D12_DATA_SOFT 		0x0000 
#define D12_COMMAND 	0x0100 
 
#define D12_CMD_HARD		0xAAAA 
#define D12_DATA_HARD		0xBBBB 
 
#define		D12_SPD_0		( PTM_PTM6 = 0 ) 
#define		D12_SPD_1		( PTM_PTM6 = 1  ) 
#define		D12_A0_0		( PTM_PTM7 = 0 )	//或者( PORTB_BIT0 = 0 )	//看硬件连接情况 
#define		D12_A0_1		( PTM_PTM7 = 1 )	//或者( PORTB_BIT0 = 1 )	//看硬件连接情况 
#define		D12_INT_0		( PORTE_BIT1 == 0 ) 
#define		D12_INT_1		( PORTE_BIT1 == 1 ) 
 
#define 	D12_WR_1		 PORTE_BIT4 = 0; 
#define 	D12_WR_0		 PORTE_BIT2 = 0;PORTE_BIT4 = 1;  
#define 	D12_RD_1		 PORTE_BIT4 = 0;  
#define 	D12_RD_0		 PORTE_BIT2 = 1;PORTE_BIT4 = 1;  
 
 
#define		Set_LED(led)	(PTP = ~led) 
uchar Get_LED() 
{ 
	return ~PTP; 
} 
 
uchar USB_D12_OK = 0; 
#define	RTI_LED_ON		(PTP_PTP0 = 0) 
#define	RTI_LED_OFF		(PTP_PTP0 = 1) 
 
#define	USB_LED_ON		(PTP_PTP1 = 0) 
#define	USB_LED_OFF		(PTP_PTP1 = 1) 
 
#define	LED2_ON			(PTP_PTP2 = 0) 
#define	LED2_OFF		(PTP_PTP2 = 1) 
 
#define	LED3_ON			(PTP_PTP3 = 0) 
#define	LED3_OFF		(PTP_PTP3 = 1) 
 
#define	CAN1_TX_LED_ON		(PTP_PTP4 = 0) 
#define	CAN1_TX_LED_OFF		(PTP_PTP4 = 1) 
 
#define	CAN1_RX_LED_ON		(PTP_PTP5 = 0) 
#define	CAN1_RX_LED_OFF		(PTP_PTP5 = 1) 
 
 
#define	CAN0_TX_LED_ON		(PTP_PTP6 = 0) 
#define	CAN0_TX_LED_OFF		(PTP_PTP6 = 1) 
 
#define	CAN0_RX_LED_ON		(PTP_PTP7 = 0) 
#define	CAN0_RX_LED_OFF		(PTP_PTP7 = 1) 
 
 
UCHAR D12_INT = 0; 
 
UINT EP0_Request_wLength = 0; 
UINT EP0_Request_wCount = 0; 
UCHAR * EP0_Request_PData; 
UINT EP0_state = 0; 
 
UINT EP0_Receive_wLength = 0; 
UINT EP0_Receive_wCount = 0; 
UCHAR EP0_Receive_PData[16] = {0}; 
 
UINT EP1_CMD = 0; 
UINT EP1_Request_wLength = 0; 
UINT EP1_Request_wCount = 0; 
UCHAR EP1_Request_PData[64] = {0}; 
UINT EP1_state = 0; 
 
UINT EP2_CMD = 0; 
ULONG EP2_Request_wLength = 0; 
ULONG EP2_Request_wCount = 0; 
UCHAR* EP2_Request_PData; 
UCHAR EP2_Test_data[64] ={0}; 
UINT EP2_state = 0; 
 
#define IDLE           0 
#define TRANSMIT       1 
#define RECEIVE        2 
 
UCHAR EP1_Out_buf[16] = {0}; 
UCHAR EP2_Out_buf[64] = {0}; 
 
#define SWAP(x)   ((((x) & 0xFF) << 8) | (((x) >> 8) & 0xFF)) 
 
//设备描述符 
UCHAR DeviceDescr[18] = 
{ 
	0x12,0x01, 
    0x10,0x01,//USB规范版本1.1,以BCD码表示 
    0xdc,  //设备类码(0xdc表示测试类型) 
    0,  //设备子类码 
    0,  //设备协议 
    16,//最大封包大小 
	0xaa,0xaa,//制造商ID(idVendor) 
	0xbb,0xbb,//产品ID(idProduct) 
	0x00,0x01,//发行序号,以BCD表示 
    0,//制造商的字符串描述符索引 
    0,//产品的字符串描述符索引 
    0,//设备序号的字符串描述符索引 
	1//配置描述符的个数 
}; 
 
 
UCHAR ConfigDescr[46] = 
{ 
	//配置描述符 
    0x09, 0x02, 
    0x2e,0x00,	//描述符的总长度 
	1,           //接口描述符的个数 
	1,           //该配置描述符的值 
    0,           //该配置描述符的字符串描述符的索引 
	0xa0,        //供电方式:总线供电 
	1,         //最大耗电量 
	 
	//接口描述符 
	0x09,//接口描述符长度 
    0x04,//接口描述符标识 
    0,		//接口描述符的索引(从0开始) 
    0,		//交互设定值 bAlternateSetting 
	4,		//端点数目 
	0xdc,		//接口类码(0xdc表示测试类型) 
	0xa0,		//接口次类码,0表示无无次类码,1表示引导接口次类 
	0xb0,		//接口协议,0表示无,1表示键盘接口协议,2表示鼠标接口协议 
	0,		//接口描述符的字符串描述符的索引 
	 
	//端点描述符--EP1_IN 
	0x07,//sizeof(USB_ENDPOINT_DESCRIPTOR), 
	0x05,//USB_ENDPOINT_DESCRIPTOR_TYPE, 
	0x81,//端点的地址 
	0x03,//00->控制传输;01->实时传输;02->大量传输;03->中断传输 
	16,0x00,//该断点能传输的最大字节数 
	10,           //轮循间隔,以1毫秒为单位(只对中断端点和同步端点有效) 
	 
	//端点描述符--EP1_OUT 
	0x07,          //sizeof(USB_ENDPOINT_DESCRIPTOR), 
	0x05,          //USB_ENDPOINT_DESCRIPTOR_TYPE, 
	0x01,           //端点的地址 
	0x03,          ////00->控制传输;01->实时传输;02->大量传输;03->中断传输 
	16,0x00,     //该断点能传输的最大字节数, 
	10,              ////轮循间隔,以1毫秒为单位(只对中断端点和同步端点有效) 
	 
	//端点描述符--EP2_IN 
	0x07,//sizeof(USB_ENDPOINT_DESCRIPTOR), 
	0x05,//USB_ENDPOINT_DESCRIPTOR_TYPE, 
	0x82,//端点的地址 
	0x02,////00->控制传输;01->实时传输;02->大量传输;03->中断传输 
	64,0x00,//该断点能传输的最大字节数 
	0,           ////轮循间隔,以1毫秒为单位(只对中断端点和同步端点有效) 
	 
	//端点描述符--EP2_OUT 
	0x07,          //sizeof(USB_ENDPOINT_DESCRIPTOR), 
	0x05,          //USB_ENDPOINT_DESCRIPTOR_TYPE, 
	0x02,           //端点的地址 
	0x02,          ////00->控制传输;01->实时传输;02->大量传输;03->中断传输 
	64,0x00,     //该断点能传输的最大字节数, 
	0              ////轮循间隔,以1毫秒为单位(只对中断端点和同步端点有效) 
}; 
 
 
struct _device_request 
{ 
	UCHAR bmRequestType;//一个字节 
	UCHAR bRequest;//一个字节 
	UINT wValue;//两个字节 
	UINT wIndex;//两个字节 
	UINT wLength;//两个字节 
} device_request; 
 
UCHAR * my_buf= (UCHAR *)"This is TMS320LF2407 and PDIUSBD12's Response To PC! I Love USB.(BY LvWei)--------*"; 
UCHAR CMD_EXE_STATUS[8] = {0};//前五个字节复制bRequest,wValue,wIndex,  5,6,字节保留,7字节表示CMD是否成功执行 
 
#define CAN_RECV_BUF_LENGTH		256					//接收缓冲区长度 
 
uchar		Recv_Frame_status[CAN_RECV_BUF_LENGTH]; 
 
//USB包的格式定义 
//注意:这个结构体修改了,在EP2中的发送历程中计算packet长度的地方也要修改 
 
typedef union _union_USB_Packet_OBJ 
{	 
	struct  _USB_Packet_OBJ 
	{ 
		ULONG   start; 
		ULONG	CAN_frame_num; 
		 
		ASCL_CAN_OBJ Recv_Frame[CAN_RECV_BUF_LENGTH];//缓冲区 
			 
		ULONG   end; 
	} USB_Packet_struct; 
	 
	UCHAR Bytes[1 + 2 + sizeof(ASCL_CAN_OBJ)*CAN_RECV_BUF_LENGTH + 1]; 
} USB_Packet_; 
 
USB_Packet_		USB_Packet;