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.

[参考译文] TMS320F280049:可以禁用 TxIE

Guru**** 2611705 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/692509/tms320f280049-can-disable-txie

器件型号:TMS320F280049

我只想使用一个 CAN 模块、只想使用 CANA 模块、而不是 A 模块和 B 模块。但每次 CAN 模块传输时、都会为中断提供服务。 即使我不启用 TX 中断(CAN_MSG_OBJ_TX_INT_ENABLE)、也会执行此操作。 如下所示、我没有设置 Tx 和启用 Rx 中断的标志。 这些都直接来自 CAN_ex3_forthe_transmit 示例、只是我已将它们更改为两者都是 CANA。 原来的 Rx 是 CANB。 我采用了该示例代码、并将 CANB 更改为 CANA。 除了每次发送中断时都会为中断提供服务、我不想这样做。 我不想为 CAN 使用4个引脚(8、10、32和33)。 因此、我只想使用一个模块、但只允许 Rx 触发中断。

CAN_setupMessageObject (CANA_base、TX_MSG_OBJ_ID、0x955555、CAN_MSG_FRAME_EXT、CAN_MSG_OBJ_TYPE_TX、0、 CAN_MSG_OBJ_NO_FLAGS、MSG_DATA_LENGTH);

CAN_setupMessageObject (CANA_base、RX_MSG_obj_ID、0x955555、CAN_MSG_FRAME_EXT、CAN_MSG_OBJ_TYPE_RX、0、CAN_MSG_OBJ_RX_INT_ENABLE、 MSG_DATA_LENGTH);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ian:

    CAN_ex3_external 传输示例要求 CAN A 和 CAN B 通过收发器连接到 CAN 总线。  CAN A 将传输数据、而 CAN B 将是接收节点。  根据您所说的内容、您用 CAN A 替换了 CAN B 的所有实例、我的解释是、您的目的是仅使用 CAN A 向 CAN 总线发送和接收数据、或者我可能缺少其他东西。  您能否清楚说明您要做的事情?  一旦对其进行了澄清、我们就可以尝试找出您的 CAN 中断问题。

    谢谢、此致、

    Joseph

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Joseph、

    是的、这是我的意图、使用一个模块来接收和发送数据。 我以前使用 Example_2803xECanBack2Back 对 F2803x 进行过此操作。 此示例使用一个模块"ECANA"进行接收和发送。 我们的公司使用 F2803x 设计了 PCB、并在更新后更新为 F280049。 我知道 ECAN 和 DCAN 有很大不同。 但是、F28004x 数据表使中断看起来好像可以由接收和发送单独控制。 下面是三个让我相信的剪报。

    27.6.1)报文对象中断由报文对象的事件生成。 它们由标志 IntPND、TxIE RxIE 控制

    27.11.1) 如果 TxIE 位被置位、IntPnd 位将在成功发送报文对象后被置位。

    27.11.3)如果 RxIE 位被置位、当接收到的数据帧被接受并被存储在报文对象中时、IntPnd 位将被置位。

    通过不设置 TxIE、我相信在发送时不会触发中断。

    我们只想使用2个引脚和1个 CAN 模块、就像使用之前的微控制器一样。 如果我们必须使用两个 CAN 模块、这将需要我们具有两个 CAN 收发器、这是不可选的。 我们仅使用 CAN A。CAN A 的一切工作正常、唯一的问题是中断在发送时触发。 这不是灾难性的、只是不需要的。

    感谢您的帮助、

    Ian

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Joseph、

    我已经解决了这个问题。 我没有很好地读取一行代码。 在示例代码中、每次状态变化都会触发中断。

    //! 此标志用于允许 CAN 控制器生成状态

    //! 中断。

    #define CAN_INT_STATUS       (0x00000004UL)

    CAN_enableInterrupt (CANA_base、CAN_INT_IE0 | CAN_INT_ERROR | CAN_INT_STATUS);

    我所要做的就是将突出显示的文本注释掉。 这会在每次可以发送和接收时启用中断。

    感谢您的帮助、

    Ian