freetech

HCS08的内部RC振荡器校准方法

0
阅读(29214)

MC9S08内部的RC振荡器可以通过一个寄存器ICGTRM来调节频率,在一定范围内只要有个基准就可以将其校准。一般是在烧写程序的时候用BDM的频率来校准这个频率,BDM自动算出ICGTRM的值并把它写到一个地址里。而在程序中加上下面的代码即可:

//本例基于MC9S08AC8,校准值存储于0xFFBE地址。

if (*(unsigned char*)0xFFBE != 0xFF) //一般认为非0xFF就是校准过的值,0xFF是擦除后没校准的结果

{

  ICGTRM = *(unsigned char*)0xFFBE;  //把存储在FLASH中的校准值赋给ICGTRM寄存器

}

很多BDM(像Multilink、CyclonPro、USBDM)都支持校准功能,校准精度1%。下面以USBDM为例说明之:

image

在HCS08 Flash Programmer的Target选项页里有个“Trim Frequency”,将其前面的复选框打勾,一般“Trim Frequency”和“NVTRIM Address”用默认值即可,如果想校准到其它的频率,可以在“Trim Frequency”中填入您希望的频率(烧录过程中USBDM会计算Trim Value的值并将其写入“NVTRIM Address”对应的地址里,运行时把它赋给ICGTRM即可)。点“Program Flash”烧写成功后“Trim Value”的值显示在界面上了(本例中是0x79),如下图:

image

0x79是BDM工具根据“Trim Frequency”和具体芯片算出来的,相同频率在不同的芯片上也会算出不同的值,不能写成固定的数。

经过上面的方法得到的频率误差会在1%以内,一般的应用像串口通信、定时等已经能够满足要求。这样既可以节省一只晶体振荡器/谐振器的成本,又能大大提高抗干扰性能。

特别提示:USBDM的校准功能在“Codewarrior 6.3下的Debug”里不能用,只在“独立Programmer软件”和“Codewarrior10.x的Debug”里能用。