在仿真中,右边的图是我赋值后的CanbRegs.CAN_IF1MCTL寄存器的值,表示数据长度为4,但是经过发送数据后发现值变成0,如左图。请问什么情况下这个寄存器的值会变(没有写入的情况),上面怎么解决。
发送程序,用的是C2000的例程里面的函数如下;
void CAN_sendMessage(uint32_t base, uint32_t objID, uint16_t msgLen,
const uint16_t *msgData)
仿真发现在上面的函数的如下语句:
msgCtrl = HWREGH(base + CAN_O_IF1MCTL);
//
// Check provided DLC size with actual Message DLC size
//
ASSERT((msgCtrl & CAN_IF1MCTL_DLC_M) == msgLen);
执行是会出错,错误原因是不相等。但是我并没有对CanbRegs.CAN_IF1MCTL.bit.DLC进行其他的操作(只在初始时进行赋值为4),怎么会这样,谢谢
Susan Yang:
从您发布的内容很难推断。您能否分享更多详细信息:
1)您能描述一下您的板子/硬件设置吗?例如,哪个设备或DK(第三方/ Tiva / Stellaris DevKit)正在发送CAN数据,而哪个设备正在接收?还请提供您正在使用的CAN端口。
2)若是可以的话,请您上传一下工程代码
user5234251:
回复 Susan Yang:
你好,是由于我对CAN_IF1MCD进行了一个Bit的操作,它必须要16位一起写入,对于IF1和IF2所有寄存器都得这样操作吗?
user5234251:
回复 Susan Yang:
好的,谢谢解答
Susan Yang:
回复 user5234251:
很高兴能帮到您!