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

📄 define.h

📁 使用freescale的DP256B和D12做的CAN转USB接口板的固件源代码,现在的CAN分析仪每个至少要5000多,自己实现一个,希望对大家开发CAN转USB有所帮助.
💻 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;

⌨️ 快捷键说明

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