最近准备用LPC1114做《智能能家居系统》的分控部分,很多人多提出问题,感觉用LPC1114还不如用51做。我想可能是大家对LPC1114不熟悉,所以有点畏惧,其实个人认为,LPC1114比51更方便,不需要编程器或仿真,更方便开发调试。在使用LPC1114时,最麻烦的一点就是启动代码和时钟的设置可能让新手害怕。其实没什么可怕的,NXP的例程中这些代码已经写好了,只要你能看懂和移植就可以了。
对于移植应该没什么难度,因为这些代码都是用标准的C语言编写的。至于启动代码就更是没有什么好担心的了,MDK会自动生成启动代码。下面是注意的内容:
1. 对于LPC1114来说,工程的建立关键是时钟的设置。其时钟的设置非常复杂,需要设置大量的寄存器,而且每个给外设都有相应的时钟分频寄存器和时钟控制寄存器。要设置相应的外设就必须正确的设置好这些寄存器。
AHBCLKCTRL 寄存器控制系统和外设寄存器接口时钟的使能。系统时(sys_ahb_clk[0],AHBCLKCTRL 寄存器的位0)为AHB 到APB 桥、AHB 矩阵、ARM Cortex-M0、Syscon块和PMU 提供时钟,不可以禁止。在外设的相应寄存器中写入“
如:LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6); // 使能AHB时钟到GPIO域
2.LPC1100系列Cortex-M0含有3个独立的振荡器:系统振荡器(外部晶体振荡器,在10MHz~25MHz内)、内部RC振荡器(IRC 12MHz)和看门狗振荡器(500KHz ~ 3.4MHz),每个振荡器可根据不同应用要求选择使用。可以选择这三者之一为主频时钟。复位后,LPC1100系列Cortex-M0自动选择内部RC振荡器作为系统的时钟源,这使得系统能在没有外部晶振的情况下运行。如果需要外部晶振为系统提供时钟,需要通过软件进行切换。
①.用户可以通过设置时钟源选择寄存器,在主振荡器和内部RC振荡器二者间选择一个作为PLL时钟源。
注:只有在PLL断开连接时,才可更换PLL输入时钟源。在更换完时钟源后必须在系统时钟源更新使能寄存器先写0然后再写1。
②.可用来驱动系统的时钟源包括IRC振荡器、输入时钟到系统PLL、WDT振荡器和系统PLL时钟输出。
注:在更换完主时钟源后必须在主时钟源更新使能寄存器先写0,然后再写1。
3. PLL频率计算中的参数:
FCLKOUT = M×FCLKIN = FCCO /(2×P)
为了选择合适的M和P值,推荐如下步骤:
① 指定输入时钟频率FCLKIN;
② 计算M值以获得所需的输出频率FCLKOUT,M = FCLKOUT / FCLKIN;
③ 找出一个值使得FCCO=2×P×FCLKOUT;
④ 检查所有的频率和分频器值设置,是否符合“系统PLL控制寄存器(SYSPLLCTRL)位功能描述”内的限定。
在PLL的输入时钟频率范围为10MHz~25MHz内,允许M值的范围为1~32,这是支持主振荡器和IRC操作的整个M值的范围。