你好
我通过 有线连接将 TCAN4550EVM 连接到我的板。
我正在尝试使用 Linux 驱动程序代码制作固件(从最新版本开始.. 5.12.xxx)。
我的板不使用 Linux、但我找不到其他驱动程序源代码、
我使电路板的驱动程序是指 Linux 源代码。
我想手动控制 CAN 总线启动/停止。
当处于停止状态时、我希望 CAN 总线忽略所有信号。 (不要做出反应或重新侦察)
希望 CAN 总线从新的通信数据包接收器启动信号开始。
我制作了我的固件源、如 Linux 代码流- m_CAN_start()/ m_CAN_stop()
static void m_can_start(struct net_device *dev)
{
struct m_can_classdev *cdev = netdev_priv(dev);
/* basic m_can configuration */
m_can_chip_config(dev);
cdev->can.state = CAN_STATE_ERROR_ACTIVE;
m_can_enable_all_interrupts(cdev);
}
static void m_can_stop(struct net_device *dev)
{
struct m_can_classdev *cdev = netdev_priv(dev);
/* disable interrupts */
m_can_write(cdev, M_CAN_IR, IR_ALL_INT);
m_can_write(cdev, M_CAN_IE, 0);
/* disable all interrupts */
m_can_disable_all_interrupts(cdev);
/* Set init mode to disengage from the network */
m_can_config_endisable(cdev, true);
/* set the state as STOPPED */
cdev->can.state = CAN_STATE_STOPPED;
}
启动时间 TCAN 寄存器控制、如 m_CAN_start()函数代码。
和停止时间设置、如 m_CAN_STOP()
根据 Linux 代码、TCAN 设置为始终正常模式。 我设置相同。
但是、当 TCAN 保持停止状态时、如果 CAN 总线中有数据包通信、
TCAN (我认为 M_CAN 可能)存储该数据包。
在提供一个 START 信号之后、TCAN 通过早期接收的数据包生成 RX 中断。
但我希望从新数据包开始。
然后、我尝试在停止状态下更改待机模式。
对于待机模式、我将寄存器 h0800设置为 0x08000642
在待机状态下、我检查 了0x1018 (CCCR)、它是0x19 (时钟关闭)
但是、即使处于待机模式、如果 CAN 总线在停止状态(待机模式)下通信数据包
TCAN 在启动时仍会产生 RX 中断。
问题1. 根据数据表的表1模式概述、CAN TX/RX 在待机模式下处于关闭状态。
但是、我认为它仍然有效、因为 TCAN 在启动时通过早期的数据包生成中断。
当数据包恢复为标准状态时、为什么 TCAN (M_CAN)会生成中断?
问题2. 我希望在停止状态时忽略所有信号。 我该怎么做?
谢谢你