32位单片机LPC11C14学习
GPIOSetDir( PORT0, 1, 0 );
GPIOSetValue() 一个是设置端口方向,一个是设置输出的值,直接调用就可以了。
如果在片内RAM当中运行代码并且应用程序需要调用中断,那么必须将中断向量重新映射到Flash地址0x0。这样做是因为所有的异常向量都位于地址0x0及以上。通过将寄存器MEMMAP(位于系统控制模块当中)配置为用户RAM模式来实现这一点。
#ifdef __DEBUG_RAM
LPC_SYSCON->SYSMEMREMAP = 0x1;
#else
#ifdef __DEBUG_FLASH
LPC_SYSCON->SYSMEMREMAP = 0x2;
#endif
#endif
ARM 微控制器有一个显著的特点,就是都可以把时钟频率倍频到很高,具体到多高,每个系列的微控制器都有一个指标,我们现在要学的Cortex-M0内核处理器 LPC1114最高能到50MHz,当然,其它的ARM内核微处理器可以倍频到更高,现在好多手机都采用了ARM内核处理器,比如卖的很火的诺基亚 5233就是采用了ARM11处理器,ARM11的处理器的主频为433MHz,比Cortex-M0的50MHz高多了吧!所以Cortex-M0处理器被ARM称为入门级的内核!
要实现对系统时钟的配置,时钟配置图是必须要看懂的!因为它比文字更具有参考价值,看上这张图配置时钟,绝对不会出现漏洞!(我建议你把这张图打印出来贴到你的墙上,我就是这么做的,你看着办吧!)接下来,我将一步一步引领你彻底看懂这张“时钟配置图”。
注意了,要开始讲图了!(这张图就是数据手册说的时钟产生单元:CGU(Clock generationunit))
LPC1114 内部含有3个时钟振荡器:系统振荡器,IRC振荡器,看门狗振荡器。系统振荡器就是需要配合外部晶振工作的振荡器(这是任何一款单片机都有的);IRC振荡器就是内部RC振荡器,就是我在上面“总览LPC1114”中提到的那个LPC1114一上电就默认选择的12MHz时钟振荡器,它的精度没有配合外部晶振的系统振荡器高;看门狗振荡器就是给看门狗提供的时钟振荡器!这么说大家明白了吧,在接下来的叙述里面,一提到系统振荡器就是指利用外部晶振的时钟振荡器,IRC振荡器就是指LPC1114的内部时钟振荡器,可不要搞混了哦!
我们先从图的中心点看起,找到“主时钟”三个字,看“主时钟”的左面,有四条线到了“主时钟”的框上,这四条线就是“主时钟”的来源,它们分别是:IRC振荡器,看门狗振荡器,倍频之前的时钟(sys_pllclkin)和倍频之后的时钟(sys_pllclkout)。也就是主时钟可以在这四个时钟源当中选择一个做为主时钟!通过操纵(人家专业名词不叫“操纵”,叫“访问”)“主时钟源选择寄存器(MAINCLKSEL)”实现。这个32位的主时钟源选择寄存器MAINCLKSEL只用到了两位(谁让两位就可以表示四种状态呢!),剩下的全都是保留位,如下:
位(bit) 符号 值 描述 复位值
1:0 SEL 00 选择IRC振荡器 00
01 选择输入到PLL之前的时钟
10 选择看门狗振荡器
11 选择PLL之后的时钟
31:2 - - 保留 0
看复位值,系统默认情况下就是选择IRC振荡器作为系统的主时钟的。我们为了让LPC1114发挥出它最大的性能,就喜欢选择PLL(PLL就是倍频的意思)后的时钟,在程序中这样写:
SYSCON->MAINCLKSEL = 0x00000003;//主时钟源选择PLL后的时钟
接下来看图上,找到“系统PLL”方框,看它左面倒梯形方框的左面,有三条线,这三条线就是可以做为倍频时钟源的时钟源。这三个时钟源分别是:IRC振荡器,系统振荡器,看门狗振荡器。这不就是LPC1114的三个时钟振荡器么,原来它们都可以做为PLL的时钟源!该选择谁捏?这就要操纵“系统倍频时钟源选择寄存器(SYSPLLCLKSEL)”了。这个32位的寄存器也是只用到了两位:
(两位就可以表示四种状态了,三个状态当然是绰绰有余!)
位(bit) 符号 值 描述 复位值
1:0 SEL 00 选择IRC振荡器 00
01 选择系统振荡器
10 选择看门狗振荡器
11 保留
31:2 - - 保留 0
看复位值,系统默认情况下就是选择IRC振荡器作为PLL输入时钟源的。既然我们外部安插了精确的12M晶振,就是想把它做为时钟源的,选择上面表格当中的 01,就是选择了外部12M晶振!(我在先前提到过,“系统振荡器”就是代表外部的晶振,为了防止看的不仔细的朋友存在,我还是再说一遍吧!)
程序中这样写:
SYSCON->SYSPLLCLKSEL = 0x00000001;//PLL时钟源选择“系统振荡器”
当然,操作顺序应该是先选择PLL的时钟源,再选择主时钟源!
到现在,“主时钟”左面的部分
32位单片机LPC11C1 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)