主题中讨论的其他器件: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);//使用上述配置来配置器件
会感激地收到任何指针。



