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.

[参考译文] TMS570LC4357:以不同的赫兹频率运行

Guru**** 2693225 points

Other Parts Discussed in Thread: TMS570LC4357, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1596126/tms570lc4357-running-with-different-hertz

器件型号: TMS570LC4357
主题中讨论的其他器件: HALCOGEN

您好、

在开发的系统中、我想以不同的赫兹值运行。 例如、第一种情况必须通过 CAN 总线传输 50 赫兹的数据、第二种情况必须通过 CAN 总线线路传输 100 赫兹的数据、第三种情况必须通过 CAN 总线线路接收 50 赫兹的数据。 我该如何处理这种情况?

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

    尊敬的 Dobby:

    我以前从未遇到过这种要求。 因此、该主题没有任何直接的示例。

    所以、我之所以要求使用内部 TI AI 工具、是因为该工具专门用于分析我们与该控制器相关的所有旧 e2e 主题以及与该控制器相关的所有文档。 在馈送您的要求到这个工具后,我得到了一些建议。 请参阅以下内容、可能会有所帮助。

    配置 RTI 计时器以用于周期性中断

    RTI 模块可以以各种速率生成周期性中断。 您需要:

    • 配置 RTI 计数器、以生成基频中断(例如,100 Hz 以获得最快速率)
    • 使用 RTI 比较寄存器来设置周期性中断时序
    • RTI 模块符合 OSEK 标准、专为实时操作系统 (0) 而设计

    2.在 RTI ISR 中实施任务调度程序

    在 RTI 中断服务例程中、实施简单的任务调度器:

    volatile uint32_t tick_counter = 0;
    
    void rtiNotification(uint32 notification)
    {
        tick_counter++;
        
        // Case 1: Transmit at 100 Hz (every tick if RTI is at 100 Hz)
        if (tick_counter % 1 == 0) {
            TransmitCANMessage_100Hz();
        }
        
        // Case 2: Transmit at 50 Hz (every 2 ticks if RTI is at 100 Hz)
        if (tick_counter % 2 == 0) {
            TransmitCANMessage_50Hz();
        }
        
        // Case 3: Receive handling can be done in CAN ISR
        // or polled here if needed
    }

    3.配置 CAN 消息对象

    对于每种变速器情况:

    • 情形 1(50Hz 传输) :配置 CAN 消息对象进行传输,从 50 Hz 任务触发它
    • 情形 2(100Hz 传输) :配置另一个 CAN 消息对象进行传输,从 100 Hz 任务触发它
    • 案例 3(50 Hz 接收) :使用适当的消息 ID 过滤、为接收配置 CAN 消息对象

    4. RTI 计时器配置示例

    RTI 模块提供多个比较中断(通常为 4 个比较通道)(0)。 您可以为不同的速率配置不同的比较值:

    // Example: Configure RTI for 100 Hz base rate
    // Assuming RTICLK = 80 MHz and you want 100 Hz
    // Period = 80,000,000 / 100 = 800,000 cycles
    
    rtiInit();
    rtiEnableNotification(rtiNOTIFICATION_COMPARE0);
    rtiStartCounter(rtiCOUNTER_BLOCK0);

    另一种方法:CPU 计时器

    如果您愿意、也可以使用 CPU 计时器 以进行定期调度。 搜索结果显示了使用计时器 0 进行周期性 CAN 消息传输的示例:

    //为周期性中断配置 CPU 计时器
    //计时器中断将触发 CAN 传输

    重要注意事项:

    1. CAN 比特率与消息速率 :请注意,您所指的“赫兹“是 消息传输速率 (您发送消息的频率)、而不是 CAN 总线比特率(例如 500 kbps、1 Mbps)。 CAN 比特率在 DCAN 模块中单独配置。

    2. 消息优先级 :DCAN 模块根据优先级发送消息(以数字最低的消息对象优先)。 相应地计划您的消息 ID。

    3. 计时精度 : RTI 模块为 RTOS 应用提供精确的计时,是周期性 CAN 传输调度的理想选择。

    4. 接收 :要以特定速率接收消息、您可以:

      • 使用 CAN 中断(建议用于事件驱动的接收)
      • 轮询定期任务中的接收消息对象

    实现流程示例:

    1. Initialize DCAN module (configure bit rate, message objects)
    2. Initialize RTI module (configure for 100 Hz or your base rate)
    3. In RTI ISR:
       - Increment tick counter
       - Check if it's time to transmit each message
       - Trigger CAN transmission by setting TxRqst bit
    4. For reception:
       - Configure CAN receive interrupt
       - Handle received messages in CAN ISR

    资源:

    • 有关 RTI 模块的详细信息、请参阅 TMS570LC4357 技术参考手册第 16 章
    • 有关 RTI 和 DCAN 配置的代码生成示例、请查看 HALCoGen
    • RTI 模块支持多种定期警报、这些警报可针对不同的速率进行配置

    --
    此致、
    Jagadish。

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

    感谢 Jagadish 的答复。  

    我会尝试这些建议。