首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]关于dp256的mscan的程序

[求助]关于dp256的mscan的程序

程序只需接受CAN上的数据,应该无须报文滤波,
因为从来没写过CAN的程序,所以不知道该怎么写,
下面是can部分的程序段,忘达人指教,万分感谢!!
另,在主程序中应该怎样调用,接受到的数据?

我的邮箱:tornadoorc@tom.com



#include <hidef.h>      /* common defines and macros */
   #include <mc9s12dp256.h>     /* derivative information */


unsigned char ID[4];
unsigned char msgout[8];

void MSCAN0Init(void) {

MODRR_MODRR0 = 0;
MODRR_MODRR1 = 0; //选择PM0,PM1

CAN0CTL0 = 0x01; //进入初始化模式
CAN0CTL1 = 0x87;
CAN0BTR0 = 0xC7; //SJW = 3 + 1; Prescaler = 7 + 1
CAN0BTR1 = 0x3A; //TSEG2 = 10; TSEG1 = 3

/* Oscillator Clock
BitRate = --------------------------------------------------------------- = 125kbps
Prescaler * (1 + (TSEG2 + 1) + (TSEG1 + 1)) */


CAN0IDMR0 = 0xFF; /*设置滤波器,全部设为1表示没有滤波*/
CAN0IDMR1 = 0xFF;
CAN0IDMR2 = 0xFF;
CAN0IDMR3 = 0xFF;
CAN0IDMR4 = 0xFF;
CAN0IDMR5 = 0xFF;
CAN0IDMR6 = 0xFF;
CAN0IDMR7 = 0xFF;

CAN0CTL0_INITRQ = 0; /* 请求进入正常工作模式 */

while(CAN0CTL1_INITAK != 0) /* 等待推出初始化模式 */
{
}


CAN0CTL0_WUPE = 1; /* WAKE UP 使能*/

CAN0RFLG = 0xC3; //Reset Receiver Flags
CAN0RIER = 0x01; /* 接受中断使能 */


}






void interrupt MSCAN0Rec(unsigned char ID[4], unsigned char msgout[8],word z)
{
CAN0RFLG_RXF=1; /*清除接收中断标志*/
ID[0]=CAN0RXIDR0;
ID[1]=CAN0RXIDR1;
ID[2]=CAN0RXIDR2;
ID[3]=CAN0RXIDR3;
msgout[0]=CAN0RXDSR0;
msgout[1]=CAN0RXDSR1;
msgout[2]=CAN0RXDSR2;
msgout[3]=CAN0RXDSR3;
msgout[4]=CAN0RXDSR4;
msgout[5]=CAN0RXDSR5;
msgout[6]=CAN0RXDSR6;
msgout[7]=CAN0RXDSR7;
z=CAN0RXDLR ;
}

[此贴子已经被作者于2007-5-9 10:54:48编辑过]

[此贴子已经被作者于2007-5-9 12:40:22编辑过]

你可以搜索一下这个论坛,我在上面发过CAN的例子
水泡泡
 我的QQ是:52449804 
 我的网站是: www.dyic.com.cn
 欢迎访问和留言跟我联系
返回列表