一般如何处理时钟抖动呢?
我在arch_main.c文件中看到了时钟校准的代码,意思是不是如果没有定义外部时钟就用默认时钟。那如果我外挂16 m的时钟,那软件上要做怎样的处理呢?
#如果定义(CFG_USE_DEFAULT_XTAL16M_TRIM_VALUE_IF_NOT_CALIBRATED)
#定义DEFAULT_XTAL16M_TRIM_VALUE (1302)
//如果在OTP中没有设定修剪值,则应用默认的XTAL16修剪值
if (0 == GetWord16(CLK_FREQ_TRIM_REG))
{
set_xtal16m_trim_value (DEFAULT_XTAL16M_TRIM_VALUE);
}
# endif
关键词:
设备:
这个是调整芯片内部电容的值,用来匹配外部16 m的晶振。目的在于准确输出16 m。一般都建议做校准。
1)那这个DEFAULT_XTAL16M_TRIM_VALUE值如何获取呢?
2)外接晶振了,软件上作什么特殊处理不?
谢谢!
1:)如果没有做16米晶体的校准,就用推荐的默认值
2:)外界晶体,Diaolog有专门的工具
:) 专门的工具指的是?我就想知道软件要做什么修改,有例子不?硬件上有什么注意事项?
我们有两种方式获得值。细节可以参考文档AN-B-020 “DA14580 End product testing and programming guidelines”。
一种是利用PLT的硬件平台,直接自动获取,细节可以查看论坛的参考设计里的生产线的工具。
另一种就是通过软件自定义的HCI命令写入,然后测量在GPIO口输出的16 m时钟准确度。当然通过单频点发射模式在频谱仪上来测试也可以。
但这需要经过多次测试才能获得精准的值。以SDK5为例,就是target_apps目录下的prod_test工程,查看函数hci_xtal_trim_cmd,里面有相应的操作。输出时钟默认在P05脚输出。SDK3也有类似的工程。
如果需要查看上层PC对应的操作命令行指令,可以参考utilies目录下的prod_test工程