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

📄 can_test.c

📁 CAN 有用的DSP编程 CAN 有用的DSP编程 CAN 有用的DSP编程
💻 C
字号:
#include "SEED-DSK2407.h"
#include "CAN.h"
Uint16 can_receive_flag; 
Uint16 receive_deal_flag;
Uint16 mail_data[4];


void main()
{
	DINT; 
	can_receive_flag = 0; 
	receive_deal_flag = 0;
	SystemInit();
	CanInit();  
	*IFR = 0x3f;
	*IMR = 0x10;
	EINT;

	for(;;)
	{
		    if(can_receive_flag == 1)
		    {
		            can_receive_flag = 0; 
		            receive_deal_flag = 1;
		            
		    }
		    *CANTCR = 0x20;
		    while(can_receive_flag == 0)
		    {
		    	  	if((*CANTCR & 0x2000) == 0x2000)
		    	  	{
		    	  	      break;
		    	  	}
		   	}
		    *CANTCR = 0x2000;		    
	}
}

void SystemInit(void)
{
	WSGR = 0;	
	*WDCR = 0xe8;
	*SCSR1 = 0x02fe;
}

void CanInit(void)
{
	/* 设置CANTX和CANRX为CAN功能口 */
	*MCRB = *MCRB | 0xc0;
	
	/* 邮箱2为接收方式、邮箱3为发送方式 */
	*CANMDER = 0x40;
	/* 设置ID屏蔽位 */
	*CANLAM1H = 0x7fff;
	*CANLAM1L = 0xffff;
	/* 设置配置请求,系统为自闭环模式 */
	*CANMCR = 0x1040;
	/* 判断CCR的配置是否为1,可以对BCR1和BCR2寄存器修改 */
	while((*CANGSR & 0x10) == 0);
	/* CAN波特率为1M */
	*CANBCR2 = 0x27;
	/*  */
	*CANBCR1 = 0x13;
	/* 关闭CCR,配置请求 */
	*CANMCR = *CANMCR & 0xefff;
	/* 判断CCR的配置是否为0,可以对BCR1和BCR2寄存器修改 */
	while((*CANGSR & 0x10) == 0x10);
	/* 邮箱2为接收方式、邮箱3为发送方式 */
	*CANMDER = 0x40;
	/* cdr = 1,数据区改变请求 */
	*CANMCR = 0x143;
	/* 设置邮箱2的控制字和ID */
	*CANMSGID2H = 0x4447;
	*CANMSGID2L = 0;
	/*  */
	*CANMSGCTRL2 = 0x08;
	/* 清邮箱2 */
	*CANMBX2A = 0;
	*CANMBX2B = 0;
	*CANMBX2C = 0;
	*CANMBX2D = 0;
	/* 设置邮箱3的控制字和ID */
	*CANMSGID3H = 0x2447;
	*CANMSGID3L = 0;
	/*  */
	*CANMSGCTRL3 = 0x08;
	/* 清邮箱2 */
	*CANMBX3A = 0x3210;
	*CANMBX3B = 0x7654;
	*CANMBX3C = 0xba98;
	*CANMBX3D = 0xfedc;
	/*  */
	*CANMCR = 0x4c0;
	/* me3和me2使能 */
	*CANMDER = 0x4c;
	/* 清CAN中断标志 */
	*CANIFR = 0xFFFF;
	/**/
	*CANIMR = 0xf7ff;
}

interrupt void PHANTOM(void)
{

} 

interrupt void c_int5(void)
{
	if((*PIVR & 0x40) == 0x40)
	{
		can_receive_flag = 1;
		*CANRCR = 0x40;
		*CANIFR = 0xffff;
		*CANMDER = 0;
		*CANMCR = 0x140;
		mail_data[0] = *CANMBX2A;
		mail_data[1] = *CANMBX2B;
		mail_data[2] = *CANMBX2C;
		mail_data[3] = *CANMBX2D;
		*CANMBX3A = mail_data[0] + 1;
		*CANMBX3B = mail_data[1] + 1;
		*CANMBX3C = mail_data[2] + 1;
		*CANMBX3D = mail_data[3] + 1;
		*CANMCR = 0x4c0;
		*CANMDER = 0x4c;
	}
/*	*IFR = 0x02;*/
	EINT;
}

⌨️ 快捷键说明

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