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:临界区

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1131559/cc2642r-critical-section

器件型号:CC2642R

你好。
我们需要在 GPIO 输出端定期生成一个持续时间为20至500微秒±15%的脉冲。
我们基于 simple_peripheral SDK 5.20创建应用程序。

我们直接在计时器中断函数中将输出更改为端口(计时器优先级设置为最高(1<<5))。 脉冲持续时间由 CPU delay()形成。
脉冲形成的时刻包含在 HAL_enter_critical_section 和 SysTickDisable()中,但尽管如此,脉冲有时会得到20%以上的增补,这种感觉会干扰脉冲形成过程。

我们的代码:

静态空脉冲(GPTimerCC26XX_Handle handle、GPTimerCC26XX_IntMask interruptMask)

SysTickDisable();
HAL_ENTER_CRITICAL_SECTION (KEY);
HWREGB (GPIO_base + TEST_PIN)= 1;
CPUdelay (3000);
HWREGB (GPIO_base + TEST_PIN)= 0;
HAL_EXIT_CRICAL_SECTION (KEY);
SysTickEnable();


对于我们来说、脉冲持续时间非常关键、在我们的情况下、如何在不中断应用的情况下占用100% CPU 时间?

µs 每10ms 禁用500 μ s 的中断有哪些问题?

请提出任何想法、建议或指明解决此问题的可能方向!
此致 John

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

    尊敬的 John:

    HAL_enter_critical 段 将调用 Hwip_disable、但不会延迟 优先级相等或更高的任务的其他软件操作。   无论 应用任务的使用情况如何、BLE5-Stack 库都有可能控制内核以完成自己的必要任务。  有一些可能的方法可以避免这种行为:

    1. 使用 Sensor Controller Studio 、因为单独的 ARM 内核将避免来自主内核和/或 BLE5-Stack 操作的干扰。
    2. 采用 PWM 控制、允许硬件计时器创建更精确的脉冲。

    此致、
    Ryan

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

    但该函数是从硬件中断调用的、因此它应具有比软件中断更重要的优先级、+ HAL_ENTER_CRITICAL_SECTION 还包含 swi_disabled"。 我们认为 SysTick 计时器可以内置于临界区、并将其关闭、但没有任何作用。 也许可以在内核级停止所有中断(内置中断除外)? 为什么这个问题对我们更感兴趣、1. 因为。 脉冲形成和控制的功能已经被执行2. 传感器控制器忙于处理电容式触控按钮、3. 我们还需要在形成开始后的特定时间之后启动 ADC、直到形成脉冲的结束、并将读取值​​与模板进行比较。
    PWM 控制器是一个有趣的主意,谢谢,但到目前为止,我不理解该选项如何在考虑到 ADC 转换延迟的情况下,确定从脉冲形成开始到脉冲形成结束的特定时间。

    很抱歉、未能尽快提供详细信息。

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

    我们还尝试使用空循环操作、而不是 CPUdelay

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

    将您的应用程序保持在硬件中断内的时间肯定不是一个好主意。  您能否测试 BLE 在此期间是否处于活动状态(通过监控射频引脚或功耗)?  您是否考虑在打开 TEST 引脚之前启动另一个计时器、该引脚随后在计时器到期后关闭、会触发另一个硬件中断?  此外、请确保您的应用程序不会进入待机模式、并使用精确的 HF 外部晶振来提供时钟源。   https://e2e.ti.com/f/1/t/1125349 

    此致、
    Ryan