功能描述
12 Jun 2024
Read time: 7 minute(s)
PLL
模拟电路 PLL 用于产生时钟供给整个芯片。
下表列出了各个 PLL 的用途及特性。
注: 为保证 PLL 性能要求,PLL_VCO = 24 MHz ÷ (P + 1) ×
(N + 1) 频率建议在 720 MHz~1584 MHz 之间。
名称 | 用途 | 典型频率 | 展频 |
---|---|---|---|
PLL_INT0 | CPU | 396 MHz | 不支持 |
PLL_INT1 | AXI/ AHB/ APB/DE/GE/VE/UART/PWM/I2S/AUDIO | 588 MHz | 不支持 |
PLL_FRA0 | XSPI/ SPI/ SDMC | 384 MHz | 展频 |
PLL_FRA2 | LCD | - | 展频 |
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%
模块时钟
模块名称 | 总线时钟 | 模块时钟源 | 模块时钟极限频率 | 备注 |
---|---|---|---|---|
E907 CORE | - | PLL_INT0 | 396 MHz | - |
E907 CLIC | - | PLL_INT0÷2 | 200 MHz | - |
E907 CLINT | - | PLL_INT0÷2 | 200 MHz | - |
E907 DM | - | CLK_24M | 24 MHz | - |
AXI | AXI | PLL_INT1 | 200 MHz | - |
AHB | AHB | PLL_INT1 | 200 MHz | - |
APB0 | APB0 | PLL_INT1 | 100 MHz | - |
APB1 | APB1 | - | 24 MHz | - |
BROM | AXI | - | - | - |
SRAM | AXI | - | - | - |
AHB Matrix | AHB | - | - | - |
DMA | AHB | - | - | - |
DCE | AHB | - | - | - |
XSPI | AHB | PLL_FRA0 | 400 MHz | - |
SPI0 | AHB | PLL_FRA0 | 100 MHz | - |
SPI1 | AHB | PLL_FRA0 | 100 MHz | - |
SDMC0 | AHB | PLL_FRA0 | 200 MHz | - |
SDMC1 | AHB | PLL_FRA0 | 200 MHz | - |
SYSCFG | APB0 | CLK_24M | 24 MHz | - |
CMU | APB0 | - | - | - |
SPI_ENC | APB0 | HCLK | - | - |
AXICFG | APB0 | - | - | - |
MTOP | APB0 | - | - | - |
AUDIO | APB0 | PLL_INT1 | 26 MHz | - |
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 | - |
LCD | APB0 | PLL_FRA2 | 200 MHz | DISP_PIXCLK: 100 MHz |
DE | APB0 | PLL_INT1 | 100 MHz | DISP_PIXCLK: 100 MHz |
GE | APB0 | PLL_INT1 | 150 MHz | - |
VE | APB0 | PLL_INT1 | 200 MHz | - |
WDOG | APB1 | CLK_32K | 32 KHz | - |
WRI | APB1 | CLK_24M | 24 MHz | - |
SID | APB1 | CLK_24M | 24 MHz | - |
GTC | APB1 | - | - | - |
I2C0 | APB1 | - | - | - |
I2C1 | APB1 | - | - | - |
CAN0 | APB1 | - | - | - |
CAN1 | APB1 | - | - | - |
PWM | APB1 | CLK_24M | 24 MHz | - |
ADCIM | APB1 | CLK_24M | 24 MHz | - |
GPAI | APB1 | - | - | - |
RTP | APB1 | - | - | - |
THS | APB1 | - | - | - |
CIR | APB1 | - | - | - |
UART 在 PLL_INT1=588 MHz 下波特率精度
设定波特率 | 实际波特率 | 波特率偏差 | CMU 除频 | Over sampling | Clock source | UART 除频 |
---|---|---|---|---|---|---|
300 | 300 | 0% | 11 | 16 | 53454545 | 11136 |
600 | 600 | 0% | 11 | 16 | 53454545 | 5568 |
1200 | 1200 | 0% | 11 | 16 | 53454545 | 2784 |
2400 | 2400 | 0% | 11 | 16 | 53454545 | 1392 |
4800 | 4800 | 0% | 11 | 16 | 53454545 | 696 |
9600 | 9600 | 0% | 11 | 16 | 53454545 | 348 |
14400 | 14400 | 0% | 11 | 16 | 53454545 | 232 |
19200 | 19200 | 0% | 11 | 16 | 53454545 | 174 |
38400 | 38401 | 0% | 11 | 16 | 53454545 | 87 |
57600 | 57601 | 0% | 11 | 16 | 53454545 | 58 |
115200 | 115203 | 0% | 11 | 16 | 53454545 | 29 |
230400 | 229687 | -0.31% | 10 | 16 | 58800000 | 16 |
380400 | 382812 | 0.63% | 12 | 16 | 49000000 | 8 |
460800 | 459375 | -0.31% | 10 | 16 | 58800000 | 8 |
921600 | 918750 | -0.31% | 10 | 16 | 58800000 | 4 |
1000000 | 1020833 | 2.08% | 12 | 16 | 49000000 | 3 |
1152000 | 1148437 | -0.31% | 16 | 16 | 36750000 | 2 |
1500000 | 1531250 | 2.08% | 12 | 16 | 49000000 | 2 |
1750000 | 1750000 | 0% | 7 | 16 | 84000000 | 3 |
2000000 | 2041666 | 2.08% | 9 | 16 | 65333333 | 2 |
2450000 | 2450000 | 0% | 15 | 16 | 39200000 | 1 |
2500000 | 2450000 | -2% | 15 | 16 | 39200000 | 1 |
3000000 | 3062500 | 2.08% | 12 | 16 | 49000000 | 1 |
AUDIO 在 PLL_INT1 = 588 MHz 下精度
设定频率 | CMU 除频 | 实际频率 | 频率偏差 |
---|---|---|---|
24.5760 MHz | 16 | 24.5000 MHz | 0.3% |
22.5792 MHz | 17 | 22.6153 MHz | 0.1% |
模块开关控制和时序
模块一般有三个控制位:
- MOD_RSTN(模块复位控制):同时复位模块和模块总线。
- MOD_BUS_EN(模块总线时钟开关):控制模块的所有总线时钟,包括 AXI/AHB/APB,如果模块使用到多个总线,由于只有一个控制位,该控制位同时控制多个总线时钟。
- MOD_CLK_EN(模块时钟开关): 控制除了总线时钟以外的模块时钟,如果模块用到多个时钟,由于只有一个控制位,该控制位同时控制多个模块时钟。
模块开启和关闭具有一定的时序要求,其中 SP_USBD 时序要求较为特殊,其他模块统一开关时序,具体描述如下。
USB_DEV
打开时序:
- 打开控制器时钟
- 打开模拟 PHY 时钟
- 延迟 100 微秒
- 放开模拟 PHY 复位
- 放开控制器复位
关闭时序:
- 使能控制器复位
- 使能模拟 PHY 复位
- 关闭模拟 PHY 时钟
- 关闭控制器时钟
其他模块
打开时序:
- 打开模块时钟
- 打开总线时钟
- 放开复位控制
关闭时序:
- 使能复位控制
- 关闭总线时钟
- 关闭模块时钟
- 关闭控制器时钟