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

📄 can.c

📁 这是CAN通信接口的程序
💻 C
字号:
/*************************************************************
 *Copyright (c) 2005,北京精仪达盛科技有限公司研发部
 *All rights reserved
 *
 *文件名称:can.c
 *文件标示:
 *摘    要:本文件内容为用tms320lf2407 dspcan总线接口实验     
 *          (只有发送,没有接收)
 *
 *当前版本:1.0
 *作    者:王飞
 *完成日期:2005年2月17日
 *
 *取代版本:
 *原作者  :
 *完成日期:
 *************************************************************/

/************************文件预处理***************************/
#include "exp3_2407.h"
/*************************************************************/

/********************全局变量定义与初始化*********************/

/*************************************************************/

/*******************函数、子程序声明与定义********************/
void sys_ini()               //系统初始化子程序
{
 /*关总中断*/
  asm(" setc INTM");         
 /*抑制符号位扩展*/
  asm(" clrc SXM");          
 /*累加器中结果正常溢出*/
  asm(" clrc OVM");          
 /*禁止看门狗*/
  * WDCR=0x00E8;             
 /*使能can外围模块*/
  *SCSR1=0x81FE;
 /*使能CAN引脚*/   
  *MCRB=*MCRB|0X0C0;      			                                      
 /*清除所有中断标志,"写1清0"*/ 
  * IFR=0xFFFF;                                  
}   

void can_ini()              //can初始化子程序
{
	*CANIFR=0XFFFF;		    // 清所有CAN中断标志
	*CANLAM1H=0X7FFF;		// 设置邮箱2、3的屏蔽ID寄存器
	*CANLAM1L=0XFFFF;		// 0则ID必须匹配
	*CANMCR=0X1040;			//  CCR=1 改变配置请求
	while(*CANGSR&0X0010==0)continue;	// 当CCE=1 时即可配置 BCR2,BCR1 寄存器
	*CANBCR2=0X01;				// 波特率预分频寄存器
	*CANBCR1=0X033;				// 波特率设置
	*CANMCR=*CANMCR&0XEFFF;		//  CCR=0 改变配置结束请求
	while(*CANGSR&0X0010!=0)continue; 	// 只有当CCE=0时,BCR2,BCR1 寄存器配置成功
	*CANMDER=0X040;  			// 不使能邮箱,邮箱2设为接收方式
	*CANMCR=0X0143;            	//  CDR=1,数据区改变请求
	*CANMSGID2H=0X2447;			// 设置邮箱2的控制字及ID
						        //  IDE=0, AME=0, AAM=0
						        // 标准方式为MSGID2H[12-2]
	*CANMSGID2L=0XFFFF;
	*CANMSGCTRL2=0X08; 			// 设置控制域
						        // 数据长度DCL = 8,RTR=0 数据帧
	*CANMBX2A=0X0000;			// 邮箱2信息初始化
	*CANMBX2B=0X0000;
	*CANMBX2C=0X0000;
	*CANMBX2D=0X0000;
	*CANMSGID3H=0X2447;         // 设置邮箱3的标识符
	*CANMSGID3L=0XFFFF;
	*CANMSGCTRL3=0X08;			//  RTR=0,DCL=8
	*CANMBX3A=0X2211;			// 邮箱3信息初始化
	*CANMBX3B=0X4433;
	*CANMBX3C=0X6655;
	*CANMBX3D=0X8877;
	*CANMCR=0X04C0;				//  DBO=1,ABO=1
	*CANMDER=0X4C;				//  ME3=1,MBX3 发送, ME2=1 接收        
}
/*************************************************************/

/*****************中断服务子程序声明与定义********************/
interrupt void nothing()     //哑中断子程序
{
  return;         
}
/*************************************************************/

/**************************主程序*****************************/
void main(void)
{
     sys_ini();	   // 系统初始化程序
     can_ini();	   // CAN初始化程序

     for(;;)
     {
        *CANTCR=0X20;				// MBX3请求发送 
	     while(*CANTCR&0X2000==0)	// 等待发送应答
         continue; 
	    *CANTCR=0X2000; 			// 清 TA3 和MIF3标志位
      }
}
/***************************结束******************************/

⌨️ 快捷键说明

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