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 }
  • 相关阅读:
    Nginx 部署多个 web 项目(虚拟主机)
    Nginx 配置文件
    Linux 安装 nginx
    Linux 安装 tomcat
    Linux 安装 Mysql 5.7.23
    Linux 安装 jdk8
    Linux 安装 lrzsz,使用 rz、sz 上传下载文件
    springMVC 拦截器
    spring 事务
    基于Aspectj 注解实现 spring AOP
  • 原文地址:https://www.cnblogs.com/llw2017/p/9063882.html
Copyright © 2011-2022 走看看