各位大侠,小弟使用TM4C129X开发板初学CAN,目前遇到一个CAN0数据提取和合成的问题
ExpectID = CAN0RxMessage.ui32MsgID;
For (i=0; i <CAN0RxMessage.ui32MsgLen; i++)
{
Data[i] = CAN0RxMessage.pui8MsgMsgData
}
ExpectID是32位,Data一般为8个字节,如何把ExpectID和Data连接在一起构成一个Frame呢?
此外,请教TM4C129X的CAN模块的 正常发送和接收模式的模式写法?是直接向下面这样写寄存器为TEST模式吗,LOOPBACK模式我作为发送写法是不是合适呢,接收写法请教各位大神。
HWREG(CAN0_BASE + CAN_O_CTL) = HWREG(CAN0_BASE + CAN_O_CTL) | CAN_CTL_TEST;
HWREG(CAN0_BASE + CAN_O_TST) = HWREG(CAN0_BASE + CAN_O_TST) | CAN_TST_LBACK;
xyz549040622:
1.如何把ExpectID和Data连接在一起构成一个Frame呢
采用正常的移位就可以了,你需要把4个8位变成32位呢,还是想把32位分解为8位呢
2.寄存器的没细看。你可以直接操作库的。配置参数就好了。
HG:
建议你直接使用ccs中提供的demo示例。
Engineer:
回复 xyz549040622:
分解为8位,正常配置是怎么配置,找不到相关资料啊
xyz549040622:
回复 Engineer:
u32的数据直接移位就能得到每个8位数据了,右移8位,16位,24位,然后分别取低8位就好了。关于CAN的例程,应该是去掉回环模式,直接在接收和发送口抓数据就好了。
Engineer:
回复 xyz549040622:
您的意思是只保留TEST这一句话吗?
HWREG(CAN0_BASE + CAN_O_CTL) = HWREG(CAN0_BASE + CAN_O_CTL) | CAN_CTL_TEST;
我做过实验,只保留这一句的确可以。但是我看寄存器还有一个Basic和Slient模式,这两种模式是干什么的呢,我们必须把寄存器打到TEST模式才能完成发送和接收吗?