工具/软件: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 被锁定
}