新唐有些芯片可以用外部32Ktrim内部HIRC。一般HIRC全温度范围误差2%左右,在有些场合这个精度不够,这时候就可以用外部32K来trim内部HIRC,trim之后HIRC精度可以达到0.25%左右。 Trim功能一旦使能就一直在工作,不会停止。如果外部32K晶振频率飘出范围(内部设定的范围比较大一般是20K ~ 47K左右),trim就会停止,并发生中断。所以需要在中断里面重新启动trim功能。 - /*LXT 时钟出错或者尝试次数达到限制将发生中断*/
- void HIRC_IRQHandler(void)
- { uint32_t u32IRCStatus;
-
- /*清除中断标志*/
- u32IRCStatus = SYS->IRCTRIMINT; SYS->IRCTRIMINT = u32IRCStatus;
- /*重新启动trim功能*/
- SYS->IRCTRIMCTL = SYS_IRCTRIMCTL_LOOP_32CLK| SYS_IRCTRIMCTL_TRIM_12M; }
- /*使能trim功能*/
- void SYS_EnableAutoTrim()
- {
- /*取32个32K时钟周期的平均值来trim HIRC*/
- SYS->IRCTRIMCTL = SYS_IRCTRIMCTL_LOOP_32CLK| SYS_IRCTRIMCTL_TRIM_12M;
- /*一旦出错将发生中断*/
- SYS->IRCTRIMIEN = SYS_IRCTRIMIEN_32KERR_EN | SYS_IRCTRIMIEN_FAIL_EN;
- NVIC_EnableIRQ(HIRC_IRQn);
- }
|