novoton-msys_init函数

配置相应时钟后,可以打印输出:

// 配置PLL
sta = CLK_EnablePLL(CLK_PLLCTL_PLLSRC_HXT, 144000000);

/***********************************************************************/

printf("HXT:%d.\n",CLK_GetHXTFreq());
printf("LXT:%d.\n",CLK_GetLXTFreq());
printf("PCLK0:%d.\n",CLK_GetPCLK0Freq());
printf("PCLK1:%d.\n",CLK_GetPCLK1Freq());
printf("HCLK:%d.\n",CLK_GetHCLKFreq());
printf("CPUCLK:%d.\n",CLK_GetCPUFreq());

printf("PLL:%d.\n",sta);

 

HXT和LXT需使能才有值。

 

结论:

HXT可以在config区进行使能。所以说进入程序时已经启动。

但PLL只能由用户开启,如果用户不开启,CPUCLK、HCLK、PCLK0、PCLK1的频率只能达到HXT的12M或者是HIRC的22.1184M , PLL = 0;

开启PLL的频率可以达到250M。(实测开到270M还行,但是272M有时可以,有时卡死!)

还有一种情况,config没有配置HXT时,进入程序虽然可以起振,但是CPUCLK、HCLK、PCLK0、PCLK1却只能使用HIRC的一半 11.0592M ,PLL正常,但不能用。(但是配置HXT引脚时,一切正常!)

还有个问题,PLL配置为最低值50M,CPUCLK、HCLK、PCLK0、PCLK1也能达到72M,为什么?

 

 1 //初始化系统时钟
 2 void msys_init(void)
 3 { 
 4     // 解锁保护寄存器
 5     SYS_UnlockReg();
 6     
 7     //下面代码config区已经配置启动好了,同时配置PLL时也重新配置,此处没必要多余
 8     // 使能HXT时钟 (external XTAL 12MHz)
 9     //CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);
10     // 等待时钟稳定
11     //CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);
12     
13     // 配置PLL
14     sta = CLK_EnablePLL(CLK_PLLCTL_PLLSRC_HXT, 72000000);
15     // 选择PLL的2分频作为HCLK时钟源
16     CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_PLL, CLK_CLKDIV0_HCLK(2));
17     // 选择内核时钟为PLL
18     CLK_SetCoreClock(72000000);
19     // 更新SystemCoreClock值
20     SystemCoreClockUpdate();
21     // 加锁保护寄存器
22     SYS_LockReg();
23 }

 更新:

 

 1 // 初始化系统时钟
 2 void msys_init(void)
 3 { 
 4     // 解锁保护寄存器
 5     SYS_UnlockReg();
 6     
 7     // 下面代码config区已经配置启动好了,同时配置PLL时也重新配置
 8     // 使能HXT时钟 (external XTAL 12MHz)
 9     CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);
10     // 等待时钟稳定
11     CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);
12     
13     // 配置PLL
14     //CLK_EnablePLL(CLK_PLLCTL_PLLSRC_HXT, 144000000);
15     // 选择PLL的2分频作为HCLK时钟源
16     //CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_PLL, CLK_CLKDIV0_HCLK(2));
17     
18     // 配置内核时钟,上两个语句本函数已实现,未失能HIRC
19     CLK_SetCoreClock(72000000);
20     // 等待时钟稳定
21     CLK_WaitClockReady(CLK_STATUS_PLLSTB_Msk);
22     
23     // 更新SystemCoreClock值
24     SystemCoreClockUpdate();
25     
26     // 加锁保护寄存器
27     SYS_LockReg();
28 }

 

posted @ 2018-05-20 17:07  LLWDream  阅读(309)  评论(0编辑  收藏  举报