Edit online

CMU 配置

4 Dec 2024
Read time: 1 minute(s)

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

Luban-Lite 中,需在板级初始化和模块驱动初始化时配置系统时钟。CMU 模块配置包括以下几个方面:

系统 Clock 配置

在板级初始化阶段,时钟配置主要涉及系统时钟和部分模块时钟,可选择以下任意一种方式进行配置:

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

  • 通过修改源文件中的参数,源文件路径为 luban-lite\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);
        }
    
    }

模块 Clock 配置

部分模块的时钟配置是在模块驱动初始化过程中进行的。例如,在 PWM 模块的初始化阶段,时钟配置代码如下:
int hal_pwm_init(void)
{
    // 设置时钟频率
    hal_clk_set_freq(CLK_PWM, PWM_CLK_RATE);

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

模块 Reset 配置

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

  • 和时钟一起操作,使能时钟的同时放开复位。例如:
    // 使能时钟 & 放开复位
    hal_clk_enable_deassertrst(CLK_PWM);
  • 单独操作,独立的放开复位。例如:
    // 放开复位
    hal_reset_deassert(RESET_PWM);