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.

[参考译文] CC2650:CC2650:tdcWaitus()-我可以使用的最长等待时间是多少?

Guru**** 2585275 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/744197/cc2650-cc2650-tdcwaitus---what-is-the-maximum-wait-time-i-can-use

器件型号:CC2650

 tdcWaitus()函数的最长等待时间文档规定为250,000us。 但我需要比这更长一点的时间。

如果出现错误、编译器将允许一个小于350、000us 的值。 我已在我的代码中成功测试了高达340、000us 的电流。

我的问题是,我是否可以在 tdcWaitus()函数中安全可靠地使用340000us 的值?

如果不是、还有其他方法可以减慢该时钟、也许 可以使用预分频器吗?  

MYCODE:

//首先安全地获取外设

fwAcquirePeripheral (Peripheral_TDC);

//测试-切换 LED,以便我们知道它正在运行

if (state.Toggle = 1){

GpioClearOutput (AUXIO_O_LED_CTRL);

State.Toggle = 0;

}否则{

GpioSetOutput (AUXIO_O_LED_CTRL);

State.Toggle=1;

tdcSetCntSource (TDC_CNTSRC_48M_RCOSC);

tdcSetTriggers (TDC_STARTTRIG_AUXIO_LOW_BASE+AUXIO_I_PERIOD、TDC_STOPTRIG_AUXIO_LOW_BASE+AUXIO_I_PERIOD、0);

tdcEnable();

tdcArm (TDC_START_SYNC);

tdcWaitU (340000);//如果没有操作,则在250ms 内超时。最大值<350000

tdcCheckDoneEv (state.running);

如果(state.running = 1){//测量有效、则获取 TDC 计数器值

tdcGetValue (state.PeriodHigh、state.PeriodLow);

}否则{// TDC 超时,值无效

State.PeriodHigh = 0;

State.PeriodLow = 0;

tdcDisable();//禁用 TDC

fwReleasePeripheral (Peripheral_TDC);//释放共享外设

//检查是否有任何更改,不能嵌套多个 IF,所以请单独进行

if (state.running!= output.running){

State.New=1;

if (state.PeriodLow!= output.PeriodLow){

State.New=1;

if (state.PeriodHigh!= output.PeriodHigh){

State.New=1;

if (state.New = 1){//如果有任何更改、请将其报告回应用程序

Station.New = 0;

output.running = state.running;

output.PeriodHigh = state.PeriodHigh;

output.PeriodLow = state.PeriodLow;

//fwGenAlertInterrupt ();//立即通知应用程序

fwGenAlertInterrupt();//在任务结束时通知应用程序

//所有完成的操作将启动下一个任务。 应用程序将在!Running 上终止任务。

fwScheduleTask (3);//在3个 RTC 周期内触发下一个任务, 在 <=2、>=3时不稳定是正常的。

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

    如果您查看反汇编、您会注意到 tdcWait 调用基本上会将 Timer0配置为 x 值超时。 AUX 定时器0是一个带有2^N 预分频器的16位定时器、其中 N 介于0和15之间。 您可以通过查看反汇编详细了解 tdcwait 的功能、您将了解为什么存在限制。

    在这个特定的实现方案中、它将定时器设置为计数到63750、预分频为2^7、这是内部实现、您需要在不增加等待时间的情况下实现自己的 tdcwait、或者使用定时器进行计数、如果您想让它等待更多的时间。

    此致、
    AB
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的快速响应。 我成功使用 timer0作为0.5秒超时,而不是 tdcWaitus()。

    // tdcWaitU 对于我们来说不够长,因此请使用设置 timer0作为0.5秒超时。
    //~ 5秒后生成定时器事件。 (367*2^15)/24E6=0.501秒
    timer0Start (TIMER0_MODE_SINGLE、367、15);
    执行{ //等待 TDC 完成或超时(以先到者为准)
    U16 timer0IsRunning;
    timer0CheckState (timer0IsRunning);//检查超时
    U16超时= timer0IsRunning ^ 0x0001;
    //检查 TDC 是否已完成
    tdcCheckDoneEv (state.running); //检查 TDC 完成
    U16 DONE = state.running | timeout;
    } while (done =0);
    timer0Stop(); //停止计时器