ARM技术william hill官网
直播中

刘润生

7年用户 753经验值
私信 关注
[问答]

怎样去解决ARM读写sja1000的问题呢?

我是用S3C2416做的cpu,系统用WINCE,扩展SJA1000的CAN模块,做驱动时遇到的困难,就是底层读写SJA1000寄存器出的错误,参考的是周立功的书。然后从串口打印观察,每次读出的寄存器值都不对,是最近一次写入的值,又懂得大神,请指导

void SJA1000_ReadRegister(UINT8 reg, UINT8 *value)
{
//g_lpBaseSJA1000[8] = reg;
//*value = (UINT8)g_lpBaseSJA1000[4];

WRITE_REGISTER_UCHAR((PUCHAR)&g_lpBaseSJA1000[7], reg);
*value = READ_REGISTER_UCHAR((PUCHAR)&g_lpBaseSJA1000[0]);

RETAILMSG(1,(TEXT("read from reg [0x%02x]=[0x%02x]\r\n"),reg,*value));

}

void SJA1000_WriteRegister(UINT8 reg, UINT8 value)
{
//g_lpBaseSJA1000[4] = reg;
//g_lpBaseSJA1000[8] = value;

WRITE_REGISTER_UCHAR((PUCHAR)&g_lpBaseSJA1000[7], reg);
WRITE_REGISTER_UCHAR((PUCHAR)&g_lpBaseSJA1000[0], value);
RETAILMSG(1,(TEXT("write value to reg [0x%02x]=[0x%02x]\r\n"),reg,value));

}

回帖(1)

李勇

2023-2-9 17:09:55
果真的是需要用到6个独立的CAN通道的话,可以这样加SJA1000)
2、用Intel或者Moto总线方式,分地址去读写每个SJA1000,接收发送的时候有中断提示的。这样本身就很容易区分开CAN的控制。
3、ARM的对各个SJA1000任务的切换可以用ARM的操作系统或者其他的方式切换。和其他的控制一样。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分