zoukankan      html  css  js  c++  java
  • novoton-msys_init函数

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

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

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

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

    printf("PLL:%d. ",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 }
  • 相关阅读:
    哈密顿环求解 C++实现 回溯法
    哈密顿环求解 C++实现 回溯法
    哈密顿环求解 C++实现 回溯法
    图着色问题 配色方案 C++实现 回溯法
    图着色问题 配色方案 C++实现 回溯法
    图着色问题 配色方案 C++实现 回溯法
    图着色问题 配色方案 C++实现 回溯法
    n-皇后问题 C++实现 回溯法
    n-皇后问题 C++实现 回溯法
    如何给Sqlite添加复合主键
  • 原文地址:https://www.cnblogs.com/llw2017/p/9063882.html
Copyright © 2011-2022 走看看