DZ60的CAN程序(2)

2019-02-16 14:12

{

*((&CANTDSR0)+i) = temp_data[i]; }

CANTDLR = dataLen; // 写入数据长度 }

////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////远程帧格式//////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////// else {

CANTDLR = 0; // 远程帧

CANTIDR0 = temp_id[0]; CANTIDR1 = temp_id[1]; CANTIDR2 = temp_id[2]; CANTIDR3 = temp_id[3];

CANTIDR3_RTR = RTR;

CANTIDR1_SRR = 1; // 扩展格式时RTR置位 CANTIDR1_IDE = 1; // 扩展帧 }

CANTTBPR = priority; // 写入优先级

// 清TXx标志,缓冲器准备发送 CANTFLG = txEmptyBuf; // 相关位写1清零 return 1; }

//---------------------------------------------------------------------*

//函数名:VCAN_RX() * //功 能:中断程序处理 * //参 数: 无 * //返 回: 无 * //说 明: *

// (1)CAN时钟源使用芯片总线时钟,设置CAN通信频率为250KHz * // (2)关闭滤波器,接收CAN总线上所有的报文 * //---------------------------------------------------------------------*

#pragma CODE_SEG NON_BANKED interrupt 28 VCAN_RX (void) {

uint8 i;

CANRIER_RXFIE = 0; // 禁止接收中断

CANCTL0_RXFRM = 1;

////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////标准ID格式//////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////

if(0 == (CANRIDR1&0x08)) // 检测 CAN协议报文模式 (一般/扩展)识符 {

recID[0] = CANRIDR0; // 收到标准ID格式 recID[1] = CANRIDR1; // 收到标准ID格式

RTR = CANRIDR1_SRR; IDE = 0; }

//////////////////////////////////////////////////////////////////////////////////////////

标识符 读出标

////////////////////////////////////扩展ID格式//////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////// else // 收到扩展格式ID {

recID[0] = CANRIDR0; // 收到扩展ID格式 recID[1] = CANRIDR1; // 收到扩展ID格式 recID[2] = CANRIDR2; // 收到扩展ID格式 recID[3] = CANRIDR3; // 收到扩展ID格式

RTR = CANRIDR3_RTR; IDE = 1; }

////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////数据帧格式//////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////

if(0 == RTR) // 判断是否为数据帧 {

dataLen = CANRDLR_DLC; // 读取数据帧长度

for(i = 0; i < dataLen &&i<8; i++) {

Rxdata[i] = *((&CANRDSR0)+i); // 读取数据 } }

////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////远程帧格式//////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////

else // 远程帧 {

dataLen = CANRDLR_DLC;

sendID[0] = CANRIDR0; sendID[1] = CANRIDR1; sendID[2] = CANRIDR2; sendID[3] = CANRIDR3;

CANRIDR3_RTR = RTR;

CANTIDR1_SRR = RTR; CANTIDR1_IDE = 1; }

CANRFLG = 1;

CANRIER_RXFIE = 1; }

// 扩展格式时RTR置位 // 扩展帧 // 接收缓冲器已满 报文成功接收


DZ60的CAN程序(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中央银行学期末复习试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: