跳转至

PM Clock

PM Clock 管理 WS63 的时钟系统,提供两个核心功能:时钟门控(Clock Gating)和时钟源/分频配置。

时钟门控可独立开关各外设模块的时钟,实现精细化的功耗管理;CRG 配置可设置时钟源选择(PLL/XTAL/RC)和分频系数。时钟树结构为:时钟源 → CRG(源选择+分频)→ 门控(开关)→ 外设模块。

头文件清单

#include "include/driver/pm_clock.h"

接口清单

接口名称 功能简述
uapi_clock_crg_config 配置公共CRG时钟
uapi_clock_crg_get_freq 获取公共CRG时钟模块频率
uapi_clock_clken_config 配置时钟门控
uapi_clock_clksel_config 配置时钟选择器
uapi_clock_clkdiv_config 配置时钟分频系数
uapi_clock_get_clkdiv 获取时钟分频系数
uapi_clock_control 时钟控制

Functions

uapi_clock_crg_config

errcode_t uapi_clock_crg_config(clock_crg_id_t id, clock_clk_src_t clk_src, uint8_t clk_div)

头文件清单

#include "include/driver/pm_clock.h"

功能说明

  • 配置公共CRG(Clock and Reset Generator)时钟模块的时钟源和分频系数
  • 通过指定时钟模块ID、时钟源和分频系数,完成对应外设时钟的配置
  • 需启用 CONFIG_PM_SUPPORT_CLOCK_CRG_API 宏后该接口才可用

前置条件

  • 系统已启动,时钟框架已初始化
  • CONFIG_PM_SUPPORT_CLOCK_CRG_API 宏已开启(值为1)

入参

名称 参数类型 详细说明 约束取值范围
id clock_crg_id_t 公共CRG时钟模块ID 由 pm_clock_porting.h 定义的有效时钟模块ID
clk_src clock_clk_src_t 时钟源选择 由 pm_clock_porting.h 定义的有效时钟源枚举值
clk_div uint8_t 时钟分频系数 由芯片规格定义的有效分频值

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x0) 执行成功 时钟配置成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_PM_SUPPORT_CLOCK_CRG_API 功能宏 支持CRG时钟配置接口功能 y

uapi_clock_crg_get_freq

uint32_t uapi_clock_crg_get_freq(clock_crg_id_t id)

头文件清单

#include "include/driver/pm_clock.h"

功能说明

  • 获取指定公共CRG时钟模块的当前频率
  • 通过时钟模块ID查询对应外设时钟的工作频率
  • 需启用 CONFIG_PM_SUPPORT_CLOCK_CRG_API 宏后该接口才可用

前置条件

  • 系统已启动,时钟框架已初始化
  • CONFIG_PM_SUPPORT_CLOCK_CRG_API 宏已开启(值为1)

入参

名称 参数类型 详细说明 约束取值范围
id clock_crg_id_t 公共CRG时钟模块ID 由 pm_clock_porting.h 定义的有效时钟模块ID

返回值

  • 返回类型:uint32_t
返回值 文字含义 触发场景
非零值 时钟频率(单位:Hz) 查询成功
0 无效或未配置 时钟模块ID无效或时钟未配置

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_PM_SUPPORT_CLOCK_CRG_API 功能宏 支持CRG时钟配置接口功能 y

uapi_clock_clken_config

void uapi_clock_clken_config(clock_clken_id_t id, bool clk_en)

头文件清单

#include "include/driver/pm_clock.h"

功能说明

  • 配置时钟门控(Clock Gating),开启或关闭指定时钟
  • 通过时钟门控ID和使能标志控制对应外设时钟的开关状态
  • clk_en 为 true 时开启时钟,为 false 时关闭时钟

前置条件

  • 系统已启动,时钟框架已初始化

入参

名称 参数类型 详细说明 约束取值范围
id clock_clken_id_t 时钟门控ID 由 pm_clock_porting.h 定义的有效时钟门控ID
clk_en bool 时钟使能标志 true:开启时钟;false:关闭时钟

uapi_clock_clksel_config

void uapi_clock_clksel_config(clock_clksel_id_t id, uint8_t clk_sel)

头文件清单

#include "include/driver/pm_clock.h"

功能说明

  • 配置时钟选择器(Clock Selector),选择指定时钟的来源
  • 通过时钟选择器ID和配置值选择对应外设时钟的时钟源
  • 配置值与芯片时钟源映射关系由 pm_clock_porting.h 定义

前置条件

  • 系统已启动,时钟框架已初始化

入参

名称 参数类型 详细说明 约束取值范围
id clock_clksel_id_t 时钟选择器ID 由 pm_clock_porting.h 定义的有效时钟选择器ID
clk_sel uint8_t 时钟选择器配置值 由 pm_clock_porting.h 定义的有效时钟源选择值

uapi_clock_clkdiv_config

void uapi_clock_clkdiv_config(clock_clkdiv_id_t id, uint8_t clk_div)

头文件清单

#include "include/driver/pm_clock.h"

功能说明

  • 配置时钟分频器(Clock Divider),设置指定时钟的分频系数
  • 通过时钟分频器ID和分频系数完成对应外设时钟的分频配置
  • 分频系数与实际输出频率的对应关系由芯片规格定义

前置条件

  • 系统已启动,时钟框架已初始化

入参

名称 参数类型 详细说明 约束取值范围
id clock_clkdiv_id_t 时钟分频器ID 由 pm_clock_porting.h 定义的有效时钟分频器ID
clk_div uint8_t 时钟频率分频系数 由芯片规格定义的有效分频值

uapi_clock_get_clkdiv

uint8_t uapi_clock_get_clkdiv(clock_clkdiv_id_t id)

头文件清单

#include "include/driver/pm_clock.h"

功能说明

  • 获取指定时钟分频器的当前分频系数
  • 通过时钟分频器ID查询对应分频器的配置值
  • 返回值为当前分频系数,与 uapi_clock_clkdiv_config 设置的分频系数对应

前置条件

  • 系统已启动,时钟框架已初始化

入参

名称 参数类型 详细说明 约束取值范围
id clock_clkdiv_id_t 时钟分频器ID 由 pm_clock_porting.h 定义的有效时钟分频器ID

返回值

  • 返回类型:uint8_t
返回值 文字含义 触发场景
非零值 当前分频系数 查询成功
0 无效或未配置 分频器ID无效或分频器未配置

uapi_clock_control

errcode_t uapi_clock_control(clock_control_type_t type, uint8_t param)

头文件清单

#include "include/driver/pm_clock.h"

功能说明

  • 时钟控制通用接口,根据控制类型和参数执行对应的时钟控制操作
  • 通过控制类型和参数的组合,支持多种时钟控制场景
  • 控制类型与参数的对应关系由 pm_clock_porting.h 定义

前置条件

  • 系统已启动,时钟框架已初始化

入参

名称 参数类型 详细说明 约束取值范围
type clock_control_type_t 时钟控制类型 由 pm_clock_porting.h 定义的有效控制类型枚举值
param uint8_t 时钟控制参数 由控制类型定义的有效参数值

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x0) 执行成功 时钟控制操作成功
Other 其他错误码,参考errcode_t 执行失败