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_ex2_loopback_interrupts"在非测试模式下工作。
我引用了 sprace5a、但我仍然不知道自己做错了什么。
我有2个物理 CAN 节点、它们通过 T 连接连接连接到 LaunchPad 的 J14 H/L 引脚。 我将可以布线 S4切换到"XCVR"。
我更新了示例项目以使用默认的 CAN GPIO 引脚32/33:
#define DEVICE_GPIO_PIN_CANTXA 32U // GPIO number for CANTXA #define DEVICE_GPIO_PIN_CANRXA 33U // GPIO number for CANRXA #define DEVICE_GPIO_CFG_CANTXA GPIO_32_CANA_TX // "pinConfig" for CANA TX #define DEVICE_GPIO_CFG_CANRXA GPIO_33_CANA_RX // "pinConfig" for CANA RX
我注释掉了 can_enableTestMode ()调用。
我将所有时钟设置保持原样、使用默认值。
我可以通过轮询方式发送/接收 CAN 消息。 但 CAN 中断只会以状态= CAN_INT_INT0ID_STATUS 和 TX_MSG_OBJ_ID 触发、而不会以 RX_MSG_OBJ_ID 触发。
谢谢!
Diane
当我尝试在接收模式下运行"CAN_Ex5_Transmit_receive"时、我会看到类似的行为。
我使用外部第三方工具(ESD CANreal)生成 CAN 流量。
ISR 仅会以 STATUS = CAN_INT_INT0ID_STATUS 触发。
在 ISR 内部、我可以看到 CAN_ES 寄存器指示一个 RxOk:
您好!
看起来您的两次测试都已收到 CAN 帧、即您可以监控 ISR 中的"status"变量。 您能否在主机上将消息 ID 匹配到0x1并查看是否可以接收该帧?
此致、
约瑟夫
作者:Joseph、
似乎我遇到了2个不同的问题。 在"can_ex5_transmit_receive"和"can_ex2_loopback_interrupts"中、我忘记添加 RX msg 掩码:
CAN_setupMessageObject(CANA_BASE, RX_MSG_OBJ_ID, 0x15555555, CAN_MSG_FRAME_EXT, CAN_MSG_OBJ_TYPE_RX, 0xFFFFFFFF, CAN_MSG_OBJ_RX_INT_ENABLE | CAN_MSG_OBJ_USE_ID_FILTER, MSG_DATA_LENGTH);
但在我的实际应用(太长而无法连接)中、我像这样设置 RX_INT_ENABLE 标志、这似乎不起作用:
// // Enable receive interrupts if they should be enabled. // msgCtrl |= (flags & CAN_MSG_OBJ_RX_INT_ENABLE); // // Set the Control, Arb, and Mask bit so that they get transferred to the // Message object. // cmdMaskReg |= CAN_IF1CMD_ARB; cmdMaskReg |= CAN_IF1CMD_CONTROL; cmdMaskReg |= CAN_IF1CMD_MASK; cmdMaskReg |= CAN_IF1CMD_DIR; // // Write out the registers to program the message object. // HWREG_BP(base + CAN_O_IF1MSK) = maskReg; HWREG_BP(base + CAN_O_IF1ARB) = arbReg; HWREG_BP(base + CAN_O_IF1MCTL) = msgCtrl; // // Transfer data to message object RAM // HWREG_BP(base + CAN_O_IF1CMD) = cmdMaskReg | (objID & CAN_IF1CMD_MSG_NUM_M);
相反,通过 can_setupMessageObject()设置它的作用是:
// Setup mbox 2 for RX CAN_setupMessageObject(CANA_BASE, 2, 0x80, CAN_MSG_FRAME_STD, CAN_MSG_OBJ_TYPE_RX, 0x1FFC0000, // msg id mask to accept all msg ids CAN_MSG_OBJ_RX_INT_ENABLE | CAN_MSG_OBJ_USE_ID_FILTER, // enable RX msg mask 8);
现在中断按预期触发。
谢谢!
Diane