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.

[参考译文] CC2652RSIP:如何处理中断和 OSAL (gp 接收器)?

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1395198/cc2652rsip-how-to-work-with-interrupts-and-osal-gp-sink

器件型号:CC2652RSIP
Thread 中讨论的其他器件:Z-stack

工具与软件:

早上好、

在过去几个月中、我使用 zc_thermoster_sink (SDK 4.40)定制 版本从绿色电源传感器接收温度数据。

但是、该设备除了用于接收射频数据之外还用于执行其他任务。

最耗时的是从3个 ADC 通道@4kHz 进行采集。
设计如下:

  1. 由与计时器相关的 HWI 触发的 ISR 启动通道0的 ADC 转换;
  2. EOC ISR 会复制该值并触发通道1的转换。
  3. EOC ISR 会复制该值并触发通道2的转换。

使用上一版本(射频协议 IEEE 802.15.4和 SDK 3.40)时、所有操作均以低抖动完成。

实际上、有时计时器会在第3个通道的采集完成之前触发一个新的 HWI。
通过在 RAM 中插入一些可写入循环缓冲器的跟踪指令来分析这个问题、我已经看到 OSAL 禁用所有中断、从而将定时器 ISR/EOC ISR 的执行延迟几个 CPU 周期(即使是3700、即@Δ-Σ 48MHz 约为77µs。)。

如何解决这种情况?

非常感谢、

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

    您好!

    感谢您的详细信息和分析。

    问题发生的频率如何?

    因此、如果我正确理解:

    a)在每个步骤1、2和3之间、器件未处于中断状态。
    b)然后、允许线程运行(例如 Z-Stack 线程)。
    C)但在某些情况下、在3触发之前中断被禁用、从而导致转换延迟
    d) C)中的延迟会泄放到计时器 ISR 中、从而触发步骤1?

    如果是这种情况、那么我认为你可以跟踪一个状态变量、阶跃为活动状态(1、2或3)、如果触发了计时器、那么 ISR 可以检查状态。 如果状态为2 (意味着第2步已完成、第3步尚未发生)、则计时器 ISR 可以将下一次超时安排在~77usec。 然后在步骤3完成后、EOC ISR 可以停止计时器并以原始超时值再次启动计时器。

    OSAL 可能会在临界区(CS)内以原子方式更新某些变量、这会涉及禁用中断。 这种复杂性由额外的 Zigbee 组件(例如网络层)驱动、该组件不适用于直接802.15.4示例(例如 ti154stack 传感器或收集器)。

    谢谢!
    Toby

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

    Toby 的早上好!  

    感谢您的答复。

    频率根据传感器数量而变化、我们希望支持12个传感器、在这种情况下、始终会发生。

    在 OSAL CS 中、我们重新启用两个中断、现在某些时候会发生。

    我会与 设计 ADC 解决方案的架构师讨论您的建议、我会回来与您讨论。

    再次感谢。

    Cristiane Bellenzier Piaia

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

    您好!

    改变设计以在第二个点后启动计时器可能意味着、可能会失去转换。 77usec 是很长的时间。

    我们试图了解除了 OSAL 之外还有谁来禁用中断、为此、我们想要计算中断的延迟、但我无法输入 Hwi_disable 代码、当我尝试包含一个断点时、我会收到以下消息:

    我不能偏离第136行。

    因为它是在 ROM 上执行的。  

    所有优化都被禁用。

     

    如何调试此代码?

    提前感谢、

    Cristiane Bellenzier Piaia

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

    Hwi_disable 仅禁用中断。 我认为不需要调试该特定的功能。

    在调用栈中、您可以看到最终导致调用 HwiP_disable 的函数。

    例如、在第一个屏幕截图中、它是 UARTCC26XX_READ。

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

    您好、Toby、感谢您的答复。

    只是为了对您进行更新、我 可以在禁用 cfg 文件中的 ROM 时进行调试。

    最后、 HwiP_disable 调用 Hwi_disable 。

    今天 我将计算谁会长时间禁用中断、然后我再与您联系。

    再次感谢您的帮助。

    Cristiane Bellenzier Piaia

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

    尊敬的 Toby:

    如何重新构建 rf_modal_cc26x2.aem4f? 我曾尝试重建驱动程序文件夹(使用 gmake.exe)、但 未重建这些二进制文件。

    再次感谢。

    Cristiane Bellenzier Piaia

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

    托比是一个当之无愧的假期,直到9/9,所以我可以尝试协助,直到他返回。   版本 SDK 未提供必要的资源来像与其他外设 TI 驱动程序一样重建射频驱动程序。

    此致、
    Ryan

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

    您好!

    感谢您的回答。 据您所知、我能够 通过创建新项目来生成静态库并在将其包含到我的项目中、从而重新生成 RF_MODELE 库。

    我对 Hwi.c 文件做了一点改动以了解 ISR 被禁用多长时间、此信息 对我很重要、因为正如我在本线程中之前所说的、我需要在 ISR 执行的250微秒(@4kHz)内执行3次 ADC 转换。

    我可以看到 Mac 函数在很长一段时间内禁用了 ISR。 例如:   

    位置 增量时间(当前时间-开始时间)  
    macTxStartQueuedFrame 3857 /  48MHz = 80微秒
    macSymbolTimerCount 10085.
    macPwrVote 2424.
    macSendReceiveCmdIeee 7197  
    macRadioTxGo 6819.
    macSymbolTimerEventHandler 3864
    macRxFrameIsr 3802.
    macRxOn 通常1500、但有时更多
    macRadioUpdateTxPower 3780

    增量时间的计算公式如下:当前时间从 HWI 复位获得、开始时间从 HWI 停用获得。

    很遗憾、无法承受在 禁用 ISR 的情况下一直保持这种情况。

    ISR (GTimer 和 HWI)都是优先级1。

    提前感谢您、

    Cristiane Bellenzier Piaia

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

    无线电将优先确保 Zigbee 连接的稳定性并维持网络协议。  您是否考虑过使用传感器控制器记录 ADC 值并将其存储在缓冲器中?  这样、SCS CPU 上的 ADC 测量会被主 CPU 对无线电内核的处理所打断、并且主 CPU 是否可以在它从无线电中解放出来后读取满缓冲区?  在不使用无线电的时间段内、可以立即读取缓冲区。  请参阅 Sensor Controller Studio 文档其他相关文档。

    此致、
    Ryan

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

    早上好、Ryan、

    感谢您的回复和您的建议。

    不幸的是、我无法使用传感器控制器来执行 此   操作、因为该控制器具有另一个任务、它的作用是控制电源出现故障的时间。

    谢谢!

    Cristiane Bellenzier Piaia

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

    您是否无法使用传感器控制器完成这两项任务?  ADC 日志记录有望占用不到可用 RAM 的50%。  如果您还不熟悉以下应用报告:

    https://www.ti.com/lit/swra586 
    https://www.ti.com/lit/swra585 

    或者、电源故障代码能否移至主 IC、因为此 事件不会像 ADC 测量那样频繁发生?

    此致、
    Ryan

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

    您好!

    由于无线电功能会禁用所有导致 ADC 任务故障的中断、并且如果我理解正确、则不可能对该代码进行任何更改、因此唯一的选择是使用传感器控制器来执行该任务。

    在我们开始花一些精力进行这一重大变化之前、我们想了解传感器控制器是否可以在正确的时间范围内执行3个通道的转换(我们需要按顺序在4kHz 范围内转换3个通道)。 我们对于传感器控制器的经验很少、所以我们想了解一下传感器控制器是否可以只执行转换或一些其他对样本的处理。

    谢谢!

    Cristiane Bellenzier Piaia

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

    可通过浏览   提供的文档和默认 ADC 示例来找到有关 Sensor Controller Studio 的详细信息。  每250微秒对3个 ADC 通道进行采样/转换应该不会出现问题、前提是基本处理需要留出时间、然后才会传输至主 CPU。  如果您在实现此设计时遇到任何困难、请告知我们。

    此致、
    Ryan

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

    尊敬的 Cristiane:

    频率根据传感器数量变化、我们希望支持12个传感器、在这种情况下始终会发生。

    请提供复制此问题所需的条件。  是否可以使用一个 已加速默认报告速率的 zc_thermoster_sink 和 GPD_temperaturesensor 实现?  GPD 是否是必需的、或者随着轮询速率的增加、zz/zr_temperaturesensor 项目是否也可能发生 GPD?  目标是使用默认的 TI 示例以及尽可能少的代码更改和器件来复制此行为。  您的 ADC 采样持续时间是多长、您是否能够检测 ADC 故障从而重新采样以恢复?

    此致、
    Ryan

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

    您好、Ryan、

    您可以使用  zc_thermoster_sink 和 gpd_temperaturesensor 重现这种情况 。  您将看到的第一种情况是 OsalPort_enterCS 和 OsalPort_leaveCS 之间花费了大量时间 。

    我的 ADC 采样频率持续时间为4kHz (250ms)。

    我能够使用信号量来检测 ADC 故障、仅在读取先例转换时才允许触发向不同通道进行新的转换。

    谢谢!

    Cristiane Bellenzier Piaia

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

    您是否愿意分享演示此问题的 zcl_thermostrocess.c 代码?  还是至少有 ADC 代码?

    改用传感器控制器的工作进展如何?

    此致、
    Ryan

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

    早上好、Ryan、

    我将由 Carlo Colombo 向您发送 ADC 代码。

    谢谢!

    Cristiane Bellenzier Piaia

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

    我已经收到这样的文件、并传递了传感器控制器 ADC 使用演示、我建议您进一步评估该使用情况。

    大多数   OsalPort_enterCS/OsalPort_leaveCS 调用都可以从版本 SDK 中看到、您是否评估了其中任何一个调用是否占用了关键段中的大部分时间?

    此致、
    Ryan