Edit online

功能描述

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

600 MHz @ 1.2V

不支持

PLL_INT1

AXI/AHB/ APB/ CE/ DE/ GE/ VE/ DVP/ PWMCS/ UART

1.2 GHz

不支持

PLL_FRA0

DRAM/ SDMC/ SPI

1008 MHz

展频

PLL_FRA1

I2S/ AUDIO

491.52 MHz

451.584 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_FRA1/ PLL_FRA2,可配置 1~256 除频, CLKOUT 通路如下图所示。



2. CLKOUT 通路

模块时钟

模块名称

总线时钟

模块时钟源

模块时钟极限频率

备注

C906 CORE

-

PLL_INT0

504 MHz

600 MHz@1.2V

AXI

AXI

-

240 MHz

-

AHB

AHB

-

240 MHz

-

APB0

APB0

-

100 MHz

-

APB1

APB1

-

24 MHz

-

AHB Matrix

AHB

-

-

-

BROM

AHB

-

-

-

SRAM

AHB

-

-

-

DMA

AHB

-

-

-

CE

AHB

PLL_INT1

200 MHz

-

USB DEV

AHB

-

-

-

USB HOST0

AHB

-

-

-

USB HOST1

AHB

-

-

-

USB PHY0

-

CLK_24M

-

-

USB PHY1

-

CLK_24M

-

-

GMAC0

AHB

PLL_INT1

50 MHz

-

GMAC1

AHB

PLL_INT1

50 MHz

-

QSPI0

AHB

PLL_FRA0

100 MHz

-

QSPI1

AHB

PLL_FRA0

100 MHz

-

QSPI2

AHB

PLL_FRA0

100 MHz

-

QSPI3

AHB

PLL_FRA0

100 MHz

-

SDMC0

AHB

PLL_FRA0

200 MHz

-

SDMC1

AHB

PLL_FRA0

200 MHz

-

SDMC2

AHB

PLL_FRA0

200 MHz

-

PBUS

AHB

-

-

-

SYSCFG

APB0

CLK_24M

24 MHz

-

CMU

APB0

-

-

-

SPI ENC

APB0

HCLK

-

-

PWMCS

APB0

PLL_INT1

200 MHz

-

PSADC

APB0

-

-

-

DDR CTL

APB0

-

-

-

MTOP

APB0

-

-

-

DDR PHY

APB0

PLL_FRA0

336MHz

-

I2S0

APB0

PLL_FRA1

26MHz

-

I2S1

APB0

PLL_FRA1

26MHz

-

AUDIO

APB0

PLL_FRA1

26MHz

-

LCD

APB0

PLL_FRA2

800 MHz

DISP_PIXCLK:200 MHz

LVDS

APB0

PLL_FRA2

1000 MHz

DISP_PIXCLK:200 MHz

MIPI 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

1MHz

-

GTC

APB1

-

-

-

GPIO

APB1

-

-

-

UART0

APB1

PLL_INT1

60 MHz

-

UART1

APB1

PLL_INT1

60 MHz

-

UART2

APB1

PLL_INT1

60 MHz

-

UART3

APB1

PLL_INT1

60 MHz

-

UART4

APB1

PLL_INT1

60 MHz

-

UART5

APB1

PLL_INT1

60 MHz

-

UART6

APB1

PLL_INT1

60 MHz

-

UART7

APB1

PLL_INT1

60 MHz

-

I2C0

APB1

-

-

-

I2C1

APB1

-

-

-

I2C2

APB1

-

-

-

I2C3

APB1

-

-

-

CAN0

APB1

-

-

-

CAN1

APB1

-

-

-

PWM

APB1

PLL_INT1

100 MHz

-

ADCIM

APB1

CLK_24M

24 MHz

-

GPAI

APB1

-

-

-

RTP

APB1

-

-

-

THS

APB1

-

-

-

CIR

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 时钟
  • 关闭控制器时钟
其它模块
  • 打开模块时钟
  • 打开总线时钟
  • 放开复位控制
  • 使能复位控制
  • 关闭总线时钟
  • 关闭模块时钟
  • 关闭控制器时钟