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.

[参考译文] CCS/MSP430FR2355:CCS/MSP430FR2355

Guru**** 2537300 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/758328/ccs-msp430fr2355-ccs-msp430fr2355

器件型号:MSP430FR2355

工具/软件:Code Composer Studio

是否有人 可以向我解释下面的代码:-

空 Software_Trim ()

unsigned int oldDcotTap = 0xFFFF;
unsigned int newDcoTap = 0xFFFF;
unsigned int newDcoDelta = 0xFFFF;
unsigned int bestDcoDelta = 0xFFFF;
unsigned int csCtl0Copy = 0;
unsigned int csCtl1Copy = 0;
无符号 int csCtl0Read = 0;
无符号 int csCtl1Read = 0;
unsigned int dcoFreqTrim = 3;
unsigned char endLoop = 0;

操作

CSCTL0 = 0x100;// DCO 抽头= 256
操作

CSCTL7 &=~DCOFFG;//清除 DCO 故障标志
} while (CSCTL7 & DCOFFG);//测试 DCO 故障标志

__DELAY_CYCLLES ((unsigned int) 3000 * MCLK_FREQ_MHz);//等待 FLL 锁定状态(FLLUNLOCK)保持稳定
//建议等待24个经过分频的 FLL 参考时钟周期
while (((CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1))和&((CSCTL7 & DCOFFG)= 0));

CSCCtl0Read = CSCTL0;//读取 CSCTL0
CSCCtl1Read = CSCTL1;//读取 CSCTL1

oldDcoTap = newDcoTap;//记录上次的 DCOTAP 值
newDcoTap = csCtl0Read & 0x01ff;//这次获得 DCOTAP 值
dcoFreqTrim =(csCtl1Read & 0x0070)>>4;//获取 DCOFTRIM 值

if (newDcoTap < 256)// DCOTAP < 256

newDcoDelta = 256 - newDcoTap;// DCPTAP 和256之间的增量值
if ((oldDcotap!= 0xFFFF)&&(oldDcotap >= 256)// DCOTAP 交叉256
endLoop = 1;//停止 while 循环
其他

dcoFreqTrim --;
CSCTL1 =(csCtl1Read &(~DCOFTRIM))|(dcoFreqTrim <4);


else // DCOTAP >= 256

newDcoDelta = newDcoTap - 256;// DCPTAP 和256之间的增量值
if (oldDcoTap < 256)// DCOTAP 交叉256
endLoop = 1;//停止 while 循环
其他

dcoFreqTrim++;
CSCTL1 =(csCtl1Read &(~DCOFTRIM))|(dcoFreqTrim <4);

if (newDcoDelta < bestDcoDelta)//记录最接近256的 DCOTAP

csCtl0Copy = csCtl0Read;
csCtl1Copy = csCtl1Read;
bestDcoDelta = newDcoDelta;

}while (endLoop =0);//轮询直至 endLoop =1

CSCTL0 = csCtl0Copy;//重新加载锁定的 DCOTAP
CSCTL1 = csCtl1Copy;//重新加载锁定的 DCOFTRIM
while (CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1));//轮询直到 FLL 被锁定

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

    这将运行一个软件 FLL 来调优 DCO。 我建议您忽略此代码。  

    [编辑:我选择了 euscia0_UART_05.c、因为它不包含此代码。]

    [编辑:不要删除它、只需忽略它。]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我弄错了。 Software_Trim 正在调整修整值以确保 DCO (CSCTL0)大致处于针对所请求 DCORSEL 设置的范围的中间(约256)。 用户指南(SLAU445H)第3.2.11.2节介绍了该过程(我之前错过了该过程)。

    这样、FLL 就可以在不同温度下自由调节 DCO、而不会超出范围的范围。 在实践中、"常用"时钟速度(1/4/8/16MHz)已经处于各自 DCORSEL 范围的中间、因此、如果您不打算将其带入亚冰点的天气、您可能可以将其替换为:
    > while (CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1))/* empty*/;//等待 FLL 锁定

    您也可以将其保留并忽略。 (您可能希望在我们忘记之后添加对"UG sec 3.2.11.2"的引用。)