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传感器控制器冻结

Guru**** 2555130 points


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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/828417/cc2650-cc2650-sensor-controller-freeze

器件型号:CC2650

您好!

我设计了一个传感器控制器任务、在主系统 CPU 应用给出的启动和停止之间每毫秒测量一个 GPIO 上的电压。 此任务提供 START 和 STOP 之间的最小电压。

问题是应用程序在调试模式下工作正常、但在不处于调试模式时冻结。 它似乎在一开始就冻结了。

请参阅下面的 sernsorcontroller 任务和应用程序代码

初始化代码:

//选择 ADC 输入
adcSelectGpioInput (AUXIO_A_VBATT);

//将 v电池 输入初始化为最大值
OUTPUT.v电池 Min = VBATT_MAX;
input.stopRequired = 0;

//启用 ADC (固定基准、2.7us 采样时间、手动触发)
adcEnableSync (ADC_ScheduleMin = VBATT_MAX;input_US_time_trigger;


//启用 ADC (固定参考、2.7_task_time_task_1);trigger task_1) trigger;task_eTimer1;task_eTime_1;trigger task 

执行代码:

//对传感器
U16 adcValue 进行采样;
adcGenManualTrigger ();
adcReadFifo (adcValue);

// Determainine 最小值
if (adcValue < output.vbamin){
output.v电池 输入= adcValue;
}

//安排下一次执行
ifnot (input.stopRequired = 1){
fwScheduleTask (1);
} 

终止代码:

//禁用 ADC
adcDisable(); 

在应用程序方面:

驱动程序的初始化方式为:

//初始化 SCIF 操作系统抽象层
scifOsalInit();
scifOsalRegisterCtrlReadyCallback (scCtrlReadyCallback);
scifOsalRegisterTaskAlertCallback (scTaskAlertCallback);

//初始化 SCIF 驱动程序
scifInit(&scifAexVbattDriverSetup);

//启用 RTC 节拍,节拍间隔为1000Hz
scifAexVbattStartRtcTicksNow (0x00000041); 

测量顺序由以下步骤开始:

//初始化 SCIF 操作系统抽象层
scifOsalInit();
scifOsalRegisterCtrlReadyCallback (scCtrlReadyCallback);
scifOsalRegisterTaskAlertCallback (scTaskAlertCallback);

//初始化 SCIF 驱动程序
scifInit(&scifAexVbattDriverSetup);

//启用 RTC 节拍,节拍间隔为1000Hz
scifAexVbattStartRtcTicksNow (0x00000041); 

测量值由读取

int32_t adcOffset = AUXADCGetAdjustmentOffset (AUXADC_REF_FIXED);
int32_t adcGainError = AUXADCGetAdjustmentGain (AUXADC_REF_FIXED);
int32_t adcValue、adcCorrectedValue、adcValueMicroVolt;

//读取 ADC 值
adcValue = scifAexVbattTaskData.vbattalMonitor.output.vbattalMin;

//更正 ADC 原始值
adcCorrectedValue = AUXADCAdjuststValueForGainAndOffset ((Int32_t) adcValue、adcGainError、adcOffset);

//将 ADC 值转换为微伏。
adcValueMicroVolt = AUXADCValueToMicrovolt (AUXADC_FIXED_REF_VOLTGE_NORMAL、adcCorrectedValue);

测量序列通过以下方式停止:

uint8_t 结果;

//停止"V电池 监控器"传感器控制器任务
scifAexVbattTaskData.vbattMonitor.input.stopRequired = 1;
结果= scifStopTasksNbl (1 << SCIF_AEX_VBATT_VBATT_MONIT_TASK_ID);

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

    必须在任务迭代之间关闭 ADC。 否则、在进入待机状态时会发生故障。 在调试模式下、由于 JTAG 域处于打开状态、芯片将被阻止进入待机状态。  

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

    非常感谢。

    这解决了问题。