Edit online

设计说明

3 Mar 2025
Read time: 2 minute(s)

源码说明

CMU 相关 .c.h 文件分别位于 luban-lite\bsp\artinchip\hal\cmuluban-lite\bsp\artinchip\include\hal 目录。主要源文件说明如下:

文件

说明

aic_clk_id.h

时钟 ID 以及 寄存器设置

aic_hal_clk.h

hal 层 clk api 的头文件

aic_hal_clk.c

hal 层 clk api 的实现

aic_hal_reset.h

hal 层 reset api 的头文件

aic_hal_reset.c

hal 层 reset api 的实现

aic_hal_pll_clk.c

PLL 时钟的具体实现

aic_hal_fixed_rate_clk.c

固定频率时钟的具体实现

aic_hal_fixed_parent_clk.c

单个父时钟的时钟的具体实现

aic_hal_multi_parent_clk.c

多个父时钟的时钟的具体实现

aic_hal_disp_clk.c

DISP 时钟的具体实现

aic_hal_fpga_clk_def_v10.c

CMU V1.0 的 Clock 配置

aic_hal_fpga_clk_def_v11.c

CMU V1.1 的 Clock 配置

aic_hal_fpga_clk_def_v12.c

CMU V1.2 的 Clock 配置

aic_hal_reset_def_v10.c

CMU V1.0 的 Reset 配置

aic_hal_reset_def_v11.c

CMU V1.1 的 Reset 配置

aic_hal_reset_def_v12.c

CMU V1.2 的 Reset 配置

Clock 和 Reset 类型


sw_system10

CMU 驱动的逻辑相对简单,目前只在 HAL 层提供了 Clock 和 Reset 的 API 接口。RTOS 驱动和 Baremetal 驱动都可以直接使用。
注: 相对时钟树来说,仅终端模块才有 Reset 控制的需求。在下列时钟树中,仅 fixed parent clock 同时拥有 Reset 功能。

时钟树


clock_tree

1. 时钟树
CMU 驱动将时钟树中的时钟分为五种类型,每种类型的时钟具有不同的特性和功能:
  • Fixed rate clock:具有固定的输出频率,通常用于驱动一些不需要动态调整频率的外设。时钟频率固定,不能调节频率,不能打开或关闭。固定频率时钟包括 OSC24M、RC1M 和 OSC32K。

  • Fixed parent module clock:从另一个时钟信号派生出来的时钟,其输出频率与父时钟信号的频率相同。该类型时钟可以实现只有一个父时钟源的时钟驱动,主要用于各个外设模块的时钟驱动。该类型时钟可以改变时钟频率,打开或关闭时钟,获取父时钟源参数,但不能设置或改变父时钟源。

  • Multiple parent module clock:可以从多个父时钟源中选择其中一个作为其输入,并根据需要调整输出频率。 该类型时钟可以实现有多个父时钟源的时钟驱动,主要用于各种总线时钟驱动,可以打开或关闭时钟,调节频率,获取或改变父时钟源。

  • Display module clock: 实现了几个与显示模块相关的时钟驱动,除了自身的模块时钟外,显示模块还有一个像素时钟,相应的底层寄存器的设计也不同,所以显示相关的几个时钟重新设计了底层驱动。

  • PLL clock:实现了 CMU 的 PLL 时钟驱动。PLL 是一种能够产生高频时钟信号的电路。PLL 可以将一个低频率的参考时钟信号乘以一个整数倍的频率因子,从而得到一个高频率的时钟信号。

下列表格列出了各种时钟分类对应的时钟树:

类型

时钟

Fixed rate clock

OSC24M

OSC32K

RC1M

Fixed parent clock

CLK_DMA

CLK_CE

CLK_USBD

CLK_USBH0-1

CLK_USB_PHY0-1

CLK_GMAC0-1

CLK_SPI0-1

CLK_SDMMC0-2

CLK_SYSCON

CLK_RTC

CLK_I2S0-1

CLK_ADDA

CLK_DE

CLK_GE

CLK_VE

CLK_WDOG

CLK_SID

CLK_GTC

CLK_GPIO

CLK_UART0-7

CLK_I2C0-3

CLK_CAN0-1

CLK_PWM

CLK_ADCIM

CLK_GPADC

CLK_RTP

CLK_TSEN

CLK_CIR

CLK_RGB

CLK_LVDS

CLK_MIPIDSI

Multi parent clock

CLK_CPU

CLK_AHB0

CLK_APB0

CLK_APB1

CLK_AXI0

CLK_OUT0

CLK_OUT1

CLK_OUT2

CLK_OUT3

PLL clock

CLK_PLL_INT0

CLK_PLL_INT1

CLK_PLL_FRA0

CLK_PLL_FRA1

CLK_PLL_FRA2

Disp clock

CLK_PIX

CLK_SCLK