YTM32 M系列芯片基于32位车规级ARM Cortex-M33内核,CPU全温域主频高达120MHz,提供1.25MB嵌入式闪存,符合ISO26262的ASIL-B等级要求,可靠性满足AEC-Q100、Grade1标准,信息安全方面支持AES、SHA以及国密SM4等多种加密算法,并提供符合AUTOSAR标准的MCAL。
时钟模块是嵌入式软件设计的基础,只有详细了解了嵌入式芯片的时钟结构,在实际应用中才能使芯片发挥全部的性能,同时,根据不同的应用需求,选择合适的时钟源,可以同时兼顾应用的性能需求和功耗需求,从而使系统设计更好的满足应用需求。
主要时钟源介绍
YTM32B1ME0系列MCU时钟模块通过SCU统一管理,芯片支持PLL,FIRC,SIRC,FXOSC以及SXOSC几种时钟源,除了SXOSC以外,其余四种时钟源都可以选择为系统时钟源。
- 锁相环时钟(PLL):PLL时钟源需要参考内部FIRC或者外部FXOSC晶振产生时钟,PLL内部VCO振荡器频率范围为200MHz至400MHz,VCO输出经过二分频后可以作为系统和模块时钟源,可配置频率范围为100MHz至200MHz。
- FIRC:FIRC为芯片内部RC振荡器,时钟频率是96MHz,可以直接作为系统和模块的时钟源,同时还可以作为PLL的参考时钟源,FIRC不需要依赖外部电路,直接由芯片内部产生。
- SIRC:SIRC同样通过内部RC振荡器实现,时钟频率为12MHz,可以直接作为系统和模块时钟源,SIRC支持在所有低功耗模式下工作(有单独的使能控制位),可以用来作为模块的低功耗时钟源和IO/WKU的数字滤波器时钟。
- FXOSC:外部晶振振荡器,FXOSC支持4MHz至40MHz外部晶振,芯片内部集成500K反馈电阻,FXOSC输出时钟可以直接作为系统和模块时钟源,同时还可以作为PLL的参考时钟,另外,为了满足CAN模块对时钟源的精度要求,CAN模块可以直接选择FXOSC作为模块的时钟源。
- SXOSC:外部32.768K时钟晶体振荡器,SXOSC支持32.768K外部晶振,输出时钟可以作为模块时钟(不能作为系统时钟源),SXOSC主要功能是为RTC模块提供时钟,另外SXOSC支持在所有低功耗模式下工作,因此也可以为模块提供低功耗功能时钟,可以用于IO和WKU的数字滤波器时钟源。
系统时钟架构
时钟模块低功耗行为
ME系列芯片的时钟在低功耗模式下都是可以进行配置的,当在相应的低功耗模式下开启时钟,会造成该低功耗模式的功耗增加。针对不同时钟在不同低功耗模式下的具体行为列举如下:
| Run | Sleep | Deep Sleep | Standby | Power Down | |
|---|---|---|---|---|---|
| FIRC | Optional | Optional | Optional | OFF | OFF |
| SIRC | ON | ON | Optional | Optional | Optional |
| FXOSC | Optional | Optional | Optional | OFF | OFF |
| SXOSC | Optional | Optional | Optional | Optional | Optional |
| PLL | Optional | Optional | Optional | OFF | OFF |
时钟监测模块
车规芯片对于Function Safety是有很高要求的,YTM32 M系列MCU可以满足ASIL-B的安全等级要求,在时钟模块设计上,为了满足时钟的安全性需求,芯片内部集成了一个4通道的时钟监测模块CMU,可以在芯片运行过程中实时监测时钟是否稳定可靠。
CMU的基本原理是通过时钟之间的互相监测实现对时钟工作状态的异常监测。在CMU的内部,每个监测通道同时会有两个计数器采用两种不同的时钟进行计数,其中参考时钟计数溢出值固定为128,用于可以设定被监测时钟的异常判定范围,比如采用12MHz的SIRC对120MHz的PLL输出进行监测,如果允许的频率偏差为正负2%,那么异常判定的上下限可以通过如下公式计算:

系统外设时钟管理
YTM32 M系列模块时钟主要有以下三种类型:
- 模块只需要寄存器访问时钟,这种情况下用户只需要打开IPC中模块的寄存器时钟即可正常使用模块,对于这些模块的功能时钟选择是无效的。比如使用DMA的时候,只需要打开访问时钟就可以正常使用了。
- 模块支持功能时钟,这种情况下,用户需要开启IPC中的模块时钟,同时根据需要选择合适的功能时钟,二者同时打开之后模块方可正常工作。比如使用SPI模块的时候,应用还需要选择合适的功能时钟,并且SPI的波特率计算也都是通过功能时钟频率来进行计算的。
- 模块支持额外的外部时钟输入,或者模块内部集成时钟选择,对于这些模块,应用中除了IPC中进行合适的功能时钟选择之外,还可以根据需要在模块内部进行进一步的时钟选择。比如lpTMR模块,除了可以在IPC中进行功能时钟选择以外,还可以在模块内部选择时钟来自IPC还是直接选择SIRC或者SXOSC,对于lpTMR,额外的时钟选择可以让lpTMR在power down模式下继续工作,因为power down模式下IPC掉电,无法继续提供时钟。
模块时钟列表:
| No. | Module | Bus | Gate | Function |
|---|---|---|---|---|
| 0 | - | - | - | - |
| 1 | - | - | - | - |
| 2 | - | - | - | - |
| 3 | - | - | - | - |
| 4 | - | - | - | - |
| 5 | - | - | - | - |
| 6 | - | - | - | - |
| 7 | - | - | - | - |
| 8 | DMA | SYS_CLK | YES | - |
| 9 | - | - | - | - |
| 10 | - | - | - | - |
| 11 | - | - | - | - |
| 12 | - | - | - | - |
| 13 | - | - | - | - |
| 14 | - | - | - | - |
| 15 | TRACE | - | - | - |
| 16 | EFM | SLOW_BUS_CLK | YES(1) | - |
| 17 | GPIO | SYS_CLK | YES | YES |
| 18 | PCTRLA | SLOW_BUS_CLK | - | - |
| 19 | PCTRLB | SLOW_BUS_CLK | - | - |
| 20 | PCTRLC | SLOW_BUS_CLK | - | - |
| 21 | PCTRLD | SLOW_BUS_CLK | - | - |
| 22 | PCTRLE | SLOW_BUS_CLK | - | - |
| 23 | - | - | - | - |
| 24 | - | - | - | - |
| 25 | - | - | - | - |
| 26 | - | - | - | - |
| 27 | LINFlexD0 | SLOW_BUS_CLK | YES | - |
| 28 | LINFlexD1 | SLOW_BUS_CLK | YES | - |
| 29 | LINFlexD2 | SLOW_BUS_CLK | YES | - |
| 30 | LINFlexD3 | SLOW_BUS_CLK | YES | - |
| 31 | LINFlexD4 | SLOW_BUS_CLK | YES | - |
| 32 | LINFlexD5 | SLOW_BUS_CLK | YES | - |
| 33 | - | - | - | - |
| 34 | - | - | - | - |
| 35 | I2C0 | SLOW_BUS_CLK | YES | YES |
| 36 | I2C1 | SLOW_BUS_CLK | YES | YES |
| 37 | I2C2 | SLOW_BUS_CLK | YES | YES |
| 38 | - | - | - | - |
| 39 | - | - | - | - |
| 40 | - | - | - | - |
| 41 | - | - | - | - |
| 42 | SPI0 | SLOW_BUS_CLK | YES | YES |
| 43 | SPI1 | SLOW_BUS_CLK | YES | YES |
| 44 | SPI2 | SLOW_BUS_CLK | YES | YES |
| 45 | SPI3 | SLOW_BUS_CLK | YES | YES |
| 46 | SPI4 | SLOW_BUS_CLK | YES | YES |
| 47 | SPI5 | - | - | - |
| 48 | FlexCAN0 | FAST_BUS_CLK | YES | - |
| 49 | - | - | - | - |
| 50 | - | - | - | - |
| 51 | - | - | - | - |
| 52 | FlexCAN1 | FAST_BUS_CLK | YES | - |
| 53 | - | - | - | - |
| 54 | - | - | - | - |
| 55 | - | - | - | - |
| 56 | FlexCAN2 | FAST_BUS_CLK | YES | - |
| 57 | - | - | - | - |
| 58 | - | - | - | - |
| 59 | - | - | - | - |
| 60 | FlexCAN3 | FAST_BUS_CLK | YES | - |
| 61 | FlexCAN4 | FAST_BUS_CLK | YES | - |
| 62 | FlexCAN5 | FAST_BUS_CLK | YES | - |
| 63 | - | - | - | - |
| 64 | ADC0 | SLOW_BUS_CLK | YES | YES |
| 65 | ADC1 | SLOW_BUS_CLK | YES | YES |
| 66 | - | - | - | - |
| 67 | ACMP0 | SLOW_BUS_CLK | YES | YES |
| 68 | - | - | - | - |
| 69 | - | - | - | - |
| 70 | PTU0 | FAST_BUS_CLK | YES | - |
| 71 | PTU1 | FAST_BUS_CLK | YES | - |
| 72 | TMU | SLOW_BUS_CLK | - | - |
| 73 | eTMR0 | FAST_BUS_CLK | YES | - |
| 74 | eTMR1 | FAST_BUS_CLK | YES | - |
| 75 | eTMR2 | FAST_BUS_CLK | YES | - |
| 76 | eTMR3 | FAST_BUS_CLK | YES | - |
| 77 | eTMR4 | FAST_BUS_CLK | YES | - |
| 78 | eTMR5 | FAST_BUS_CLK | YES | - |
| 79 | - | - | - | - |
| 80 | - | - | - | - |
| 81 | - | - | - | - |
| 82 | - | - | - | - |
| 83 | - | - | - | - |
| 84 | TMR0 | SLOW_BUS_CLK | YES | - |
| 85 | - | - | - | - |
| 86 | - | - | - | - |
| 87 | - | - | - | - |
| 88 | - | - | - | - |
| 89 | - | - | - | - |
| 90 | pTMR0 | SLOW_BUS_CLK | YES | - |
| 91 | - | - | - | - |
| 92 | - | - | - | - |
| 93 | lpTMR0 | SLOW_BUS_CLK | YES | YES |
| 94 | - | - | - | - |
| 95 | - | - | - | - |
| 96 | RTC | SLOW_BUS_CLK | YES | - |
| 97 | REGFILE | - | - | - |
| 98 | WKU | - | - | - |
| 99 | - | - | - | - |
| 100 | - | - | - | - |
| 101 | CRC | SYS_CLK | YES | - |
| 102 | TRNG | SLOW_BUS_CLK | YES | - |
| 103 | HCU | SYS_CLK | YES | - |
| 104 | - | - | - | - |
| 105 | - | - | - | - |
| 106 | WDG | SLOW_BUS_CLK | YES(1) | - |
| 107 | EWDG | - | - | - |
| 108 | - | - | - | - |
| 109 | - | - | - | - |
| 110 | - | - | - | - |
| 111 | - | - | - | - |
| 112 | - | - | - | - |
| 113 | INTM | SLOW_BUS_CLK | YES | - |
| 114 | EMU | FAST_BUS_CLK | YES | - |
| 115 | - | - | - | - |
| 116 | - | - | - | - |
| 117 | - | - | - | - |
| 118 | - | - | - | - |
| 119 | STU | SLOW_BUS_CLK | YES | - |
| 120 | - | - | - | - |
| 121 | - | - | - | - |
| 122 | - | - | - | - |
| 123 | CIM | - | - | - |
| 124 | SCU | SLOW_BUS_CLK | YES(1) | - |
| 125 | - | - | - | - |
| 126 | PCU | SLOW_BUS_CLK | YES(1) | - |
| 127 | RCU | SLOW_BUS_CLK | YES(1) | - |
上表是YTM32B1ME0的时钟配置,第三列的BUS代表当前模块所属的BUS时钟域,不同的bus时钟域主要是时钟频率有差异,这个时钟域的配置用于不能更改,应用上也只需要做频率的区分就可以了,Gate代表模块支持通过IPC关闭时钟,YES(1)表示模块时钟在芯片复位之后默认开启。Function列表示模块是否支持功能时钟选择,可以看到只有部分模块支持功能时钟,对于其他不支持功能时钟选择的模块,对应的IPC时钟选择寄存器域是无法写入的。Addition列代表模块的其他时钟源,这些模块的详细配置如下:
- LINFlexD模块波特率时钟来自
FAST_BUS_CLK,当计算LINFlexD模块波特率的时候,需要依据FAST_BUS_CLK的频率来进行计算(MD1中LINFlexD已经支持功能时钟) - FlexCAN模块的时钟可以选择
FAST_BUS_CLK或者FXOSC_CLK,这部分的选择是在FlexCAN模块内部实现的。 - eTMR默认时钟来自FAST_BUS_CLK,用户也可以根据需要从外部TCLK输入时钟来作为eTMR的时钟,注意外部输入时钟的时钟频率不能超过FAST_BUS_CLK的一半。
- lpTMR支持IPC管理时钟,同样也支持模块内部时钟源选择,这么做的原因是PowerDown模式IPC模块会断电,无法为lpTMR提供工作时钟,如果希望lpTMR在PowerDown模式继续工作,那么就需要将lpTMR的时钟源在模块内部选成SIRC或者SXOSC时钟。
- RTC不支持IPC时钟源,RTC的时钟源默认在模块内部选择,这么做可以保证RTC在所有功耗模式下都可以正常工作。
- WDG也不支持IPC时钟源,WDG的时钟源也是在模块内部选择,支持SIRC和SXOSC两种时钟源。
- RCU模块因为涉及Reset引脚的数字滤波器功能,如果数字滤波器开启,RCU需要使用SIRC时钟来实现对引脚的数字滤波。
电子发烧友App
























评论