TC3xx芯片时钟系统的时钟源详解

正文
1.时钟源
晶振好比人的心脏,晶振产生的时钟脉冲好比心脏产生的心跳,所以,晶振对于mcu来讲必不可少,晶振没有起振,mcu必定无法工作。
1.1 有源晶振和无源晶振
无源晶振又名“无源晶体”、“石英晶体谐振器”,英文名crystal或crystal resonator。有源晶振又称“石英晶体振荡器”,英文名crystal oscillator。
1.1.1 无源晶振
无源晶振一般有两个引脚,无极性。它自身无法振动, 一般外部都接有两个10-22pf的瓷片电容。
无源晶振参考电路无源晶振信号质量较差,通常需要精确匹配外围电路(用于信号匹配的电容、电感、电阻等),更换不同频率的晶体时周边配置 电路也需要做相应的调整。一般建议采用精度较高的石英晶体。
1.1.2 有源晶振
有源晶振有4只引脚,是一个完整的振荡器,其中除了石英晶体外,还有晶体管和阻容元件,因此体积较大。有源晶振的封装有4个引脚,分别为vcc (电压)、gnd (地)、out (时钟信号输出)、nc (空脚)。
有源晶振参考电路有源晶振不需要cpu的内部振荡器,信号稳定,质量较好,且连接方式比
较简单(主要做好电源滤波,通常使用一个电容和电感构成滤波网络,输出端用一个小阻值的
电阻过滤信号即可) , 不需要复杂的配置电路。
1.1.3 有源晶振和无源晶振的区别
1、有源晶振比较贵, 但是有源晶振自身就能振动。无论无源晶振, 还是有源晶振, 都有自身的优点和缺点所在, 若考虑产品成本, 建议可以选择无源晶振电路; 若考虑产品性能, 建议选择有源晶振电路, 省时方便也能保证产品性能。
2、无源晶振最高精度为5ppm, 而有源晶振的精度则可以达到0. 1ppm。精度越高, 频率稳定性也更好。有源晶振在稳定性上要胜过无源晶振, 但也有自身小小的缺陷, 有源晶振的信号电平是固定, 所以需要选择好合适输出电平,灵活性较差。
3、有源晶振一般4个脚,1个电源,1个接地,1个信号输出端,1个nc (空脚)。有个点标记的为1脚, 按逆时针(管脚向下)分别为2、3、4。
4、无源晶振有2个引脚,要借助于外部的时钟电路(接到主ic内部的振荡电路) 才能产生振荡信号, 自身无法振荡。
1.1 振荡器电路(osc)
振荡器电路是一种 pierce 振荡器(pierce oscillator),设计用于与外部晶体(external crystal) / 陶瓷谐振器(ceramic resonator)或外部稳定时钟源(external stable clock source)配合使用。 该电路由一个反向放大器组成, xtal1 作为输入, xtal2 作为带有集成反馈电阻的输出。
1.1.1外部输入时钟模式
使用外部输入时钟模式时,外部时钟信号连接到osc模块的xtal1引进,xtal2引脚保持悬空状态。
figure 1 aurix tc3xx platform direct clock input
如果在正常模式直接使用外部时钟提供的时钟信号时,不使用外部晶体 / 陶瓷谐振器并绕过振荡器,则输入频率需要等于或大于 pll 的 dco 输入频率 (该值在data sheet中列出)。
1.1.2 外部晶体 / 陶瓷谐振器模式
figure 2 显示了两种工作模式的推荐外部电路:外部晶体 / 陶瓷谐振器模式 (带和不带外部组件)。
figure 2 external circuitry for crystal / ceramic resonator operation
1.1.3 osc控制寄存器
oscillator circuit control register用来配置osc模式和晶振频率。主要用到的配置位域为:osccon.mode 配置晶振模式
osccon.oscval配置晶振频率
osccon.plllv标识osc频率是否可用
osccon.pllhv标识osc频率是否可用
1.1.4 配置osc
只有配置了osc后,外部晶振才能作为时钟源工作。
power-on复位后osc模块是被disabled,需要重新配置。在任何其他重置过程中和之后,振荡器不会受到影响,并按照先前配置的方式工作,这种情况下不需要重新配置。
可以通过ssw来配置osc,也可以在app中直接配置osc。值得注意的是:osccon寄存器是受endinit保护的,配置的时候需要解锁endinit。
参考文档:
1.1.5 osc看门狗
通过配置 syspllcon0.insel = 01b ,选择振荡器时钟作为看门狗的源。
与系统 pll 结合使用时,将实施监控功能。定义此功能的目的是检测外部晶体 / 陶瓷谐振器的严重故障。系统可以检测到时钟输入丢失或输入频率过高 (在较高谐波上运行)。
振荡器监视程序监视来自 osc 的传入时钟频率 fosc。 稳定且定义的输入频率是操作的强制要求。 因此,每次系统重置后都会自动选择此模式。
预期输入频率 fosc 通过位字段 osccon.oscval 选择。osc wdt 检查频率是否过低或过高。
fosc = osccon.oscval - 1 + 16mhz
在配置 osc wdt 功能之前,应禁用所有 smu 振荡器看门狗报警响应选项,以避免意外的 smu 报警。此后,可以更改 osccon.oscval 的值。然后, osc_wdt 应通过设置 osccon.oscres 重置。这将请求使用新配置启动 osc wdt 监控。当设定 osccon.plllv 和 / 或 osccon.pllhv 的预期正监测结果时,输入频率处于预期范围内。当设置 osccon.oscres 清除 osccon.plllv 和 osccon.pllhv 时,应设置两个状态标志。因此,在再次启用 smu 报警响应之前,应清除这两个标志。如果只设置了位 osccon.oscres 而未对 osccon.oscval 进行任何修改,也应使用 smu 报警禁用 - 清除 - 启用序列。
如果 smu 检测到振荡器监视报警,则必须执行与 pll 锁定丢失事件相同的恢复过程。
note:
振荡器看门狗主要用于 pll 输入时钟 fosc _i 通过寄存器 syspllcon0.insel = 01b 设置为 fosc0 时。如果 sysclk 通过 syspllcon0.insel = 10b 用作 fosc _i 的源,用户应将 sysclk 频率限制在与使用晶体相同的范围内,或禁用 smu 中的看门狗报警。通过 syspllcon0.insel = 00b 使用备份时钟作为 fosc _i 的输入时,也需要禁用看门狗报警。 数据表中列出了通过分配的 gpio 输入引脚驱动 sysclk 时的可用晶体频率范围和允许的频率范围。
1.1.6 配置smu和时钟相关的alarm
smu模块在后续的tc3xx系类文章中再详细讲解,这里仅仅列出在配置osc时相关的smu寄存器。
只有smu_keys寄存器的cfglck[7:0]配置为0xbc时才能配置smu.
配置smu_agicfj寄存器disable clock相关的alarm.
和clock alarm相关的group是group 8, 也就是agicfj中i == 8.
note: ag8cf0, ag8cf1, ag8cf2三个寄存器的同一个bit的组合关系决定一个alarm的类型。
举例:
ag8cf0[0].cf0, ag8cf1[0] .cf0, ag8cf2[0] .cf0 就是三个bit, 组合为一个0x0 – 0x7的具体alarm类型,如果
ag8cf0[0] == 1,
ag8cf1[0] .cf0 == 1,
ag8cf2[0] .cf0== 1,
那么最后组合为111 = 0x7,产生的alarm就是smu_cpu_rst.
1.2 备用时钟
备用时钟源可用作备用时钟源。此时钟源提供稳定但可靠的时钟源,可用作系统的时钟源。它提供的准确度低于外部晶体或陶瓷谐振器。不能启用或禁用备份时钟,也不能通过其他方式控制备份时钟,以阻止其常规操作。因此,除了选择备份时钟作为源 (ccucon0.clksel = 00b 作为时钟分配的时钟源, syspllcon0.insel = 00b 作为两个 pll 的时钟源) 外,没有可用的控制位。
1.3 osc实际应用配置
需求:配置使用一个20mhz的外部无源晶振。
#include ifxscu_reg.h#include ifxsmu_reg.hstatic uint8 startup_clockinit_configosc(void){    /*disable smu clock alarm*/    module_smu.keys.u = (uint32)0xbcu;             /* enable access to smu registers */    module_smu.cmd.u  = (uint32)0x00000005;    module_smu.ag[8].u  = 0x1fu;                   /* clear smu alarms*/    module_smu.keys.u = (uint32)0u;    /*congig osc -- start*/    ifx_scu_osccon scuosccon;    uint32 timeoutcount;    uint8 error = 0;        unlockendinit_core0();    scuosccon.u = module_scu.osccon.u;    scuosccon.b.mode = 0u;    /*fosc = osccon.oscval - 1 + 16mhz */    scuosccon.b.oscval = (uint32)5u;    module_scu.osccon.u       = scuosccon.u;     /* check if the configuration is valid */    timeoutcount = 0xfffff;    while((module_scu.osccon.b.plllv == 0u) && (module_scu.osccon.b.pllhv == 0u))                                             {        if (((--(timeoutcount)) <= 0)        {            (error) = 1;            break;        }    }   /*congig osc -- end*/     /* enable smu clock alarms */    module_smu.keys.u = (uint32)0xbcu;             /* enable access to smu registers */    module_smu.cmd.u  = (uint32)0x00000005;    module_smu.ag[8].u  = 0x1fu;   /* clear smu alarms*/    module_smu.keys.u = (uint32)0u;    lockendinit_core0();    return error;}


双十二来临,你不可错过的华为最美手机
LED发光手写笔DIY自制
一种具有高度柔性与可塑性的超香肠覆盖式神经元模型
粉碎机的常见机械故障及排除-风电大部件故障诊断
解析三种嵌入式系统控制电路设计
TC3xx芯片时钟系统的时钟源详解
芯片组的性能指标是什么
闻泰科技拟换股+现金的方式收购安世半导体79.97%的股权
比亚迪的IGBT芯片专利解析
优特电源发布功率密度领先的480WLED恒压电源
工业级无线路由器的功能优势都有哪些
高通2023财年净利润72.32亿美元下降44%
华为P10怎么样?华为P10评测:国产旗舰华为P10售价良心,却为何遭网友吐槽?
LDO内部拓扑图介绍
探秘无人地面车辆(UGV)发展
检测热敏电阻故障的四个方法
盘点2022 | 筑牢物联网的数字底座,机智云AIoT赋能各行业智能化升级
自制12v转5v手机充电器(三款12v转5v充电电路原理图详解)
魅族新手机魅蓝E2要做减法? 要删除到什么地步
简单认识稳压二极管