功能描述
29 Oct 2024
Read time: 8 minute(s)
PLL
模拟电路 PLL 用于产生时钟供给整个芯片。
下表列出了各个 PLL 的用途及特性。
注: 为保证 PLL 性能要求,PLL_VCO = 24 MHz ÷ (P + 1) ×
(N + 1) 频率建议在 720 MHz~1584 MHz 之间。
名称 | 用途 | 典型频率 | 展频 |
---|---|---|---|
PLL_INT0 | CPU | 480 MHz | 不支持 |
PLL_INT1 | AXI/ AHB/ APB/CE/DE/GE/VE/DVP/PWMCS/TA_IF/EDT_IF/BISS_IF/SDFM/UART/PWM/I2S/AUDIO | 1.2 GHz | 不支持 |
PLL_FRA0 | XSPI/ SPI/ SDMC | 792 MHz | 展频 |
PLL_FRA2 | LCD/ LVDS/ MIPI_DSI | - | 展频 |
PLL 内部结构如下图所示, PLL 频率计算公式为:PLL_OUT = 24MHz*(N+1+F/0x1FFFF)/(P+1)/(M+1)。其中,F 为 FRA_IN 小数分频系数,当不使用小数分频时,F=0,频率计算公式简化为:PLL_OUT = 24 MHz * (N+1)/(P+1)/(M+1)
PLL 配置流程
为保证 PLL 正常开启,需要遵循以下的配置流程:
- PLL 输出配置旁路为 24 MHz, PLL_FRAn_GEN.PLL_OUT_MUX = 0,选择为 24M 时钟
- PLL 电路关闭, PLL_FRAn_GEN.PLL_EN = 0
- PLL 频率系数配置, PLL_FRAn_GEN.FACTOR_P,PLL_FRAn_GEN.FACTOR_N,PLL_FRAn_GEN.FACTOR_M,PLL_FRAn_GEN.FACTOR_M_EN
- PLL 展频/小数分频配置, PLL_FRAn_CFG PLL_FRAn_SDM
- PLL 电路打开, PLL_FRAn_GEN.PLL_EN = 1,延迟 200 us
- PLL 输出使能, PLL_FRAn_GEN.PLL_OUT_EN = 1
- PLL 输出配置切换为高频时钟, PLL_FRAn_GEN.PLL_OUT_MUX = 1
展频配置
展频相关参数如下:
- 展频幅度:寄存器为 PLL_FRAn_SDM.SDM_BOT,对应幅度为 24 MHz / (P+1)*(0x1FFFF-SDM_BOT)/0x1FFFF
- 展频频率:寄存器为 PLL_FRAn_SDM.SDM_FREQ,建议设置为 3 (33KHz)
- 展频模式:寄存器为 PLL_FRAn_SDM.SDM_MODE,建议设置为 2 (三角波)
展频配置公式如下:
- 根据展频幅度需求,求得 SDM_BOT = 0x1FFFF-SDM_AMP*0x1FFFF*(P+1) / 24MHz
- 根据展频频率需求,求得 STEP_NUM = 24MHz / (P+1) / (SDM_FREQ / 2) = 24000000/(P+1)/(33000/2)
- 根据展频幅度和展频步数,求得 SDM_STEP = (0x1FFFF-SDM_BOT)/STEP_NUM
注:
- PLL_FRAn_SDM.SDM_STEP 设置值需要和展频幅度和展频频率匹配,以产生正常的展频波形
- 当 P=0 时,最大展频幅度为 24MHz,如果 N=32,则 PLL 频率为 792MHz,展频深度为 24/792 ≈ 3.0%
- 当 P=1 时,最大展频幅度为 12MHz,如果 N=65,则 PLL 频率为 792MHz,展频深度为 12/792 ≈ 1.5%
CLKOUT
时钟输出用于输出时钟给芯片外设使用, 总共四路 CLKOUT,可选来源为 ,可配置 1~256 除频, CLKOUT 通路如下图所示。
OSC24M 和 XTAL
时钟源输入 CLK_24M 用于给芯片提供时钟,总共两个时钟源选择:
- 内部 OSC24M
- 外部 XTAL。
时钟源选择的规则如下:
-
当引脚 SYS_TEST 配置的值为 1 时,无论 BID_1 为何值,只能选择外部 XTAL 作为芯片时钟源输入。
-
当引脚 SYS_TEST 配置的值为 0 时,根据 BID_1 的值选择芯片的输入时钟源:
- 若 BID_1 值为 1,则选择外部 XTAL 时钟源。
- 若 BID_1 值为 0,则选择内部 OSC24M 时钟源。
模块时钟
模块名称 | 总线时钟 | 模块时钟源 | 模块时钟极限频率 | 备注 |
---|---|---|---|---|
E907 CORE | - | PLL_INT0 | 480 MHz | - |
E907 PLIC | - | PLL_INT0÷2 | 240 MHz | - |
E907 CLINT | - | PLL_INT0÷2 | 240 MHz | - |
E907 DM | - | CLK_24M | 24 MHz | - |
AXI | AXI | - | 200 MHz | - |
AHB | AHB | - | 200 MHz | - |
APB0 | APB0 | - | 100 MHz | - |
APB1 | APB1 | - | 24 MHz | - |
BROM | AXI | - | - | - |
SRAM | AXI | - | - | - |
AHB Matrix | AHB | - | - | - |
DMA | AHB | - | - | - |
CE | AHB | PLL_INT1 | 200 MHz | - |
USB DEV | AHB | - | - | - |
USB PHY | - | CLK_24M | - | - |
EMAC | AHB | PLL_INT1 | 50 MHz | - |
XSPI | AHB | PLL_FRA0 | 400 MHz | - |
SPI0 | AHB | PLL_FRA0 | 100 MHz | - |
SPI1 | AHB | PLL_FRA0 | 100 MHz | - |
SPI2 | AHB | PLL_FRA0 | 100 MHz | - |
SPI3 | AHB | PLL_FRA0 | 100 MHz | - |
CORDIC | AHB | - | - | - |
HCL | AHB | - | - | - |
PBUS | AHB | - | - | - |
SYSCFG | APB0 | CLK_24M | 24 MHz | - |
CMU | APB0 | - | - | - |
SPI_ENC | APB0 | HCLK | - | - |
PWMCS | APB0 | PLL_INT1 | 200 MHz | - |
ADC | APB0 | PLL_INT1 | 100 MHz | - |
AXICFG | APB0 | - | - | - |
MTOP | APB0 | - | - | - |
I2S | APB0 | PLL_INT1 | 26MHz | - |
AUDIO | APB0 | PLL_INT1 | 26MHz | - |
GPIO | APB0 | - | - | - |
UART0 | APB0 | PLL_INT1 | 60 MHz | - |
UART1 | APB0 | PLL_INT1 | 60 MHz | - |
UART2 | APB0 | PLL_INT1 | 60 MHz | - |
UART3 | APB0 | PLL_INT1 | 60 MHz | - |
UART4 | APB0 | PLL_INT1 | 60 MHz | - |
UART5 | APB0 | PLL_INT1 | 60 MHz | - |
UART6 | APB0 | PLL_INT1 | 60 MHz | - |
UART7 | APB0 | PLL_INT1 | 60 MHz | - |
TA_IF | APB0 | PLL_INT1 | 240 MHz | - |
EDT-IF | APB0 | PLL_INT1 | 240 MHz | - |
BISS_IF | APB0 | PLL_INT1 | 240 MHz | - |
SDFM | APB0 | PLL_INT1 | 240 MHz | - |
LCD | APB0 | PLL_FRA2 | 400MHz | DISP_PIXCLK:200MHz |
LVDS | APB0 | PLL_FRA2 | 1000MHz | DISP_PIXCLK:200MHz |
DSI | APB0 | PLL_FRA2 | 1200MHz | DISP_PIXCLK:200MHz |
DVP | APB0 | PLL_INT1 | 200MHz | - |
DE | APB0 | PLL_INT1 | 200MHz | DISP_PIXCLK:200MHz |
GE | APB0 | PLL_INT1 | 200MHz | - |
VE | APB0 | PLL_INT1 | 200MHz | - |
WDOG | APB1 | CLK_32K | 32 KHz | - |
WRI | APB1 | CLK_24M | 24 MHz | - |
SID | APB1 | CLK_24M | 24 MHz | - |
RTC | APB1 | XTAL_32K | 1MHz | - |
GTC | APB1 | - | - | - |
I2C0 | APB1 | - | - | - |
I2C1 | APB1 | - | - | - |
I2C2 | APB1 | - | - | - |
I2C3 | APB1 | - | - | - |
CAN0 | APB1 | - | - | - |
CAN1 | APB1 | - | - | - |
PWM | APB1 | PLL_INT1 | 100 MHz | - |
ADCIM | APB1 | PLL_INT1 | 100 MHz | - |
THS | APB1 | - | - | - |
CPM | APB1 | - | - | - |
UART 在 PLL_INT1=1.2GHz下波特率精度
设定波特率 | 实际波特率 | 波特率偏差 | CMU除频 | Over sampling | Clock source | UART除频 |
---|---|---|---|---|---|---|
300 | 300 | 0 | 25 | 16 | 48000000 | 10000 |
600 | 600 | 0 | 25 | 16 | 48000000 | 5000 |
1200 | 1200 | 0 | 25 | 16 | 48000000 | 2500 |
2400 | 2400 | 0 | 25 | 16 | 48000000 | 1250 |
4800 | 4800 | 0 | 25 | 16 | 48000000 | 625 |
9600 | 9615 | 0.16 | 25 | 16 | 48000000 | 312 |
14400 | 14423 | 0.16 | 25 | 16 | 48000000 | 208 |
19200 | 19230 | 0.16 | 25 | 16 | 48000000 | 156 |
38400 | 38461 | 0.16 | 25 | 16 | 48000000 | 78 |
57600 | 57692 | 0.16 | 25 | 16 | 48000000 | 52 |
115200 | 115384 | 0.16 | 25 | 16 | 48000000 | 26 |
230400 | 230769 | 0.16 | 25 | 16 | 48000000 | 13 |
380400 | 378787 | -0.42 | 22 | 16 | 54545454 | 9 |
460800 | 462963 | 0.47 | 27 | 16 | 44444444 | 6 |
921600 | 925925 | 0.47 | 27 | 16 | 44444444 | 3 |
1000000 | 1000000 | 0 | 25 | 16 | 48000000 | 3 |
1152000 | 1136363 | 1.36 | 22 | 16 | 54545454 | 3 |
1500000 | 1500000 | 0 | 25 | 16 | 48000000 | 2 |
2500000 | 2500000 | 0 | 30 | 16 | 40000000 | 1 |
3000000 | 3000000 | 0 | 25 | 16 | 48000000 | 1 |
模块开关控制和时序
模块一般有三个控制位:
- MOD_RSTN(模块复位控制):同时复位模块和模块总线。
- MOD_BUS_EN(模块总线时钟开关):控制模块的所有总线时钟,包括 AXI/AHB/APB,如果模块使用到多个总线,由于只有一个控制位,该控制位同时控制多个总线时钟。
- MOD_CLK_EN(模块时钟开关): 控制除了总线时钟以外的模块时钟,如果模块用到多个时钟,由于只有一个控制位,该控制位同时控制多个模块时钟。
模块开启和关闭具有一定的时序要求,其中 SP_USBD 时序要求较为特殊,其他模块统一开关时序,具体描述如下。
USB_DEV
打开时序:
- 打开控制器时钟
- 打开模拟 PHY 时钟
- 延迟 100 微秒
- 放开模拟 PHY 复位
- 放开控制器复位
关闭时序:
- 使能控制器复位
- 使能模拟 PHY 复位
- 关闭模拟 PHY 时钟
- 关闭控制器时钟
其他模块
打开时序:
- 打开模块时钟
- 打开总线时钟
- 放开复位控制
关闭时序:
- 使能复位控制
- 关闭总线时钟
- 关闭模块时钟
- 关闭控制器时钟