新唐芯片学习笔记——系统初始化
系统初始化分为5个步骤:
1:给保护寄存器保护功能解锁
2:使能系统时钟
3:使能各个IP时钟
4:初始化串口复用功能
5:给保护寄存器保护功能上锁
#define PLL_CLOCK 50000000
void SYS_Init(void)
{
SYS_UnlockReg();
CLK_EnableXtalRC(CLK_PWRCON_OSC22M_EN_Msk);
CLK_WaitClockReady(CLK_CLKSTATUS_OSC22M_STB_Msk);
CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC,CLK_CLKDIV_HCLK(1));
CLK_EnableXtalRC(CLK_PWRCON_XTL12M_EN_Msk);
CLK_EnablePLL(CLK_PLLCON_PLL_SRC_HXT, CLK_PLLCON_50MHz_HXT );
CLK_WaitClockReady(CLK_CLKSTATUS_XTL12M_STB_Msk | CLK_CLKSTATUS_PLL_STB_Msk | CLK_CLKSTATUS_IRC10K_STB_Msk);
CLK_EnableModuleClock(UART0_MODULE);
CLK_SetModuleClock(UART0_MODULE,CLK_CLKSEL1_UART_S_HXT,CLK_CLKDIV_UART(1));
CLK_EnableModuleClock(PWM45_MODULE);
CLK_SetModuleClock(PWM45_MODULE,CLK_CLKSEL2_PWM45_S_HXT,NULL);
CLK_EnableModuleClock(PWM67_MODULE);
CLK_SetModuleClock(PWM67_MODULE,CLK_CLKSEL2_PWM67_S_HXT,NULL);
SystemCoreClockUpdate();
SYS->P3_MFP &= ~(SYS_MFP_P30_Msk | SYS_MFP_P31_Msk);
SYS->P3_MFP |= (SYS_MFP_P30_RXD0 | SYS_MFP_P31_TXD0);
SYS_LockReg();
}
补充:
新唐的芯片一般有3种软件复位方式:CPU reset、Chip reset和System reset
CPU reset: 就是将 CPU 执行指针 PC 直接指到 0 的地方重新执行程序,其它外设都不复位
Chip reset: 就是整个芯片复位,类似于 POR(power on reset)上电复位的方式,让程序重新执行
System reset:类似于 Chip reset,除了不复位晶振电路和 Config Area 的值不会重新加载,其
它的电路都会被复位