驱动配置
因为CMU是每个系统的必须模块,CMU驱动默认回被编译进系统,所以不需要在 scons --menuconfig
菜单中进行使能
系统Clock配置
Luban-Lite 中时钟配置的位置有两处:一处在扳级初始化,一处在模块驱动初始化。
扳级初始化时配置的时钟是一些系统时钟和部分模块时钟,可以通过两种方式对这部分时钟进行配置
- 通过 scons --menuconfig 菜单进行配置
scons --menuconfig
Board options --->
Clocks options --->
1
2
3
2
3
- 通过修改源文件
具体的配置路径在 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);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
模块Clock配置
部分模块把时钟配置放在驱动初始化中。例如:
int hal_pwm_init(void)
{
// 设置时钟频率
hal_clk_set_freq(CLK_PWM, PWM_CLK_RATE);
// 使能时钟
hal_clk_enable(CLK_PWM);
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
模块 Reset 配置
模块放开复位一般在驱动初始化中操作,复位配置有两种方式:
- 和时钟一起操作,使能时钟的同时放开复位。例如:
// 使能时钟 & 放开复位
hal_clk_enable_deassertrst(CLK_PWM);
1
2
2
- 单独操作,独立的放开复位。例如:
// 放开复位
hal_reset_deassert(RESET_PWM);
1
2
2