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.

[参考译文] MSP430FR5989:FLOWESI-GUI:与重校准相关的代码似乎错误。

Guru**** 544840 points
Other Parts Discussed in Thread: FLOWESI-GUI, MSP430FR5989
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1037581/msp430fr5989-flowesi-gui-code-related-to-recalibration-seems-to-be-wrong

器件型号:MSP430FR5989
主题中讨论的其他器件:FLOWESI-GUI

大家好、

我遇到了很多 FLOWESI-GUI 生成的代码错误和问题。

我53ºC 到、当我将温度从25ºC ̊ C 增加到48 ̊ C 时、我的 MSP430FR5989会失败。 ESI 停止正确计数。 ºC 我将温度降低至45 ̊ C 左右、ESI 再次开始工作。

我怀疑自动校准不能正常工作、因为我正在打印寄存 器 ESIDAC1R0-ESIDAC1R1和 ESIDAC1R2-ESIDAC1R3、并且在将温度从25ºC μ V 升高到48 53ºC 的过程中、它们从未发生变化。 因此、我正在检查代码、我意识到负责更新这些寄存器的代码不起作用。

这是我要讨论的流程图的一部分:

在文件:esiCalibration.c 中、我发现代码的一部分负责计算漂移。  该函数在第639行中重新校准 ScanIF():

(笑声)

void ReCalScanIF(void){
int16_t newLevel, delta;
uint16_t loopCounter = 0;

...

if (gRecalFlag&VALID_RECALIBRATION)
{
if(gRecalFlag&PERIODIC_AFE2_RECALIBRATION)
{
afe2MaxDACCH0 /= 4;
afe2MinDACCH0 /= 4;

但该函数 ReCalScanIF()在 main.c 的330行中执行:

(笑声)

void serviceInterrupts(void){
TARGET_COMM_checkForReceivedPacket();

if(gCommFlags & START_CONFIG_ESI_MODULE){
esiConfig();
startTimer();
}


if(gCommFlags & COMM_CAL_DONE){

if(gCommFlags & FLUSH_COUNTER_REGISTERS){
TARGET_COMM_sendSensorData();

gCommFlags &= ~FLUSH_COUNTER_REGISTERS;
}

if(gCommFlags & FLUSH_DEBUG_REGISTERS){
TARGET_COMM_sendDebugData();

gCommFlags &= ~FLUSH_DEBUG_REGISTERS;
}
if(gRecalFlag&PERIODIC_AFE2_RECALIBRATION){
GPIO_setOutputLowOnPin(RECAL_LED_PORT, RECAL_LED_PIN);
TARGET_COMM_sendRecalStartCmd();
gRecalFlag &= ~PERIODIC_AFE2_RECALIBRATION;
Timer_A_setCompareValue(TIMER_RECALIBRATION_SELECTION,
TIMER_A_CAPTURECOMPARE_REGISTER_0,
RECAL_TIME_OUT);
Timer_A_startCounter(TIMER_RECALIBRATION_SELECTION,TIMER_A_UP_MODE);
ReCalScanIF();
gRecalCounter = TIME_TO_RECAL_REPEAT;

Timer_A_initUpModeParam upParams =
{

...

如您所见,位 periode_AFE2_recalibrationsis 在进入函数 ReCalScanIF()前被清除,因此不可能更新寄存器的值。

是否有人建议正确修复此错误?

此致。