[牛人杂谈] HIRC Trim 功能

[复制链接]
 楼主| gejigeji521 发表于 2017-4-16 09:29 | 显示全部楼层 |阅读模式
新唐有些芯片可以用外部32Ktrim内部HIRC。一般HIRC全温度范围误差2%左右,在有些场合这个精度不够,这时候就可以用外部32K来trim内部HIRC,trim之后HIRC精度可以达到0.25%左右。
Trim功能一旦使能就一直在工作,不会停止。如果外部32K晶振频率飘出范围(内部设定的范围比较大一般是20K ~ 47K左右),trim就会停止,并发生中断。所以需要在中断里面重新启动trim功能。
  1. /*LXT 时钟出错或者尝试次数达到限制将发生中断*/
  2. void HIRC_IRQHandler(void)
  3. {          uint32_t u32IRCStatus;

  4.         /*清除中断标志*/
  5.         u32IRCStatus = SYS->IRCTRIMINT;          SYS->IRCTRIMINT = u32IRCStatus;  
  6.         /*重新启动trim功能*/
  7. SYS->IRCTRIMCTL = SYS_IRCTRIMCTL_LOOP_32CLK| SYS_IRCTRIMCTL_TRIM_12M; }
  8. /*使能trim功能*/
  9. void SYS_EnableAutoTrim()
  10. {  
  11.         /*取32个32K时钟周期的平均值来trim HIRC*/
  12.         SYS->IRCTRIMCTL = SYS_IRCTRIMCTL_LOOP_32CLK| SYS_IRCTRIMCTL_TRIM_12M;
  13.     /*一旦出错将发生中断*/
  14.         SYS->IRCTRIMIEN = SYS_IRCTRIMIEN_32KERR_EN | SYS_IRCTRIMIEN_FAIL_EN;  
  15.         NVIC_EnableIRQ(HIRC_IRQn);  
  16. }


 楼主| gejigeji521 发表于 2017-4-16 09:32 | 显示全部楼层
只要调用SYS_EnableAutoTrim就可以使能Auto trim功能来trim HIRC了。如果32K晶振飘出范围,在中断处理函数HIRC_IRQHandler里面再次启动trim即可。
捉虫天师 发表于 2017-4-16 09:34 | 显示全部楼层
这都是赤裸裸的纯技能。
yiy 发表于 2017-4-16 11:00 | 显示全部楼层
好多人不知道需要重新设置。
xixi2017 发表于 2017-4-16 21:23 | 显示全部楼层
系统自己可以进行32个平均。。
稳稳の幸福 发表于 2017-4-16 21:56 | 显示全部楼层
这一段有点小复杂,能图形化配置吗
huangcunxiake 发表于 2017-4-17 16:52 | 显示全部楼层
定时器看似简单,实际上用好很难。
huangcunxiake 发表于 2017-4-19 15:45 | 显示全部楼层
这个是内部的RC振荡器?
wahahaheihei 发表于 2017-4-19 23:39 | 显示全部楼层
时钟源的配置,外部晶振不可用辣**品。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

195

主题

2460

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部

195

主题

2460

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部