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.

[参考译文] TCAN4551-Q1:从寄存器来看、无法判断中断引脚变为低电平的原因。

Guru**** 2468520 points
Other Parts Discussed in Thread: TCAN4550, TCAN4551-Q1

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1467551/tcan4551-q1-from-registers-cannot-tell-what-caused-the-interrupt-pin-to-go-low

器件型号:TCAN4551-Q1
主题中讨论的其他器件:TCAN4550

工具与软件:

大家好、  

在了解当我从 nINT 引脚中断时要检查哪些寄存器时、我需要一些帮助。

我可能缺少一些东西、但下面是背景:

我已成功在另一个板上为该器件编写了驱动程序。 关于这一点、我在阅读和编写 CAN 消息方面没有问题。

在一个新电路板上、只有一点点不同、并且在 TCAN4551区域中预计不会有不同。我的问题是当 CAN 总线上有一个消息时、nINT 引脚变为低电平以中断 MCU、但是当我读取寄存器时、我无法看到 TCAN 接收到消息的证据。 这意味着:

一旦我在 CAN 上从外部传输一条消息、nINT 引脚就会变为低电平(因此肯定会驱动消息 Rx、并始终可重复)。 当 MCU 固件看到此情况时、其读取内容

REG_DEV_IR = 0x000004A0

REG_MCAN_IR = 0x00010008

似乎是设置了 RF0L 消息丢失、但是

REG_MCAN_RXF0S 根本不显示消息、那么我是如何丢失消息的?

我在中看不到任何指示  

REG_MCAN_ECR = 0x00000000

REG_MCAN_PSR = 0x00000708

我无法确定消息的位置、或者如果出现错误、是什么。 (我担心新电路板上可能存在会影响位检测的某种或硬件问题)

我不使用任何滤波器、仅使用 RX0元件。

我应该查看哪些其他寄存器?

在中断函数结束时、我清除中断、引脚再次变为高电平、直到我发送另一条消息。

我认为这可能是来自 dev IR 的东西、但我无法计算出什么。  

关于我要启用的中断、它主要来自演示代码-无论我是否启用 RF0L 中断、它的行为都是一样的:

/*为 MCAN 设置我们要启用的中断*/
TCAN4x5x_MCAN_TCAN_mcan_ie Interrupt_Enable ={0};//记住要初始化为0、否则会得到随机垃圾!
mcan_i.e.RF0NE = 1;// RX FIFO 0新消息中断使能
mcan_i.RF0WE = 1;// RX FIFO 0水线中断使能
mcan_i.RF0FE = 1;// RX FIFO 0完全中断使能
// mcan_i.RF0LE = 1;// RX FIFO 0消息丢失中断使能(如果本身并不意味着需要处理消息)

mcan_i.e.Ewe = 1;//启用错误警告中断
mcan_ie.BOE = 1;//总线关闭中断使能

TCAN4x5x_MCAN_ConfigureInterruptEnable (&mcan_ie);//启用相应的寄存器


/*配置 TCAN4550非 CAN 相关功能*/
TCAN4x5x_DEV_CONFIG devConfig ={0};//记住要初始化为0、否则将获得随机垃圾信息!
devConfig.SWE_DIS = 0;//保持睡眠唤醒错误启用(它是禁用位、而不是启用)
devConfig.device_reset = 0;//不请求软件复位
devConfig.WD_EN = 0;//看门狗已禁用
devConfig.nWKRQ_CONFIG = 0;//镜像 INH 函数(默认值)
devConfig.INH_DIS = 0;// INH 启用(默认值)
devConfig.GPIO1_GPO_CONFIG = TCAN4x5x_DEV_CONFIG_GPO1_MCAN_INT1;// MCAN nINT 1 (默认值)
devConfig.FAIL_SAFE_EN = 0;//失效防护已禁用(默认设置)
devConfig.GPIO1_CONFIG = TCAN4x5x_DEV_CONFIG_GPIO1_CONFIG_GPO;// GPO1输出(默认值)
devConfig.WD_ACTION = TCAN4x5x_DEV_CONFIG_WDT_ACTION_nINT;//看门狗设置中断(默认)
devConfig.WD_BIT_RESET = 0;//不复位看门狗
devConfig.nWKRQ_voltage = 0;//将 nWKRQ 设置为内部电压轨(默认值)
devConfig.GPO2_CONFIG = TCAN4x5x_DEV_CONFIG_GPO2_NO_ACTION;// GPO2没有行为(默认值)
devConfig.CLK_REF = 1;//输入晶体为40 MHz 晶体(默认值)
devConfig.WAKE_CONFIG = TCAN4x5x_DEV_CONFIG_WAKE_BOOST_EDGE;// Wake 引脚可以由任一边沿触发(默认)
TCAN4x5x_TCAN1042 Device_Configure (&devConfig);//使用上述配置来配置器件

会感激地收到任何指针。

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

    尊敬的 Ed:

    这是有趣的,我没有立即回答你。  您能否提供器件中配置的最终寄存器值的列表、以便我可以查看最终配置?  基本上、只要可能、只需将所有器件寄存器读回一个简单的文本日志文件中。

    我知道您说您不使用筛选器、但如果可能、您能告诉我您要发送什么 CAN 消息、以便我在查看寄存器配置时拥有该信息吗?

    您当前的测试设置是否仅为两个节点(受测板和用于发送 CAN 消息的其他一些节点)? 或者 CAN 总线上是否有多个节点?

    您是否能够在示波器上监控 CAN 波形以查看它是否已得到确认或是否具有错误标志等?

    如果您想提供电路板 TCAN4551-Q1部分的原理图、我也可以查看它。

    但对于眼前的问题、nINT 引脚是寄存器0x0820和0x0824的逻辑或(0x0824仅是0x1050的只读副本)。  中断似乎正常工作、但问题仍然在于为什么 RX 消息丢失、我希望额外的寄存器信息有助于回答该问题。

    此致、

    Jonathan

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

    Jonathan、您好!  

    感谢您的快速回复。 这是一个很好的建议、需要读回整个配置。

    我可以发现、出于某些原因、诸如 RXF0C、 RXESC、 TXBC 之类的寄存器已被归零、这就解释了丢失/缺失消息的原因。

    我将不得不调查其原因。 我只写入它们一次、所以我想用某种电源或睡眠事件来清除它们。

    在检查其他寄存器时、我看到此事件已清除了测试读取和写入、并 将暂存区的一半保存在测试和暂存区寄存器中、因此 这种情况看起来 我正在进入睡眠模式、并且丢失了配置。 从阅读数据表、我仍然不确定哪些寄存器在睡眠模式下被清除、或者何时需要重写。

    这可能是因为我没有以正确的方式使用睡眠模式。

    此致、  

    编辑

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

    尊敬的 Ed:

    我很高兴我的建议是有用的,这当然解释了缺失的消息。  

    关于在睡眠模式下保存的位、它们有 粗体字体 暂存区位之外的所有其他功能。  这些位通常与需要在睡眠模式期间保留的硬件引脚配置设置有关。  但大多数器件寄存器(包括所有 MCAN 寄存器)都会在睡眠模式期间复位、并且需要在器件检测到 POR 或睡眠唤醒事件后重新配置。

    此致、

    Jonathan