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.

[参考译文] RTOS/LAUNCHXL-CC2650:LAUNCHXL-CC2650

Guru**** 2595805 points
Other Parts Discussed in Thread: CC2650

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/617151/rtos-launchxl-cc2650-launchxl-cc2650

器件型号:LAUNCHXL-CC2650
Thread 中讨论的其他器件:CC2650

工具/软件:TI-RTOS

您好!

我使用的是 CC2650 LaunchPad 和 cpu.h tirtos lib 中的函数 CPUdelay()。

//
//
//! \brief 提供一个较短的延迟。
//!
//! 此函数提供生成恒定长度延迟的方法。 IT
//! 以汇编语言编写、以使整个工具链的延迟保持一致、
//! 无需根据使用的工具链调整延迟。
//!
//! 循环每循环花费3个周期。 
//!
//! \param ui32Count 是要执行的延迟循环迭代次数。
//!
//! \无返回
//
//*********
extern void CPUdelay (uint32_t ui32Count);

//********* 

CC2650时钟频率为48MHz、在代码中、它表示循环需要3个周期、因此为了获得微秒延迟、我将传递给函数的参数乘以16。 但是、当我测量示波器中的时序时、我会看到延迟超过1秒。

///-------------------------------------------------------
// main()//-----------------

void main (void)
{

hardware_init ();//通过 Xware 初始化硬件
while (1)
{
PIN_setOutputValue (IOPinHandle、PIN_ID (25)、1);//将 IO25设置为1
CPUdelay(4*16); //创建4usec 延迟- CC26xxWare fxn -每个循环3个周期 
PIN_setOutputValue (IOPinHandle、PIN_ID (25)、0);//将 IO25设置为0
}

} 
// 

根据我进行的测量、似乎每个环路实际上是4个周期。 因此、我将传递给函数的参数乘以12、示波器中的时序更改为 usec。
///-------------------------------------------------------
// main()//-----------------

void main (void)
{

hardware_init ();//通过 Xware 初始化硬件
while (1)
{
PIN_setOutputValue (IOPinHandle、PIN_ID (25)、1);//将 IO25设置为1
CPUDELAY (4*12); //创建4usec 延迟- CC26xxWare fxn -每个循环4个周期 
PIN_setOutputValue (IOPinHandle、PIN_ID (25)、0);//将 IO25设置为0
}
//BIOS_start(); //启动 BIOS 调度

程序} 

有人知道这是为什么??

谢谢!



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

    您好!

    是的、你是对的。 看起来更像是、1个循环迭代等于4个时钟周期。  

    NOROM_CPUDELAY ():
    000040a2:1E40 副 R0、r0、#1
    000040a4:D1FD BNE NOROM_CPUDELAY
    000040a6:4770 BX LR 

    根据网络上的各种资源、此序列应在 Cortex M3上产生每环路迭代3个时钟周期。 我已经问过我们的 DriverLib 团队、错误可能来自哪里。 让我们看一下。 但是,在99%的情况下,您不想使用 CPUDelay(),而是使用 unistd.h 中的 sleep()或 usleep() 否则、CPU 会在等待延迟完成时愉快地消耗能量。