程序只需接受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编辑过] |