Board logo

标题: [求助]关于dp256的mscan的程序 [打印本页]

作者: tornadoorc    时间: 2007-5-9 12:40     标题: [求助]关于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编辑过]


作者: nishui_2000    时间: 2007-5-11 14:08

你可以搜索一下这个论坛,我在上面发过CAN的例子




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0