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.

[参考译文] LAUNCHXL-CC26X2R1:关于 cc26x2r 中的计时器精度

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1604152/launchxl-cc26x2r1-about-timer-precision-in-cc26x2r

器件型号: LAUNCHXL-CC26X2R1

大家好!

 

我创建一个计时器、每 11ms 切换一次 GPIO 输出。 实际上、它会切换 2 个 GPIO、这两个 GPIO 始终相反(当一个为 1 时、另一个为 0、另一个为 0)。  

为此、我使用了 SimpleBLEPeripheral 的 Util_constructClock 函数。 它是工作的,但我经常能找到脉冲,例如 11.4 毫秒。 计时器回调函数仅包含两条 GPIO 切换指令。

 

因此、我的问题有两个方面:

问题 1

为什么该功能无法提供此类时间? 一个 22 毫秒的周期是没有要求的,所以我很惊讶它的表现这么差。 也许我应该像在 这个链接中那样尝试使用低级 clockP 调用(任务 3)? 它会更精确吗?

 

问题 2.

如何同时切换 2 个 GPIO、而不需要一个接一个地进行 2 个连续调用? 在 MSP430 中、我们过去能够通过掩码切换、因此所有引脚都能一起切换 (P.E. P1OUT!= 0x88)。 如何在 CC26X2R 中执行该操作?

 

这些是我的软件版本。

v8.x 开始

CCS v20

LaunchPad CC26X2R1

 

希望你有一个美好的假期,有一个美好的一天。

很快就会尝试添加屏幕截图、但不会添加太多内容。

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

    您好、Kazola、

    [报价 userid=“66159" url="“ url="~“~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1604152/launchxl-cc26x2r1-about-timer-precision-in-cc26x2r

    问题 1

    为什么该功能无法提供此类时间? 一个 22 毫秒的周期是没有要求的,所以我很惊讶它的表现这么差。 也许我应该像在 这个链接中那样尝试使用低级 clockP 调用(任务 3)? 它会更精确吗?

    [/报价]

    如您所指出、我们可以使用单独的方法生成时钟、对于 CC26xx 器件、我建议参考驱动程序 timerled 示例、该示例说明了如何创建正常计时器。 然而,我仍然认为  Util_constructClock 应该起作用,所以我们可能需要进一步研究这一点。  

    [报价 userid=“66159" url="“ url="~“~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1604152/launchxl-cc26x2r1-about-timer-precision-in-cc26x2r

    问题 2.

    如何同时切换 2 个 GPIO、而不需要一个接一个地进行 2 个连续调用? 在 MSP430 中、我们过去能够通过掩码切换、因此所有引脚都能一起切换 (P.E. P1OUT!= 0x88)。 如何在 CC26X2R 中执行该操作?

    [/报价]

    我们应该能够使用以下结构来创建切换(或写入)特定 DIO 的方法、但我们仍然可能需要两个 HWREG 调用:

    __STATIC_INLINE void
    GPIO_toggleDio( uint32_t dioNumber )
    {
        // Check the arguments.
        ASSERT( dioNumberLegal( dioNumber ));
    
        // Toggle the specified DIO.
        HWREG( GPIO_BASE + GPIO_O_DOUTTGL31_0 ) = ( 1 << dioNumber );
    }
    __STATIC_INLINE void
    GPIO_writeDio( uint32_t dioNumber, uint32_t value )
    {
        // Check the arguments.
        ASSERT( dioNumberLegal( dioNumber ));
        ASSERT(( value == 0 ) || ( value == 1 ));
    
        // Write 0 or 1 to the byte indexed DOUT map
        HWREGB( GPIO_BASE + dioNumber ) = value;
    }
    谢谢、
    Alex F
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Alex、

    问题 1

    我将确认可以在当前 SDK 中使用此计时器库。 您的示例似乎较新。 我将首先尝试 clockP、但感谢提供替代方案。

    问题 2.

    这不是我问的。 我想同时切换 2 个 GPIO。

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

    您好、Kazola、

    问题 2:

    HWREGB (GPIO_BASE + GPIO_O_DOUT3_0 + 14)= HWREGB (GPIO_BASE + GPIO_O_DOUT3_0 + 15)= 1 和 0x01;//写入 GPIO 开启
    HWREGB (GPIO_BASE + GPIO_O_DOUT3_0 + 14)= HWREGB (GPIO_BASE + GPIO_O_DOUT3_0 + 15)= 0 和 0x01;//写入 GPIO 关闭

    (HWREGB (GPIO_BASE + GPIO_O_DOUT3_0 + 14)= 1 和 0x01)、(HWREGB (GPIO_BASE + GPIO_O_DOUT3_0 + 15)= 0 和 0x01)//对于两个不同的值

    谢谢、
    Alex F