General Power Controller (GPC) 模块技术文档
1. GPC 模块简介
1.1 模块功能
GPC(General Power Controller)模块是用于 i.MX8M Plus 应用处理器 的电源管理组件,支持以下功能:
- 管理 ARM Cortex-A53 和 Cortex-M7 平台的低功耗模式(WAIT/STOP/DSM)。
- 提供电源域的灵活控制机制。
- 与其他模块(如时钟控制模块 CCM 和系统复位控制器 SRC)交互,实现电源和时钟的精细化管理。
1.2 支持的低功耗模式
GPC 提供以下低功耗模式:
- WAIT 模式:部分资源保持激活以便快速恢复。
- STOP 模式:更多资源关闭以降低功耗。
- 深度睡眠模式 (DSM):进一步降低功耗,通过外部中断或特定信号唤醒。
1.3 模块组成
- 系统模式控制器 (SMC):负责低功耗模式和深度睡眠模式的切换。
- 时隙控制器 (PGTSC):通过时隙管理子系统的电源开关。
2. 使用场景示例:低功耗模式下的电源管理
2.1 场景描述
在嵌入式系统中,当 Cortex-A53 平台处于空闲状态时,希望将其进入 STOP 模式,通过外部中断唤醒以降低功耗。
2.2 GPC 工作流程
- 配置低功耗模式:
- 将 Cortex-A53 平台设置为 STOP 模式。
- 根据需求关闭核心时钟、电源域或保留部分资源(如 L2 缓存)。
- 定义唤醒条件:
- 配置外部中断作为唤醒源。
- 设置中断屏蔽寄存器,仅允许特定中断触发唤醒。
- 进入低功耗模式:
- 通过
WFI
(Wait For Interrupt)指令触发。 - 核心进入低功耗状态,GPC 根据配置管理电源和时钟。
- 通过
- 唤醒处理:
- 外部中断到来时,GPC 恢复核心电源和时钟。
- Cortex-A53 核心恢复正常运行模式。
2.3 示例代码(伪代码)
以下伪代码展示如何通过 GPC 实现上述场景。
// 假设 GPC 寄存器基地址为 GPC_BASE
#define GPC_BASE 0x303A0000
#define GPC_LPCR_A53_BSC (GPC_BASE + 0x0) // 基本低功耗控制寄存器
#define GPC_LPCR_A53_AD (GPC_BASE + 0x4) // 高级低功耗控制寄存器
#define GPC_SLPCR (GPC_BASE + 0x14) // 系统低功耗控制寄存器
#define GPC_IMR1_CORE0_A53 (GPC_BASE + 0x30) // 中断屏蔽寄存器
#define GPC_PGC_ACK_SEL_A53 (GPC_BASE + 0x24) // A53 平台的电源确认信号选择
void configure_gpc_for_low_power_mode() {
// 1. 配置低功耗模式为 STOP 模式
reg32_write(GPC_LPCR_A53_BSC, 0x0000000A); // [3:0]=STOP模式,[14]=时钟关闭
// 2. 设置外部中断唤醒条件
reg32_write(GPC_IMR1_CORE0_A53, 0xFF7FFFFF); // 屏蔽除指定中断(如 GPT1 中断)外的所有中断
// 3. 配置系统低功耗模式
reg32_write(GPC_SLPCR, 0xE000FFA7); // [31]=启用深度睡眠模式 (DSM)
// [30]=启用电压旁路
// [2]=启用 PMIC 待机
// 4. 配置 A53 核心电源管理
reg32_write(GPC_LPCR_A53_AD, 0x0A0A0A1A); // [16]=启用 ALL_OFF 模式
// [19]/[17]/[3]/[1]=核心电源关闭
// 5. 设置电源域的确认信号
reg32_write(GPC_PGC_ACK_SEL_A53, 0x00010004); // 核心 0 的 PGC 确认信号
}
void enter_low_power_mode() {
// 1. 触发 WFI 指令,进入低功耗状态
__asm__("WFI"); // 汇编指令,等待中断
}
void main() {
// 初始化低功耗配置
configure_gpc_for_low_power_mode();
// 模拟主循环
while (1) {
if (is_system_idle()) { // 判断系统是否空闲
enter_low_power_mode(); // 进入低功耗模式
}
// 处理唤醒后的逻辑
handle_interrupts();
}
}
2.4 示例说明
- 关键配置:
- 设置
GPC_LPCR_A53_BSC
为 STOP 模式,关闭时钟以节能。 GPC_IMR1_CORE0_A53
配置屏蔽无关中断,只允许 GPT 定时器中断触发唤醒。
- 设置
- 代码逻辑:
configure_gpc_for_low_power_mode
函数负责完成低功耗配置。- 主循环中检测系统是否空闲,空闲时进入低功耗模式。
- 扩展应用:
- 可扩展到多核电源管理、动态调整外设电源状态等场景。
3. 总结
通过 GPC 模块,i.MX8M Plus 平台能够实现灵活的低功耗管理。结合实际应用场景,可根据需求调整配置以优化功耗和性能。