时钟与复位
1. 时钟系统
1.1 时钟树架构
| ┌─────────────┐
CLK_IN (25MHz) ──►│ PLL │──► CLK_CPU (500MHz)
└─────────────┘──► CLK_AXI (500MHz)
│
▼
┌─────────────┐
│ 分频器 /4 │──► CLK_APB (125MHz)
└─────────────┘
│
▼
┌─────────────┐
│ 分频器 /N │──► CLK_UART (115.2kHz)
└─────────────┘
|
1.2 时钟域
| 时钟域 | 时钟 | 频率 | 包含模块 |
| CPU 域 | clk_cpu | 500MHz | CPU Core, L1/L2 Cache |
| AXI 域 | clk_axi | 500MHz | AXI Interconnect, DDR Controller |
| APB 域 | clk_apb | 125MHz | UART, GPIO, Timer, SPI, I2C |
| 低速域 | clk_slow | 32kHz | Watchdog, RTC |
1.3 时钟门控
每个模块支持独立时钟门控:
| 模块 | 门控信号 | 描述 |
| CPU | cg_cpu | CPU 时钟门控 |
| Cache | cg_cache | 缓存时钟门控 |
| AXI | cg_axi | AXI 总线时钟门控 |
| UART | cg_uart | UART 时钟门控 |
| GPIO | cg_gpio | GPIO 时钟门控 |
| Timer | cg_timer | 定时器时钟门控 |
2. 复位系统
2.1 复位类型
| 类型 | 信号 | 描述 |
| 全局复位 | rst_n | 系统上电复位,低有效 |
| 模块复位 | mod_rst_n | 单个模块复位 |
| 软件复位 | sw_rst | 通过寄存器触发 |
| 看门狗复位 | wdt_rst | 看门狗超时复位 |
2.2 复位序列
| 时间轴:
│
├─ rst_n asserted (外部复位)
│
├─ PLL 启动
│
├─ PLL 锁定 (PLL_LOCK = 1)
│
├─ 释放全局复位 (rst_n = 1)
│
├─ CPU 从 0x0000_0000 开始执行
│
├─ Boot ROM 初始化
│
└─ 系统正常运行
|
2.3 复位域
| 复位域 | 复位信号 | 包含模块 |
| 全局域 | rst_n | 整个芯片 |
| CPU 域 | cpu_rst_n | CPU Core, Cache |
| 外设域 | peri_rst_n | UART, GPIO, Timer |
| 低速域 | slow_rst_n | Watchdog, RTC |
3. 电源管理
3.1 电源模式
| 模式 | 描述 | 功耗 |
| 活跃模式 | 全速运行 | 100mW |
| 空闲模式 | 时钟门控 | 10mW |
| 睡眠模式 | 关闭部分时钟 | 1mW |
| 深度睡眠 | 仅 RTC 运行 | 0.1mW |
3.2 电源切换
stateDiagram-v2
[*] --> 活跃模式
活跃模式 --> 空闲模式: 无任务
空闲模式 --> 活跃模式: 中断唤醒
空闲模式 --> 睡眠模式: 长时间空闲
睡眠模式 --> 活跃模式: 中断唤醒
睡眠模式 --> 深度睡眠: 超时
深度睡眠 --> 活跃模式: RTC 唤醒
4. 时钟/复位寄存器
4.1 时钟控制寄存器
基地址: 0x2000_F000
| 偏移 | 名称 | 读写 | 描述 |
| 0x00 | CLK_CTRL | R/W | 时钟控制 |
| 0x04 | PLL_CTRL | R/W | PLL 控制 |
| 0x08 | PLL_STATUS | R | PLL 状态 |
| 0x0C | CLK_GATE | R/W | 时钟门控 |
| 0x10 | CLK_DIV | R/W | 分频配置 |
4.2 复位控制寄存器
| 偏移 | 名称 | 读写 | 描述 |
| 0x00 | RST_CTRL | R/W | 复位控制 |
| 0x04 | RST_STATUS | R | 复位状态 |
| 0x08 | RST_REQ | R/W | 复位请求 |