新唐芯片学习笔记——系统初始化

新唐芯片学习笔记——系统初始化

系统初始化分为5个步骤:
1:给保护寄存器保护功能解锁
2:使能系统时钟
3:使能各个IP时钟
4:初始化串口复用功能
5:给保护寄存器保护功能上锁
//内核时钟最高可达到50MHz
#define PLL_CLOCK  50000000//50MHz
void SYS_Init(void)
{
	//解除写保护功能
	//芯片中很多寄存器是写保护的,要写这些寄存器需要先解锁
	SYS_UnlockReg();
	
	/*
		初始化系统时钟
	*/
	
	//使能时钟源,内部高速时钟 22.1184 MHz
	CLK_EnableXtalRC(CLK_PWRCON_OSC22M_EN_Msk);
	
	//等待时钟稳定
	CLK_WaitClockReady(CLK_CLKSTATUS_OSC22M_STB_Msk);
	
	//设置HCLK时钟源和HCLK分频
	CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC,CLK_CLKDIV_HCLK(1));
	
	//使能时钟源,外部高速时钟 12 MHz
	CLK_EnableXtalRC(CLK_PWRCON_XTL12M_EN_Msk);

//使能PLL时钟,选择选择外部时钟源,倍频到50MHz
	CLK_EnablePLL(CLK_PLLCON_PLL_SRC_HXT, CLK_PLLCON_50MHz_HXT );
	
	//等待时钟稳定,外部高速时钟,PLL时钟,内部低速时钟
	CLK_WaitClockReady(CLK_CLKSTATUS_XTL12M_STB_Msk | CLK_CLKSTATUS_PLL_STB_Msk | CLK_CLKSTATUS_IRC10K_STB_Msk);
	
	/*
		使能IP时钟。例如UART、ADC、PWM等等
	*/
	//串口
	
	//使能串口时钟
	CLK_EnableModuleClock(UART0_MODULE);
	
	//设置串口时钟,时钟源为外部高速时钟,1分频
	CLK_SetModuleClock(UART0_MODULE,CLK_CLKSEL1_UART_S_HXT,CLK_CLKDIV_UART(1));
	
	//PWM

    //使能PWM时钟
	CLK_EnableModuleClock(PWM45_MODULE);

	//设置PWM时钟,时钟源为外部高速时钟,最后一个是无参数
	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();
	
	/*
		初始化I/O复用功能
	*/
	//串口
	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 的值不会重新加载,其
			  它的电路都会被复位
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值