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.

[参考译文] CC2642R:CC2642 UART2 发送中断域并检测中断事件

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1630287/cc2642r-cc2642-uart2-send-break-field-and-detect-break-event

器件型号: CC2642R

您好、

我们目前正在 CC2642 上使用 UART2 来模拟 LIN 总线。 在此过程中、我们需要检测和传输中断域。 但是、SDK 中的 UART2 驱动程序似乎默认不支持中断检测和生成。

我们尝试了以下方法:

  • 使 UART 初始化、降低波特率并重新初始化、然后发送0x00以模拟中断域、并最终恢复波特率(结果显示中断域和同步域之间出现过多延迟);
  • 持续强制 UART TX 引脚为低电平(如果没有计时器,则很难精确控制中断持续时间;使用计时器会引入额外的 CPU 负载并影响其他任务的执行);

这些方法没有取得令人满意的结果。 是否有更好的方法来实现此功能?

期待您的答复。

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

    尊敬的 runfa:

    您可以搜索 类似的 E2E 主题 以了解其他方法、我们 之前就已经对可行性进行了讨论。  鉴于使用 UART 仿真 LIN 的局限性、软件实现的位拆分解决方案可能会产生更好的结果。  我知道 软件驱动的 UART 解决方案 、您可以在线进一步探索其他示例。  

    您的第二种方法似乎是最合乎逻辑的方法、我倾向于认为、您可以找到一种利用 ClockP 或具有中断功能的 GPT 来准确测量持续时间的方法、而无需加载超出合理性的 CPU。  你能否提供进一步证据说明为什么情况并非如此?

    此致、
    Ryan

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

    您好、Ryan、

    感谢您的答复。

    关于使用硬件计时器仿真中断域的第二种方法、我可以想到的方法是将 UART TX 引脚拉至低电平、然后使用 while 循环(以阻塞方式)等待、直到计时器节拍达到特定值、从而实现微秒级延迟。 然而、这种阻塞等待会持续占用 CPU 时间片并影响其他任务的执行。

    由于 LIN 主节点会持续轮询 LIN 调度表并且大约每 20ms 发送一次中断事件、因此我认为在这种情况下使用阻塞等待会显著影响其他任务(例如蓝牙模块)的运行。

    此致。

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

    您不应进行阻塞、如果不接受使用 unistd.h 的 usleep 计时、则应 将 ClockP 与 信标一起使用。  它看起来是这样的

    1. 将 UART TX 引脚拉至低电平
    2. 启动单次触发 ClockP 计时器
    3. 挂起在信标上
    4. ClockP 中断会触发并发布信标
    5. UART TX 引脚恢复为高电平、LIN 继续

    位拆裂选项需要遵循类似的时序方法来减少任务的 CPU 负载并允许蓝牙按预期运行

    此致、
    Ryan