Edit online

功能描述

3 Mar 2025
Read time: 9 minute(s)

PLL

模拟电路 PLL 用于产生时钟供给整个芯片。

下表列出了各个 PLL 的用途及特性。
注: 为保证 PLL 性能要求,PLL_VCO = 24 MHz ÷ (P + 1) × (N + 1) 频率建议在 720 MHz~1584 MHz 之间。
1. CMU PLL 用途及特性

名称

用途

典型频率

展频

PLL_INT0

CPU

480 MHz

不支持

PLL_INT1

AXI/ AHB/ APB/ CE/ DE/ GE/ VE/ DVP/ PWMCS/ TA_IF/ EDAT_IF/ BIS_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 = 24 MHz × (N + 1 + F÷0x1FFFF)/(P+1)/(M+1)。其中,F 为 FRA_IN 小数分频系数,当不使用小数分频时,F=0,频率计算公式简化为:PLL_OUT = 24 MHz × (N + 1)/(P + 1) ÷(M+1)



1. CMU PLL 内部框图

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 (33 KHz)
  • 展频模式:寄存器为 PLL_FRAn_SDM.SDM_MODE,建议设置为 2 (三角波)
展频配置公式如下:
  • 根据展频幅度需求,求得 SDM_BOT = 0x1FFFF − SDM_AMP*0x1FFFF × (P+1) / 24 MHz
  • 根据展频频率需求,求得 STEP_NUM = 24 MHz ÷ (P + 1) ÷ (SDM_FREQ ÷ 2) = 24000000 ÷ (P+1) ÷ (33000/2)
  • 根据展频幅度和展频步数,求得 SDM_STEP = (0x1FFFF− SDM_BOT) ÷ STEP_NUM
注:
  • PLL_FRAn_SDM.SDM_STEP 设置值需要和展频幅度和展频频率匹配,以产生正常的展频波形
  • 当 P=0 时,最大展频幅度为 24 MHz,如果 N=32,则 PLL 频率为 792 MHz,展频深度为 24/792 ≈ 3.0%
  • 当 P=1 时,最大展频幅度为 12 MHz,如果 N=65,则 PLL 频率为 792 MHz,展频深度为 12/792 ≈ 1.5%

CLKOUT

时钟输出用于输出时钟给芯片外设使用, 总共四路 CLKOUT,可选来源为 PLL_INT1/PLL_FRA2,可配置 1~256 除频, CLKOUT 通路如下图所示。



2. 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 时钟源。


3. 时钟源选择

模块时钟

模块名称

总线时钟

模块时钟源

模块时钟极限频率

备注

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

26 MHz

-

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

-

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

-

EDAT-IF

APB0

PLL_INT1

240 MHz

-

BIS_IF

APB0

PLL_INT1

240 MHz

-

SDFM

APB0

PLL_INT1

240 MHz

-

LCD

APB0

PLL_FRA2

400 MHz

DISP_PIXCLK:200MHz

LVDS

APB0

PLL_FRA2

1000 MHz

DISP_PIXCLK: 200 MHz

DSI

APB0

PLL_FRA2

1200 MHz

DISP_PIXCLK: 200 MHz

DVP

APB0

PLL_INT1

200 MHz

-

DE

APB0

PLL_INT1

200 MHz

DISP_PIXCLK: 200 MHz

GE

APB0

PLL_INT1

200 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

-

RTC

APB1

XTAL_32K

1 MHz

-

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 下波特率精度

2. UART 波特率与误差率

设定波特率

实际波特率

波特率偏差

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(模块总线时钟开关):控制模块的所有总线时钟,包括 AX、AHB 和 APB,如果模块使用到多个总线,由于只有一个控制位,该控制位同时控制多个总线时钟。
  • MOD_CLK_EN(模块时钟开关): 控制除了总线时钟以外的模块时钟,如果模块用到多个时钟,由于只有一个控制位,该控制位同时控制多个模块时钟。
模块开启和关闭具有一定的时序要求,其中 SP_USBD 时序要求较为特殊,其它模块统一开关时序,具体描述如下:
3. 模块开关时序描述

模块

打开时序

关闭时序

USB_DEV

  • 打开控制器时钟
  • 打开模拟 PHY 时钟
  • 延迟 100 微秒
  • 放开模拟 PHY 复位
  • 放开控制器复位
  • 使能控制器复位
  • 使能模拟 PHY 复位
  • 关闭模拟 PHY 时钟
  • 关闭控制器时钟

其它模块

  • 打开模块时钟
  • 打开总线时钟
  • 放开复位控制
  • 使能复位控制
  • 关闭总线时钟
  • 关闭模块时钟
  • 关闭控制器时钟