主题中讨论的其他器件: C2000WARE
您好!
使用 LAUNCHXL-F280039C LaunchPad、 我将运行 C2000ware4.03 /英语/ 器件/ F28003x / F280039C / 示例/ CAN 中提供的 CAN 通信代码示例"CAN_Ex5_Transmit_RECEIVE"
从 can_ex5_transmit_receive.c 中的文档注释可以看出下面的要求
//! \b Hardware \b Required \n //! - A C2000 board with CAN transceiver. //! //! \b External \b Connections \n //! - ControlCARD CANA is on DEVICE_GPIO_PIN_CANTXA (CANTXA) //! - and DEVICE_GPIO_PIN_CANRXA (CANRXA)
F280039C LaunchPad 具有板载 CAN 收发器、支持使用手册、因此我假设它已经满足硬件要求。 我没有找到 DEVICE_GPIO_PIN_CANTXA、大概是因为它没有板载 CAN 收发器。 我按连接 launchpad 的方式
BeagleBone GREEN == CAN 收发器(这 BBG 需要)==(总线线)== F280039C CAN 引脚(Hi/Lo/GND ) ,正如我在另一篇文章 https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1201564/launchxl-f280039c-question-about-the-f28003x-launchpad-can-pins-connection-gnd-pin 中提到的 ,所以想法是将 F280039C 作为 CAN 发送器,将 BBG 作为接收器 CAN 节点。
现在、 CAN_Ex5_Transmit_Receive.c 将被构建(CPU1_launchxl_flash)并加载到 F280039C 中、并且 BBG 已在正确的引脚(GPIO 24、26)上配置了其 CAN1通道、CAN 收发器/连接所有引脚。 在调试模式下运行代码、未看到预期输出(从 CAN_Ex5_Transmit_receive.c 代码来看、 F280039C 应发送一个 CAN 帧、该帧可以在 BBG 侧转储、但不显示任何内容)。
通过逐步调试、我会遇到这样的情况
在这一行(在 canaISR()函数中)之后:
// // Read the controller status. This will return a field of status // error bits that can indicate various errors. Error processing // is not done in this example for simplicity. Refer to the // API documentation for details about the error status bits. // The act of reading this status will clear the interrupt. // status = CAN_getStatus(CANA_BASE);
根据观察窗口, status (从 can_getStatus(Cana_base )返回)变量的值为229。
根据 can.h、STATUS 应该是 CAN 错误和状态寄存器 CAN_ES 的读取值、 从 hw_can.h 中、CAN_ES 的位为
//************************************************************************************************* // // The following are defines for the bit fields in the CAN_ES register // //************************************************************************************************* #define CAN_ES_LEC_S 0U #define CAN_ES_LEC_M 0x7U // Last Error Code 0000000000000111 #define CAN_ES_TXOK 0x8U // Transmission status 0000000000001000 #define CAN_ES_RXOK 0x10U // Reception status 0000000000010000 #define CAN_ES_EPASS 0x20U // Error Passive State 0000000000100000 #define CAN_ES_EWARN 0x40U // Warning State 0000000001000000 #define CAN_ES_BOFF 0x80U // Bus-Off State 0000000010000000 #define CAN_ES_PER 0x100U // Parity Error Detected 0000000100000000 0000000011100101 229
为了便于阅读、我只编辑二进制值、而不是从原始文件中进行编辑。 我的问题是
1) 1)为什么状态可以是229? 似乎它不是一个或多个错误位的组合
2)更重要的是,如何完成状态229即0000000011100101?
感谢您的答复。
此致、
Wei