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

📄 can_test.c

📁 MDK环境下CAN通信实验源码包fors3c2410,含有测试程序
💻 C
字号:
/*********************************************************************************************
* File:	can_test.c
* Author:	embest
* Desc:	EdukitII CAN Test 
* History:	
*			H.T.Zhang, Programming start, September 27, 2005
*********************************************************************************************/
#include "sja1000_peli.h"
#include "def.h"

#define		ERR_ENTER_RETSET		0
#define		ERR_COMMUNICATION	1
#define		ERR_SET_BAUD			2
#define		ERR_SET_FILTER			3
#define		ERR_OUTPUT_CLKD		4
#define		ERR_QUIT_RETSET		5
#define		ERR_SEND			6
#define		ERR_RCV				7
/*
int f_nPadRow=20;
// 1
int f_nTopicCol=80,f_nTopicRow=20;
// 2
int f_nLabelCol=90,f_nLabelRow=70;
// 3
int f_nItemCol=110,f_nItemRow=70;
// 4
int f_nDescCol=35,f_nDescRow=50;
// 5
int f_nInfoCol=35,f_nInfoRow=120;
// 6 Return coordinate
int f_nRetCol=110,f_nRetRow=210;
*/
//void sja1000_init(void);
int sja1000_init(void);
void print_info (INT16T col, INT16T row, UINT8T color, UINT8T * info);

char ErrorFlag = 1;		//错误标志
char * cErrInfo[] = 
{
	"Enter reset model failed!",		
	"Communication failed!",
	"Set baudrate failed!",
	"Set acceptance code register failed!",
	"Sset output control and Clock Divider failed!",
	"Quit reset model failed!",
	"Send data to CAN failed!",
	"Receive data from CAN failed!"	
};
/*********************************************************************************************
* name:		can_test
* func:		CAN bus test
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void can_test(void)
{	
	unsigned char TempData; 
	int i = 0;	
	UINT8T ucSendBuf[13];		//报文发送缓冲区
	UINT8T ucRcvBuf[13];		//报文接收缓冲区
	
	/*初始化发送帧*/
	ucSendBuf[0] = 0x08;
	ucSendBuf[1] = 0xff;
	ucSendBuf[2] = 0xff;
	for(i=3;i<11;i++)
		ucSendBuf[i] = 0xa;	
		
	if(sja1000_init())
	{
		if(!sja_write_data(ucSendBuf))		//数据写入发送缓冲区
		{
			uart_printf("%s\n",cErrInfo[ERR_SEND]);
		}
		else 
		{
			sja_command_prg(SRR_CMD);		//置位自接收请求
			delay(500);
			uart_printf("Send data to CAN success!\n");	
											
			if(!sja_receive_data(ucRcvBuf))	//读取接收缓冲区数据
			{
				sja_command_prg(RRB_CMD);	//释放接收缓冲区
				uart_printf("%s\n",cErrInfo[ERR_RCV]);
			}
			else 
			{
				uart_printf("Receive data is:");
				for(i=3;i<11;i++)
					uart_printf("%X",ucRcvBuf[i]);
				uart_printf("\n");	
				uart_printf("Receive data from CAN success!\n");
				sja_command_prg(RRB_CMD);	//释放接收缓冲区
			}
		}			
	}
}
/*********************************************************************************************
* name:		sja1000_init
* func:		init sja1000
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
int sja1000_init(void)
{
	unsigned char ucAcr[5],ucAmr[5];
	int i;
	for(i=0;i<4;i++)
		ucAcr[i] = 0xff;
	for(i=0;i<4;i++)
		ucAmr[i] = 0xff;
	


	if(!sja_enter_resetmode())
	{
	    ErrorFlag = 0;
		uart_printf("%s\n",cErrInfo[ERR_ENTER_RETSET]);
	    return 0;	
	}		 
	if(!sja_set_baudrate(ByteRate_100k))//初始化系统默认值波特率100kbps
	{
	    ErrorFlag = 0;
		uart_printf("%s\n",cErrInfo[ERR_SET_BAUD]);
	    return 0;
	}
	if(!sja_set_outclock(0xaa,0xc0))//0x48))	  /////??????????????????
	{
		ErrorFlag = 0;
		uart_printf("%s\n",cErrInfo[ERR_OUTPUT_CLKD]);
	    return 0;
	}
	
	SJA_ADDR = REG_RBSA;//RX缓冲区起始地址寄存器
	SJA_DATA = 0x00;
	    
	if(!sja_set_object(ucAcr,ucAmr))
	{
		ErrorFlag = 0;
		uart_printf("%s\n",cErrInfo[ERR_SET_FILTER]);
	    return 0;
	}
	
	SJA_ADDR = REG_MODE;//进入自接收模式
	SJA_DATA = 0x0c; 
		
	if(!sja_quit_resetmode())
	{
		ErrorFlag = 0;
		uart_printf("%s\n",cErrInfo[ERR_QUIT_RETSET]);
	    return 0;
	}
	else 
	{	
		SJA_ADDR = REG_INT_EN;//允许中断
		SJA_DATA = 0xff; 				
		ErrorFlag = 1;
		uart_printf("Initialize sja1000 success!\n");
	    return 1;
	}
}

⌨️ 快捷键说明

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