程序只需接受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编辑过]
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |