4.1.2. CMU配置

4.1.2.1. 驱动配置

因为 CMU 是每个系统的必需模块,CMU 驱动默认会被编译进系统,所以不需要在 scons --menuconfig 菜单中进行使能。

4.1.2.2. 系统 Clock 配置

ZX-RTT 中时钟配置的位置有两处:一处在板级初始化,一处在模块驱动初始化。

板级初始化时配置的时钟是一些系统时钟和部分模块时钟,可以通过两种方式对这部分时钟进行配置

  • 通过 scons --menuconfig 菜单进行配置

scons --menuconfig
    Board options --->
        Clocks options --->
  • 通过修改源文件

具体的配置路径在 zx-rtt\target\$chip\$board\sys_clk.c。例如:

struct aic_sysclk aic_sysclk_config[] = {
    {1200000000, CLK_PLL_INT1},
    {491520000, CLK_PLL_FRA1},
    {840000000, CLK_PLL_FRA2},
    {240000000, CLK_AXI0},
    {240000000, CLK_AHB0},
    {100000000, CLK_APB0},
    {24000000, CLK_APB1},
    {600000000, CLK_CPU},
    {25000000, CLK_OUT2},
#ifdef AIC_USING_UART0
    {48000000, CLK_UART0},
#endif
}

void aic_board_sysclk_init(void)
{
    uint32_t i = 0;

    // 设置时钟频率
    for (i=0; i<sizeof(aic_sysclk_config)/sizeof(struct aic_sysclk); i++) {
        hal_clk_set_freq(aic_sysclk_config[i].clk_id, aic_sysclk_config[i].freq);
    }

}

4.1.2.3. 模块 Clock 配置

部分模块把时钟配置放在驱动初始化中。例如:

int hal_pwm_init(void)
{
    // 设置时钟频率
    hal_clk_set_freq(CLK_PWM, PWM_CLK_RATE);

    // 使能时钟
    hal_clk_enable(CLK_PWM);
}

4.1.2.4. 模块 Reset 配置

模块放开复位一般在驱动初始化中操作,复位配置有两种方式:

  1. 和时钟一起操作,使能时钟的同时放开复位。例如:

// 使能时钟 & 放开复位
hal_clk_enable_deassertrst(CLK_PWM);
  1. 单独操作,独立的放开复位。例如:

// 放开复位
hal_reset_deassert(RESET_PWM);