LPC11xx 系列-时钟详解

注:本文是从一个网站上看的内容,后整理出了这份。 原创是哪位,我已经找不到了。 如果有侵权,请及时告知。 我会删除。(这篇文章整理自 2018年。 当时没有Markdown编辑器。 今日重新编辑了一遍)

一、 时钟产生单元

二、系统初始化

void SystemInit (void)
{uint32_t i;/* SYSMEMREMAP 系统存储器重映射寄存器 */
#ifdef __DEBUG_RAM                // 如果是调试模式    // 用户RAM模式,中断向量被重新映射到静态ROMLPC_SYSCON->SYSMEMREMAP = 0x1;                /* remap to internal RAM */
#else// 用户Flash模式,中断向量不会被映射,一直位于Flash    LPC_SYSCON->SYSMEMREMAP = 0x2;                /* remap to internal flash */
#endif// 振荡器未被旁路(让它不起作用)bit0=0,外部晶振频率为1~20Mhz范围bit1=0LPC_SYSCON->SYSOSCCTRL = 0x00;                 /* main system OSC run is cleared, bit 5 in PDRUNCFG register */LPC_SYSCON->PDRUNCFG &= ~(0x1<<5);         // 系统振荡器上电 写0上电 写1掉电 默认掉电 /* Wait 200us for OSC to be stablized, no status indication, dummy wait. */for ( i = 0; i < 0x100; i++ );                 // 等待振荡器稳定Main_PLL_Setup();            // 倍频PLL锁相环,设置主时钟/* System clock to the IOCON needs to be enabled ormost of the I/O related peripherals won't work. */LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16);                 // 使能IO 配置块时钟return;
}

三、 锁相环作用

void Main_PLL_Setup ( void ) 主要做三件事:

1、设置PLL的时钟来源为12MHz晶振,再倍频PLL为48Mhz2、设置主时钟频率为倍频后的频率 即48Mhz3、设置AHB时钟预分频值

四、锁相环的具体实现

void Main_PLL_Setup ( void )
{// uint32_t regVal;/* 先倍频PLL,再让主时钟选择倍频后的PLL 频率 */ClockSource = OSC_CLK;        // 系统PLL时钟来源:IRC振荡器bit:00、系统振荡器(晶振)bit:01、看门口振荡器 bit:10                                                   LPC_SYSCON->SYSPLLCLKSEL = MAIN_CLKSRCSEL_Val;    /* Select system OSC PLL时钟源选择系统振荡器 即外部12M晶振*/LPC_SYSCON->SYSPLLCLKUEN = 0x01;                  /* Update clock source 更新PLL选择时钟源 */LPC_SYSCON->SYSPLLCLKUEN = 0x00;                  /* toggle Update register once 先写0再写1 达到更新时钟源的目的*/LPC_SYSCON->SYSPLLCLKUEN = 0x01;                                           while ( !(LPC_SYSCON->SYSPLLCLKUEN & 0x01) );     /* Wait until updated 等待时钟源更新完毕后向下执*/// regVal = LPC_SYSCON->SYSPLLCTRL;
// regVal &= ~0x1FF;                                 // 清空0 - 8 位
// LPC_SYSCON->SYSPLLCTRL = (regVal | (MAIN_PLL_P_Val<<5) | MAIN_PLL_M_Val); // P=0 M=3/* 计算公式模式 1(普通模式)在这种模式下使能后置分频器,占空比时钟为 50%,频率关系如下:Fclkout=M×Fclkin=(FCCO)/(2×P)  ---> 输出频率 = M * 输入频率 = (156Mhz~320Mhz)/ (2*P)        (1)为了选择合适的 M 和 P 值,推荐如下步骤:第 1 步:指定输入时钟频率 Fclkin;第 2 步:计算 M 值以获得所需的输出频率 Fclkout,M=Fclkout/Fclkin;第 3 步:找出一个值使得 FCCO=2×P×Fclkout;第 4 步:检查所有的频率和分频器值是否符合表 3.5 的限定。*/// LPC1114允许最大工作频率为50Mhz 50/12 = 4.1666 所以M值只能为4才不会超过50Mhz => 12*4 =48Mhz// FCCO的频率范围 156Mhz~320Mhz         320/2/48 = 3 P值没有3 所有P值只能为 2 =>  48*2*2 = 192MhzLPC_SYSCON->SYSPLLCTRL = 0x23; //设置倍频 为48Mhz/* Enable main system PLL, main system PLL bit 7 in PDRUNCFG. */LPC_SYSCON->PDRUNCFG &= ~(0x1<<7);                                  // PLL 上电        写0上电 写1掉电 默认掉电while ( !(LPC_SYSCON->SYSPLLSTAT & 0x01) );                                /* Wait until it's locked 等待PLL锁定成功*/// 主时钟频率可以选择四种 IRC振荡器00、PLL倍频前01、看门狗振荡器10、PLL倍频后11LPC_SYSCON->MAINCLKSEL = 0x03;                                /* Select PLL clock output 主时钟源选择PLL倍频后的时钟*/LPC_SYSCON->MAINCLKUEN = 0x01;                        /* Update MCLK clock source 更新主时钟源*/LPC_SYSCON->MAINCLKUEN = 0x00;                        /* Toggle update register once 先写0 再写1 达到更新时钟源的目的*/LPC_SYSCON->MAINCLKUEN = 0x01;while ( !(LPC_SYSCON->MAINCLKUEN & 0x01) );        /* Wait until updated 等待主时钟锁定成功后向下执行*/// AHB时钟分频值为1 即主时钟除以1 相当于没有分频率 ,给GPIO、内核、存储器、APB提供时钟频率LPC_SYSCON->SYSAHBCLKDIV = SYS_AHB_DIV_Val;        /* SYS AHB clock, typical is 1 or 2 or 4 */SystemFrequency = ClockSource * (MAIN_PLL_M_Val+1);  // (12000000UL) * (3 + 1)SystemAHBFrequency = (uint32_t)(SystemFrequency/SYS_AHB_DIV_Val);         // 保存该值,以备用 SYS_AHB_DIV_Val = 1   return;
}

附:计算公式

LPC11xx 系列-时钟详解相关推荐

  1. Windows 网络服务架构系列课程详解(六) ---利用NLB群集实现WEB服务器的可靠性...

    Windows 网络服务架构系列课程详解(六) -----利用NLB群集实现WEB服务器的可靠性   实验背景: 在大型网络环境中存在这样一种情景,公司内部的FTP服务器出现故障或脱机了,而且不能快速 ...

  2. 革命性存储:易安ESATA系列产品详解

    革命性存储:易安ESATA系列产品详解<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office& ...

  3. 大型企业网络配置系列课程详解(五) --Frame-Relay配置与相关概念的理解

    大型企业网络配置系列课程详解(五)             --Frame-Relay配置与相关概念的理解   实验原理: Frame-Relay(帧中继)简称FR,是国际电信联盟通信标准化组(ITU ...

  4. 大型企业网络配置系列课程详解(三)--OSPF高级配置与相关概念的理解

    大型企业网络配置系列课程详解(三)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office&qu ...

  5. linux设置共享权限设置命令,Linux系列知识详解(三)--------- Linux链接命令和权限管理命令...

    Linux系列知识详解(三)--------- Linux链接命令和权限管理命令 一:链接命令ln 简介:什么是链接命令?链接命令分为软链接和硬链接.其中软链接产生的新文件是以路径的形式表示原文件,类 ...

  6. 旋转排序数组系列题详解

    旋转排序数组系列题详解 文章目录 旋转排序数组系列题详解 一.问题描述:旋转数组的最小数字 二.分析:二分查找 三.代码 四.问题描述:寻找旋转排序数组中的最小值 五.分析:二分搜索 六.代码 七.问 ...

  7. 大型企业网络配置系列课程详解(第一版)发布

    大型企业网络配置系列课程详解(第一版)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office& ...

  8. 大型企业网络配置系列课程详解(四) --HSRP和VRRP配置与相关概念的理解(一)...

    大型企业网络配置系列课程详解(四)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office&qu ...

  9. Windows 网络服务架构系列课程详解(一) ----DHCP服务器的搭建与配置

    Windows 网络服务架构系列课程详解(一) ---------DHCP服务器的搭建与配置   实验背景: 企业网络环境中在没有配置DHCP服务器时,经常会遇到这样的情况,用户不懂怎么去配置IP地址 ...

最新文章

  1. 上热搜了!“学了Python6个月,竟然找不到工作!”
  2. pythonista3使用教程-pythonista3都能做什么
  3. 源码免杀-过启发式的思路
  4. python函数里面,一个*是可变参数的元祖,两个*是可变参数的字典
  5. postfix过滤器名称不一致导致postfix/qmg:warning: connect to transport xxxx: No such file or directory...
  6. 5.1 vim介绍 5.2-5.3 vim颜色显示和移动光标、vim一般模式下移动光标 5.4 vim 一般模式下复制剪切粘贴...
  7. PowerDesigner(四)-业务处理模型
  8. VirtualBox 安装 CentOS 7.6 操作记录
  9. vue echart甘特图
  10. javascript--返回顶部效果
  11. C++常用数据类型和Windows常见数据类型
  12. 设计一个序列信号发生器, 产生序列信号1011101. 用74LS161和4选1数据选择器74153及必要的门电路实现
  13. 51单片机学习笔记——AD转换
  14. 数学建模用python分析gdp_数学建模·中国GDP趋势分析与预测
  15. 右键菜单,下拉选项的截屏
  16. 对接海康ISC平台API
  17. car cdr cadr 服务器
  18. 整合DL4J训练模型与Web工程
  19. c语言a a- a*a,详解a、a、*a、**a
  20. ueditor上传图片写入数据库_ueditor图片上传,以及图片路径保存进数据库

热门文章

  1. 富士康业绩创新高,但过于依赖苹果是硬伤
  2. 各种说明方法的例句_【说明方法及例句】作业帮
  3. 懒人反编译辅助脚本工具
  4. python小游戏毕设 外星人入侵小游戏设计与实现 (源码)
  5. php date 判断是中午,获取系统时间,判断是时间段(早上,上午,中午,下午,晚上)...
  6. mysql之列属性篇四之 —— 主键(primary key)
  7. (翻译)标签模式(Tagging)
  8. 微信小程序组件调用和传值
  9. Windows下安装Python 模块的三种方法
  10. 案例:双代号网络图在控制工程造价中的应用