Mini51如果使用内部的22.1184M和10K晶振,SYS_Init()函数的配置如下:
```c
void SYS_Init(void)
{
// 设置72MHz内部高频振荡器
CLK->PWRCON |= CLK_PWRCON_HIRC_EN_Msk; // 使能内部高频振荡器
CLK->CLKDIV &= ~CLK_CLKDIV_HCLK_N_Msk; // 配置系统时钟为高频振荡器的频率
while (!(CLK->CLKSTATUS & CLK_CLKSTATUS_HIRC_STB_Msk)); // 等待高频振荡器稳定
// 配置系统时钟为内部高频振荡器,并使能内部高频振荡器的频率调整器
CLK->PLLCON &= ~CLK_PLLCON_PLL_SRC_Msk; // 配置系统时钟为内部高频振荡器
CLK->PLLCON &= ~CLK_PLLCON_NR_Msk; // 将内部高频振荡器频率调整器的值设为0
// 设置外部低频振荡器
CLK->PWRCON |= CLK_PWRCON_LIRC_EN_Msk; // 使能内部低频振荡器
CLK->CLKSEL0 &= ~CLK_CLKSEL0_STCLK_S_Msk; // 配置系统时钟为低频振荡器
while (!(CLK->CLKSTATUS & CLK_CLKSTATUS_LIRC_STB_Msk)); // 等待低频振荡器稳定
// 配置外设时钟源为PLL输出的时钟
CLK->CLKSEL0 &= ~CLK_CLKSEL0_UART_S_Msk; // UART时钟源为PLL输出的时钟
CLK->CLKSEL1 &= ~CLK_CLKSEL1_TMR0_S_Msk; // TMR0时钟源为PLL输出的时钟
CLK->CLKSEL1 &= ~CLK_CLKSEL1_TMR1_S_Msk; // TMR1时钟源为PLL输出的时钟
CLK->CLKSEL1 &= ~CLK_CLKSEL1_TMR2_S_Msk; // TMR2时钟源为PLL输出的时钟
CLK->CLKSEL1 &= ~CLK_CLKSEL1_TMR3_S_Msk; // TMR3时钟源为PLL输出的时钟
// 配置时钟分频
CLK->CLKDIV &= ~CLK_CLKDIV_UART_N_Msk; // UART时钟分频为1
CLK->CLKDIV &= ~CLK_CLKDIV_TMR0_N_Msk; // TMR0时钟分频为1
CLK->CLKDIV &= ~CLK_CLKDIV_TMR1_N_Msk; // TMR1时钟分频为1
CLK->CLKDIV &= ~CLK_CLKDIV_TMR2_N_Msk; // TMR2时钟分频为1
CLK->CLKDIV &= ~CLK_CLKDIV_TMR3_N_Msk; // TMR3时钟分频为1
}
```
以上代码将设置为内部高频振荡器22.1184MHz作为系统时钟源,并将其分频为72MHz。同时,将内部低频振荡器10KHz作为系统计时器的时钟源。将各个外设的时钟源设置为PLL输出的时钟,并将时钟分频为1。
Mini51如果使用内部的22.1184M和10K晶振,SYS_Init()函数的配置如下:
```c
void SYS_Init(void)
{
// 设置72MHz内部高频振荡器
CLK->PWRCON |= CLK_PWRCON_HIRC_EN_Msk; // 使能内部高频振荡器
CLK->CLKDIV &= ~CLK_CLKDIV_HCLK_N_Msk; // 配置系统时钟为高频振荡器的频率
while (!(CLK->CLKSTATUS & CLK_CLKSTATUS_HIRC_STB_Msk)); // 等待高频振荡器稳定
// 配置系统时钟为内部高频振荡器,并使能内部高频振荡器的频率调整器
CLK->PLLCON &= ~CLK_PLLCON_PLL_SRC_Msk; // 配置系统时钟为内部高频振荡器
CLK->PLLCON &= ~CLK_PLLCON_NR_Msk; // 将内部高频振荡器频率调整器的值设为0
// 设置外部低频振荡器
CLK->PWRCON |= CLK_PWRCON_LIRC_EN_Msk; // 使能内部低频振荡器
CLK->CLKSEL0 &= ~CLK_CLKSEL0_STCLK_S_Msk; // 配置系统时钟为低频振荡器
while (!(CLK->CLKSTATUS & CLK_CLKSTATUS_LIRC_STB_Msk)); // 等待低频振荡器稳定
// 配置外设时钟源为PLL输出的时钟
CLK->CLKSEL0 &= ~CLK_CLKSEL0_UART_S_Msk; // UART时钟源为PLL输出的时钟
CLK->CLKSEL1 &= ~CLK_CLKSEL1_TMR0_S_Msk; // TMR0时钟源为PLL输出的时钟
CLK->CLKSEL1 &= ~CLK_CLKSEL1_TMR1_S_Msk; // TMR1时钟源为PLL输出的时钟
CLK->CLKSEL1 &= ~CLK_CLKSEL1_TMR2_S_Msk; // TMR2时钟源为PLL输出的时钟
CLK->CLKSEL1 &= ~CLK_CLKSEL1_TMR3_S_Msk; // TMR3时钟源为PLL输出的时钟
// 配置时钟分频
CLK->CLKDIV &= ~CLK_CLKDIV_UART_N_Msk; // UART时钟分频为1
CLK->CLKDIV &= ~CLK_CLKDIV_TMR0_N_Msk; // TMR0时钟分频为1
CLK->CLKDIV &= ~CLK_CLKDIV_TMR1_N_Msk; // TMR1时钟分频为1
CLK->CLKDIV &= ~CLK_CLKDIV_TMR2_N_Msk; // TMR2时钟分频为1
CLK->CLKDIV &= ~CLK_CLKDIV_TMR3_N_Msk; // TMR3时钟分频为1
}
```
以上代码将设置为内部高频振荡器22.1184MHz作为系统时钟源,并将其分频为72MHz。同时,将内部低频振荡器10KHz作为系统计时器的时钟源。将各个外设的时钟源设置为PLL输出的时钟,并将时钟分频为1。
举报