在线时间0 小时
UID2053864
注册时间2013-11-3
NXP金币0
该用户从未签到
新手上路

- 积分
- 10
- 最后登录
- 1970-1-1
|
菜鸟求助:
我用的是9S12XS128单片机,通过以下CAN初始化和处理程序,本菜想实现:接收汽车ECU的CAN总线上ID为“0x18F00F52”的报文,即通过中断处理程序能够得到id =418385746(即0x18F00F52)的结果。
现在的难点在于:CAN0IDAC CAN0IDAR CAN0IDMR 等几个寄存器不会设定,请高手指点,谢谢。
void INIT_CAN0(void)
{
if(CAN0CTL0_INITRQ==0) // 查询是否进入初始化状态
CAN0CTL0_INITRQ =1; // 进入初始化状态
while (CAN0CTL1_INITAK==0); //等待进入初始化状态
CAN0BTR0_SJW = 0; //设置同步
CAN0BTR0 = 0x07; //设置波特率
CAN0BTR1 = 0x1c; //设置时段1和时段2的Tq个数 ,总线频率为250kb/s
// 通过
CAN0IDAC =0x20;
CAN0IDAR0 = 0xC7;
CAN0IDMR0 = 0x00;
CAN0IDAR1 = 0x98;
CAN0IDMR1 = 0x00;
CAN0IDAR2 = 0x1E;
CAN0IDMR2 = 0x00;
CAN0IDAR3 = 0xA5;
CAN0IDMR3 = 0x00;
//CAN0IDAR4 = 0xC7;
CAN0IDMR4 = 0xFF;
//CAN0IDAR5 = 0x98;
CAN0IDMR5 = 0xFF;
//CAN0IDAR6 = 0x1E;
CAN0IDMR6 = 0xFF;
//CAN0IDAR7 = 0xA5;
CAN0IDMR7 = 0xFF;
CAN0CTL1 = 0xC0; //使能MSCAN模块,设置为一般运行模式、使用总线时钟源
CAN0CTL0 = 0x00; //返回一般模式运行
while(CAN0CTL1_INITAK); //等待回到一般运行模式
while(CAN0CTL0_SYNCH==0); //等待总线时钟同步
CAN0RIER = 1; //禁止接收中断 zdj:1---开启中断;0---关闭中断
}
Bool MSCAN0GetMsg(struct can_msg *msg)
{
unsigned long id, idt; // define id,idt from yangjun
byte node; // define node from yangjun
// unsigned char sp2; //original program
unsigned int idh = CAN0RXIDR0 21
|
|