nxp单片机入门_ARM CortexM0 LPC1114入门手册

4c407dfabc97fa39e0a41650d82e74b2.png

第一章 简介

LPC1114 是 NXP 公司推出的一款 ARM Cortex-M0 内核的 32 位单片机。它的主频最大可达 50MHz,内部集成时钟产生单元,不用外部晶振也可以工作。内部集成 32KB FALSH 程序存储器、8K SRAM 数据存储器、一个快速 I2C 接口、一个 RS485/EIA485 UART、两个带 SSP 特征的 SPI 接口、4 个通用定时器、1 个系统定时器、1 个带窗口功能的看门狗定时器、功耗管理模块、1 个 ADC 模块和 42 个 GPIO。截至 Ration 写稿时,一片 LPC1114 的零售价只需 5.9 元, 批量价更便宜。如此强大的处理器,如此低廉的价格,可谓是性价比无敌,其低功耗、简单易用、高能效和低成本相结合,必然会在市场中占有一席之地。 LPC1114 是 ARM 入门级的单片机,使用起来非常简单,只要会 51 单片机, 就可以快速的使用 LPC1114。幸运的是,即使你不会 51 单片机,Ration 也可以带领你彻底征服这个看似复杂实则简单的单片机。 不管是什么单片机,本质上都一样,对外表现为 N 个引脚,用引脚的高低电平变化来完成各种控制通信工作。内部由若干个功能模块构成,例如串口模块、 ADC 模块等,有些单片机集成的功能模块相对较多,有些单片机集成的功能模块相对较少。我们要学习的,即如何配置单片机内部的各个模块,来完成我们所需要的目的。 不管是学习单片机,还是学习其它与单片机配合的其它硬件,学习方法都一样。从大局上看,它们都是由外部引脚和内部功能模块构成的。内部功能模块会有一些寄存器,我们了解了它的每个寄存器的功能,就可以通过它的用户手册配置寄存器,达到所需的要求。 例如:给 51 单片机中的寄存器P1 写 0x01,将会使得引脚 P1.0 电平为高, P1.1~P1.7 引脚为低。给 51 单片机中的寄存器 TMOD 写 0x20,将会配置定时器 0 为 16 位模式,定时器 1 为 8 位自动重载模式。 从学习角度讲,LPC1114 与普通 51 单片机的主要区别:
  1. LPC1114 寄存器是 32 位的,普通 51 单片机寄存器是 8 位的
  2. LPC1114 内部功能模块比普通 51 单片机多
只看到上述两点区别,你对 LPC1114 学习的压力是否减轻许多!

第二章 初识LPC1114

观引脚识功能

5e4d44decb0b2b9e6c190410b42b0608.png 我们以 LQFP48 封装为例进行介绍。 从图中引脚上的描述可以看出,它的几乎每一个引脚上都复用了若干个功能。例如,第 9 脚:PIO1_8/CT16B1_CAP0,代表,第 9 脚既可以作为通用的 输入输出引脚 P1.8,也可以作为 16 位定时器 1 的捕获引脚。(关于什么是捕获引脚,请看 Ration 的《RATION LPC1114 基础篇手册》)。 引脚作为什么功能,需要通过 IOCON 模块来配置。 现在,让我们把所有的引脚描述都看一遍吧!看完了引脚描述,你就会对它有一个基本的认识了。 GPIO 模 块 引 脚 :PIO0_0~PIO0~11 PIO1_0~PIO1~11 PIO2_0~PIO2_11 PIO3_0~PIO3_5 P0 口,P1 口,P2 口各有 12 个引脚,P3 口有 6 个引脚,一共 42 个 GPIO 口。 电源引脚:(3.3V 供电) PIN5: VSS PIN8: VDD PIN41:VSS PIN44:VDD 时钟振荡器引脚:PIN6:XTALIN PIN7:XTALOUT 接外部晶振。

时钟输出引脚:

PIN4:CLKOUT

复位引脚:

PIN3:RESET I2C 模块引脚:PIN15:SCL PIN16:SDA

UART 串口引脚:

PIN46:RXD 串行数据输入引脚 PIN47:TXD 串行数据输出引脚 除了 RXD 和 TXD 引脚,还有 9 针全功能串口中的其它握手信号引脚。PIN45: RTS PIN2、PIN36:DTR PIN23: CTS PIN13\PIN37:DSR PIN26\PIN43:DCD PIN38\PIN48:RI 其中,DTR、DSR、DCD、RI 引脚复用到了两个引脚上,可以根据实际需要选择一个引脚作为对应功能。 SPI 模块引脚:(LPC1114 内部有 2 个 SPI 模块,分别用 SPI0 和 SPI1 表示) PIN10: SSEL0 PIN27: MISO0 PIN28: MOSI0 PIN22\PIN29:SCK0 PIN2: SSEL1 PIN26: MISO1 PIN38: MOSI1 PIN13: SCK1 SCK0 复用到了两个引脚上,可以通过 IOCON_LOC 寄存器配置到其中一个引脚上。 ADC 模块引脚:PIN32:AD0 PIN33:AD1 PIN34:AD2 PIN35:AD3 PIN39:AD4 PIN40:AD5 PIN30:AD6 PIN42:AD7 LPC1114 内部有一个ADC 模块,可以通过 8 个引脚采集模拟信号。 通用定时器模块引脚:(共有 4 个定时器,2 个 16 位定时器,2 个 32 位定时器) PIN10:CT16B0CAP0 PIN27:CT16B0MAT0 PIN28:CT16B0MAT1 PIN29:CT16B0MAT2 “16 位定时器 0”有一个捕获引脚,3 个匹配输出引脚。 PIN9:CT16B1CAP0 PIN17:CT16B1MAT0 PIN30:CT16B1MAT1 “16 位定时器 1”有一个捕获引脚,2 个匹配输出引脚。 PIN45:CT32B0CAP0 PIN46:CT32B0MAT0 PIN47:CT32B0MAT1 PIN4:CT32B0MAT2 PIN32:CT32B0MAT3 “32 位定时器 0”有一个捕获引脚,4 个匹配输出引脚。 PIN33:CT32B1CAP0 PIN34:CT32B1MAT0 PIN35:CT32B1MAT1 PIN39:CT32B1MAT2 PIN40:CT32B1MAT3 “32 位定时器 1”有一个捕获引脚,4 个匹配输出引脚 捕获引脚可以计数,可以测频率,类似于普通的中断引脚。匹配输出引脚可以输出 PWM 脉宽调制信号。 SWD 调试模块引脚:PIN29:SWCLK PIN39:SWDIO 上面,把所有的引脚名称都归了一下类。上面提到的各个功能模块都是对外表现出引脚的,在 LPC1114 内部,还有没有对外表现出引脚的模块,例如功耗管理模块,看门狗模块等。

寄存器配置

32 位的单片机内部各种数据寄存器和控制寄存器都是 32 位的,同理,8 位 单片机内部的数据和控制寄存器都是 8 位的。 例如: AT89C51 单片机的“中断控制寄存器”IE 定义如下图所示:
bit7bit6bit5bit4bit3bit2bit1bit0
EA保留ET2ESET1EX1ET0EX0
LPC1114 的“AHB 总线时钟控制寄存器”SYSAHBCLKCTRL 定义如下图所示:
bit31bit30bit29bit28bit27bit26bit25bit24
保留保留保留保留保留保留保留保留
bit23bit22bit21bit20bit19bit18bit17bit16
保留保留保留保留保留SSP1保留IOCON
bit15bit14bit13bit12bit11bit10bit9bit8
WDT保留ADCUARTSSP0CT32B1CT32B0CT16B1
bit7bit6bit5bit4bit3bit2bit1bit0
CT16B0GPIOI2CFLASH2FLASH1RAMROMSYS
以上两个控制寄存器,一个是 8 位的,一个是 32 位的,它们的相同之处都是每一位决定了一项任务。例如,给 AT89C51 单片机的 IE 寄存器的 bit4 写 1 可以打开串口中断,写0 可以关闭串口中断。给LPC1114 单片机的AHBCLKCTRL 寄存器的 bit6 写 1 表示打开 GPIO 的工作时钟,写 0 表示关闭 GPIO 的工作时钟。 上面所讲的 IE 寄存器,可以用 IE=0x80 开启总中断,也可以直接写 EA=1 开启总中断。用 EA=1 来开启的方式就是“位操作”。“位操作”与直接写寄存器 值相比,直接写寄存器将会改变整个寄存器的值,而“位操作”不会改变寄存器中的其它值。 LPC1114 单片机的寄存器不支持“位操作”,为了使得操作某位的同时,不影响其它位的值,我们需要运用一下 C 语言的逻辑“或”“与”操作。 例如: 对 SYSAHBCLKCTRL 寄 存 器 的 bit6 写 1:LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6); 对 SYSAHBCLKCTRL 寄 存 器 的 bit6 写 0:LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<6); 在头文件 lpc11xx.h 中,各个寄存器是由各个模块的结构体定义的,所以我们要给某个寄存器写值的时候,要用到给结构体成员变量赋值符号“->”。上式中,SYSAHBCLKCTTL 寄存器位于结构体 LPC_SYSCON,所以给寄存器赋值的时候,要这么写。 1<<6 就是 1 向左移 6 下的意思,即: 32 位数 1 用二进制表示 00000000000000000000000000000001 32 位数 1 左右 6 下以后为 00000000000000000000000001000000 把这个左移好的数据与 SYSAHBCLKCTRL 中的值“或”一下,“或”的逻辑为 0“或”任何数都是任何数,1“或”任何数都是 1,所以结果只把bit6 置 1. 同理,可以分析一下给 bit6 写 0 的语句。都是 C 语言的基础知识。请相信, 高手并不是拥有了特殊的技能,而是掌握了扎实的基础。 特别提示:上述两条写寄存器的语句,初看有些复杂,实则简单至极!当我们以后要给某个寄存器的某个位写值的时候,例如,要给 AA 模块的 BB 寄存器的bit n 写 1,套用上式,即: AA->BB |=(1< 同理,要给 bit n 写 0,即:AA->BB&=~(1< 亲!恭喜你,你已经学会一大半了。
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值