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.

[参考译文] CC2640R2F:ADCBufCC26XX 偶尔会在单次触发/阻断模式下无限期挂起。 SDK 1.30

Guru**** 2595770 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/604641/cc2640r2f-adcbufcc26xx-occasionally-pends-indefinitely-in-one-shot-blocking-mode-sdk-1-30

器件型号:CC2640R2F

大家好、德州仪器团队和社区、 我观察 到 ADCBufCC26XX 驱动程序在单次采样转换的单次触发阻断模式下被使用时、会无限期挂起。  我在下面解释代码执行。  我们非常感谢您为帮助调试这一问题提供的任何见解或建议。   我使用的是1.30.00 SDK (simplelink_cc2640r2_sdk_1_30_00_25)

我将以100Hz 的采样率对两个模拟信号进行采样。   由于 ADCBufCC26XX 不支持 ADCBuf_RECURE_MODE_Continuous 模式下的多通道采样、因此我改用具有 GPTimer2A 的 GPTimerCC26XX 驱动程序来生成100Hz 时钟。  在每个时钟事件中、我都会以单次触发阻断模式执行两次背靠背单次采样 ADC 转换。 两个模拟信号中的每一个。  

代码相对简单、遵循以下模式:

静态空 taskFxn (UArg a0、UArg A1){

//...
//此处初始化 ADC 驱动程序
//...

GPTimerCC26XX_Params_init (&timerParams);
timerParams.width = gppt_config_16BIT;
timerParams.mode = gppt_mode_period_up;
timerParams.debugStallMode = gpTimerCC26XX_debug_stal_off;
计时器= gpTimerCC26XX_open (Board_gpTIMEer2A、&timerParams);
if (timer = NULL){
GPTimerCC26XX_CLOSE (定时器);
返回 false;
}
Types_FreqHz freq;
BIOS_getCpuFreq (&freq);
//每10ms 触发
一次 GPTimerCC26XX_Value loadVal = freq.lo / 100 - 1;//479999
GPTimerCC26XX_setTimValue (timer、loadVal);
GPTimerCC26XX_registerInterrupt (timer、loadTimerBack、timerCaller) GPT_INT_TIMEOUT);
GPTimerCC26XX_START (计时器);


ADCBuf_Conversion 阻塞转换;
blockingConversion.arg = NULL;
blockingConversion.adcChannel =(uint32_t) channel;
blockingConversion.sampleBufferTwo = NULL;
blockingConversion.samplesRequestedCount = 1;

while (true){
事件= Event_pend (event、Event_ID_none、SAMPLING_TIMER_Fired_EVT、BIOS_WAIT_FOREVE);
blockingConversion.sampleBuffer = signalA_writePtr;
if (ADCBuf_convert (adcBuf、blockingConversion、1)!= ADCBuf_STATUS_SUCCESS){
返回 false;
}
blockingConversion.sampleBuffer = signalB_writePtr;
if (ADCBuf_convert (adcBuf、blockingConversion、1)!= ADCBuf_STATUS_SUCCESS){
返回 false;
}
}


void timerCallback (GPTimerCC26XX_Handle handle、GPTimerCC26XX_IntMask interruptMask){
EVENT_POST (EVENT、SAMPLING_TIMER_Fired_EVT);
} 

执行一段时间后、任务将挂起、等待阻塞的 ADCBuf_convert 调用返回。  调试挂起代码时、我看到 ADCBufCC26XX_hwifxn 会定期执行、但 ADCBufCC26XX_swiFxn 不会执行。  下面是 ADCBuf 驱动程序对象和 BIOS 错误扫描。  

您是否看到过我采样方式的任何问题?  为什么会出现这些症状?  

-Ray

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

    感谢您在论坛上发帖、我将与团队成员交流、让事情取得进展。

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

    因为客户没有完全解决问题、所以重新打开此帖子。

    V/R、
    外径