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.

[参考译文] TM4C129XNCZAD:CANTST Tx:01采样模式

Guru**** 2412100 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/935163/tm4c129xnczad-cantst-tx-01-sample-mode

器件型号:TM4C129XNCZAD

我的器件在长电缆(30m)上显示 ACK 错误、并且在 CANnTX 到 CANnRX 之间具有大约600ns 的总往返延迟。  在每1Mbps 传输15个份额的情况下、采样点能否设置得远远超过此值、但我看到间歇性运行(有时600ns 将失败、而640ns 将通过)。  

Tiva 120 MHz

时钟/位=        15

预分频=          8

TSEG1                 13.              

TSEG2 1.                   

SJW 1.                       

我想在"采样点"模式(CANTST Tx:01)下验证位时序、但在启用该模式后:  

初始化 CAN

启用 CAN

将 CANCTL 寄存器的 TST 位置位

对于采样点、将 CANTST:Tx 设定为"01"

我仍然只能在 Tx 引脚上看到典型的 CAN 数据(接收到 CAN 消息后的 ACK、发送消息时的正常位流)。  我希望在采样点看到每位时间的边沿、但我看不到。  是否有更多有关"采样点"测试的文档?  或示例代码?  我是否需要禁用一些其他 CAN 操作、以使"采样点"测试模式接管工作?  

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

    您是如何将 CAN 模块置于采样点模式的? 这里是我在不同项目中使用的寄存器写入。

    //将 CAN 模块置于采样点模式
    HWREG (CAN0_BASE + CAN_O_CTL)|= 0x80u;//启用测试
    HWREG (CAN0_BASE + CAN_O_TST)= 0x20u;//启用采样点
    

    这是逻辑分析仪快照。 在这个项目中、波特率为125K 并且采样点被居中。 此外、节点 B 的 TX 引脚与收发器断开连接、以避免在 CAN 总线上造成错误。

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

    哎呀、错误的按钮、这还没有解决。  

    这是我所期望的、只是我很惊讶采样点显示为脉冲而不是边沿。  您能否放大以查看样本点脉冲的宽度?  我的采样速度可能太慢、无法进行捕获。  

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

    这不是。  我现在以500MSPS 的速率进行采样、但看不到任何结果、因此这甚至应该捕获120MHz 的系统时钟脉冲。  

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

    采样点信号是等于系统时钟周期的正脉冲。 在您的情况下(120MHz)、它为8.3nS。  

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

    谢谢。  我仍然只看到 Tx 引脚上的典型 CAN 流量。  下面是我的完整初始化序列:  

    void InitializeCAN (uint8_t CANHardwareNumber、

                       uint32_t CANBase、

                       uint32_t CANBitRate、

                       uint32_t ReceiveFilter1、

                       uint32_t ReceiveFilter2、

                       uint32_t ReceiveFilter3、

                       uint32_t IDMask、

                       uint32_t SourceClock)

       uint16_t ui16CANCTL;

     

       CANInit( CANBase );

       //对于120MHz 时钟

       tCANBitClkParms CANBitClkSettings ={13、1、8};

     

       CANBitTimingSet (CANBase、CANBitClkSettings);

    #endif

     

       {

           CANEnable( CANBase );

     

           //将控制寄存器中的 Test 位置位,该位写使能测试寄存器。

           ui16CANCTL = HWREG (CANBase + CAN_O_CTL);

           HWREG (CANBase + CAN_O_CTL)= ui16CANCTL | CAN_CTL_TEST

     

           //启用采样点测试

           HWREG (CANBase + CAN_O_TST)= CAN_TST_TX_SAMPLE

     

           CANIntEnable (CANBase、CAN_INT_MASTER | CAN_INT_ERROR);

     

           /*配置接收消息 FIFO。          *

           CANReceiveFIFO (CANHardwareNumber、ReceiveFilter1、ReceiveFilter2、ReceiveFilter3、IDMask);

     

           if (CANHardwareNumber == CAN0_BUS)

           {

               IntEnable( INT_CAN0 );

           }

           否则 if (CANHardwareNumber == CAN1_BUS)

           {

               IntEnable( INT_CAN1 );

           }

           CANControl[CAN0_BUS].StatusControl = 0;

           CANControl[CAN1_BUS].StatusControl = 0;

       }

       CANSendingMonitorValues = 0;

       MonitorValuesRequestedBy=0;

     

       CANLargePayloadLastSerialNumber = 0;

     

       MessageBackupToCANHardwareCounter[CAN0_BUS]= 0;

       MessageBackupToCANHardwareCounter[CAN1_BUS]= 0;

    是否可能有任何其他设置正在禁用测试模式?  

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

    这两条线路的用途是什么? 这些是否映射回硬件 CAN 控制寄存器? 您能否在运行初始化代码后提供相关 CAN 寄存器的屏幕截图?

    CANControl[CAN0_BUS].StatusControl = 0;
    
    CANControl[CAN1_BUS].StatusControl = 0;
    
    

    (下次要在线程中插入代码片段时、请使用 符号。 它将保留代码格式。)

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

    感谢 Bob 提供有关代码片段的提示。  这将在下周进行更深入的挖掘。