📄 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 + -