This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
can通信自环回模式的
CAN_setupMessageObject(CANA_BASE, 1, 0x18102701, CAN_MSG_FRAME_EXT,
CAN_MSG_OBJ_TYPE_TX, 0x0, CAN_MSG_OBJ_NO_FLAGS ,
MSG_DATA_LENGTH);
// Initialize the receive message object used for receiving CAN messages.
// Message Object Parameters:
// Message Object ID Number: 2
// Message Identifier: 0x1234
// Message Frame: Standard
// Message Type: Receive
// Message ID Mask: 0x0
// Message Object Flags: None
// Message Data Length: 2 Bytes
CAN_setupMessageObject(CANA_BASE, 2, 0x18222701, CAN_MSG_FRAME_EXT,
CAN_MSG_OBJ_TYPE_RX, 0x1FF0FFFF, CAN_MSG_OBJ_USE_EXT_FILTER,
MSG_DATA_LENGTH);这个函数写寄存器为什么读和写都是使能IF1N呢?
如此段写出寄存器来编程消息对象
HWREG_BP(base + CAN_O_IF1MSK) = maskReg;
HWREG_BP(base + CAN_O_IF1ARB) = arbReg;
HWREG_BP(base + CAN_O_IF1MCTL) = msgCtrl;
而在读的时候怎么使用的是IF2呢?在初始化阶段都没有对IF2进行初始化,就直接调用了这个是什么情况呢?
CAN_readMessage(uint32_t base, uint32_t objID,
uint16_t *msgData)
{
bool status;
uint16_t msgCtrl = 0U;
ASSERT(CAN_isBaseValid(base));
ASSERT((objID <= 32U) && (objID != 0U));
HWREG_BP(base + CAN_O_IF2CMD) =((uint32_t)CAN_IF2CMD_DATA_A |
(uint32_t)CAN_IF2CMD_DATA_B |(uint32_t)CAN_IF2CMD_CONTROL |
(objID & CAN_IF2CMD_MSG_NUM_M) |(uint32_t)CAN_IF2CMD_ARB);
//
补充一下问题:初始话CAN_setupMessageObject这个函数的时候,为什么发送和接收都是初始化IF1的寄存器,而到后面接收的时候又调用的IF2寄存器呢?IF2寄存器没有初始化怎么就调用了?这个没问题么?
IFx寄存器用于初始化消息对象,不初始化IFx寄存器。CAN_read函数中指出的第8、9、10行正在写入IF2CMD寄存器,在某种意义上这就是“初始化”寄存器。
另外可以看一下这个DCAN使用说明文档:www.ti.com/.../sprace5a.pdf