API GUIDE / CPM / LL
G32S10 CPM LL 接口
LL 层接口:CPM HAL/LL 访问两个硬件寄存器块,基地址由 base.h 提供:
1. 资源模型与公开类型
1.1 基地址与寄存器实例
CPM HAL/LL 访问两个硬件寄存器块,基地址由 base.h 提供:
#define CPM_IOBASE 0x10000000 #define AON_IOBASE 0x100CD000
cpm_regs.h 基于这两个基地址定义寄存器实例宏:
#define CPM ((cpm_regs_t *)(uintptr_t)CPM_IOBASE) #define AON ((aon_regs_t *)(uintptr_t)AON_IOBASE)
其中 CPM 覆盖主 CPM 寄存器、PLL、CPCCR/CPCCR1 和各类 CDR;AON 覆盖 ROSC、LP/RT clock、AON gate 和 AON I2S CDR 等低功耗域寄存器。
2. LL 接口
2.1 寄存器实例
cpm_regs.h 定义两个寄存器结构体和实例宏:
typedef struct {
__IO uint32_t cpccr;
...
} cpm_regs_t;
typedef struct {
__IO uint32_t roscc;
...
} aon_regs_t;
#define CPM ((cpm_regs_t *)(uintptr_t)CPM_IOBASE)
#define AON ((aon_regs_t *)(uintptr_t)AON_IOBASE)LL 接口直接读写 CPM->xxx 和 AON->xxx 成员,位域更新使用 im_field_read_32() / im_field_write_32()。
2.2 ll_cpm.h
ll_cpm.h 覆盖 CPM 主寄存器和通用硬件控制字段,主要分组如下:
| 分组 | 典型接口 | 说明 |
|---|---|---|
| CPCCR source/divider/update | ll_cpm_get_sclk_a_source()、ll_cpm_set_cpu_source()、ll_cpm_set_cpu_clock_update()、ll_cpm_get_cclk_divider() | 主时钟 source、divider 和 CE 更新位。 |
| CPPCR bypass/status | ll_cpm_is_apll_bypass_set()、ll_cpm_clear_mpll_bypass()、ll_cpm_get_pllst() | PLL bypass、DAC power-down 和稳定时间字段。 |
| PLL control | ll_cpm_pll_get_feedback_divider()、ll_cpm_pll_set_output_divider1()、ll_cpm_pll_is_on()、ll_cpm_pll_set_enable() | 对 APLL/MPLL 控制寄存器的通用 M/N/OD/status 访问。 |
| CPCCR1 | ll_cpm_get_v0_source()、ll_cpm_set_hm_pm_source()、ll_cpm_get_pmclk_divider() | V0/HM/PM clock source、divider 和 update 位。 |
| USB/OSC/interrupt | ll_cpm_get_usbpcr()、ll_cpm_set_osc_drive_strength()、ll_cpm_read_and_clear_intr() | CPM 内部 USB、OSC 和中断相关寄存器。 |
| Priority/arbiter | ll_cpm_set_mprio0_ch0_priority()、ll_cpm_set_h0_arb_regulator() | 总线优先级和仲裁调节字段。 |
| CPCSR status | ll_cpm_is_cdiv_busy()、ll_cpm_is_src_mux_stable() | 分频 busy 和 mux stable 状态。 |
| MAC/PHY | ll_cpm_get_macphyc()、ll_cpm_set_mac_soft_reset()、ll_cpm_get_mac_speed() | MAC PHY、PTP 和 reset 状态控制。 |
2.3 ll_cdr.h
ll_cdr.h 覆盖 CPM CDR 寄存器和 I2S 分频寄存器。
通用 CDR helper:
| 接口 | 说明 |
|---|---|
ll_cpm_cdr_get_value() / ll_cpm_cdr_set_value() | 整寄存器读写。 |
ll_cpm_cdr_get_divider() / ll_cpm_cdr_set_divider() | 读写通用 divider 字段。 |
ll_cpm_cdr_is_stop_set() / ll_cpm_cdr_set_stop() / ll_cpm_cdr_clear_stop() | 读写 STOP 位。 |
ll_cpm_cdr_is_busy() | 查询 BUSY 位。 |
ll_cpm_cdr_set_ce() / ll_cpm_cdr_clear_ce() | 触发并清除 CDR 更新位。 |
ll_cpm_cdr_get_source() / ll_cpm_cdr_set_source() | 读写通用 source 字段。 |
专用 CDR helper:
| 寄存器/模块 | 典型接口 | 说明 |
|---|---|---|
| UARTCDR | ll_cpm_get_uart_source()、ll_cpm_enable_uart_exclk() | UART source 和外部时钟输入控制。 |
| SFCCDR | ll_cpm_get_sfc_device_clock() | SFC device clock 字段。 |
| LPCDR | ll_cpm_select_lcd_pixel_clock_inverted() | LCD pixel clock polarity。 |
| MSC0/MSC1 CDR | ll_cpm_msc0cdr_set_divider()、ll_cpm_msc1cdr_set_source()、ll_cpm_enable_msc_exclk() | MSC divider、phase、tuning、source 和 EXCLK。 |
| CAN0/CAN1 CDR | ll_cpm_enable_can0_exclk()、ll_cpm_disable_can1_exclk() | CAN EXCLK 控制。 |
| SADC0/SADC1 CDR | ll_cpm_enable_sadc0_exclk()、ll_cpm_disable_sadc1_exclk() | SADC EXCLK 控制。 |
| I2S TX/RX | ll_cpm_i2stcdr_set_m()、ll_cpm_i2srcdr_set_n()、ll_cpm_i2stcdr_enable() | I2S M/N 分频、source 和 enable。 |
| I2S TX/RX D path | ll_cpm_i2stcdr1_set_d()、ll_cpm_i2srcdr1_enable_manual_d() | I2S D 分频相关字段。 |
2.4 ll_aon.h
ll_aon.h 覆盖 AON 寄存器中与 CPM clock/gate 和低功耗相关的字段。
| 分组 | 典型接口 | 说明 |
|---|---|---|
| ROSCC | ll_aon_get_lpclk_source() / ll_aon_set_lpclk_source()、ll_aon_get_rtclk_source() / ll_aon_set_rtclk_source()、ll_aon_get_rosc2_fsel() / ll_aon_set_rosc2_fsel()、ll_aon_get_rosc2_trim() / ll_aon_set_rosc2_trim() | LPCLK/RTCLK source 和 ROSC2 频率档位、trim 值。 |
| TRIMC | ll_aon_clear_trim_count()、ll_aon_enable_trim_count()、ll_aon_disable_trim_count() | ROSC2 trim 计数清除和启停;TRIM_COUNT_CLR、TRIM_COUNT_EN 为 write-only 控制位。 |
| TRIMS | ll_aon_is_trim_finished()、ll_aon_get_trim_count_number() | 读数完成状态和 TRIM_COUNT_NUM 计数值。 |
| MEMCL | ll_aon_set_bus_mode()、ll_aon_enter_v0_retention() | AON bus、retention 和 RAM power-down 控制。 |
| SLPCL/RSTCL | ll_aon_request_light_sleep()、ll_aon_rstcl_assert_reset() | AON sleep/reset 控制寄存器。 |
| CLKGR | ll_aon_lpclkgr_clear_stop_mask()、ll_aon_hpclkgr0_set_stop_mask()、ll_aon_hpclkgr1_is_stop_mask_set() | LP/HP gate stop bit 控制。 |
| AON I2S CDR | ll_aon_i2stcdr_set_source()、ll_aon_i2srcdr_enable() | AON 侧 I2S source、M/N 和 enable;source 位在 I2STCDR 中,TX/RX 共用。 |
| SWC/FLAG/CHIPID | ll_aon_get_swc2()、ll_aon_get_flag()、ll_aon_get_chipid() | AON 软件寄存器、flag 和 chip id。 |
2.5 ll_pm.h
ll_pm.h 覆盖 CPM 低功耗和电源管理寄存器。
| 分组 | 典型接口 | 说明 |
|---|---|---|
| LPCR | ll_cpm_set_sleep_instruction_mode()、ll_cpm_set_cpu_power_on_delay_count()、ll_cpm_enable_tnpu_power_down() | SLEEP 指令模式、CPU power-on delay 和 TNPU power-down。 |
| PSWCST0/1 | ll_cpm_set_power_switch_chain0_start_time()、ll_cpm_set_power_switch_chain2_start_time() | power switch chain 时序。 |
| OPCR | ll_cpm_set_ahb_async_bridge_mode()、ll_cpm_enable_idle_clock_stop()、ll_cpm_disable_exclk_in_sleep() | oscillator、idle、interrupt mask 和低功耗请求控制。 |
| PSWCST status | ll_cpm_get_pswcst0() | power switch 状态读取。 |