NXP公司推出的LPC系列ARM内核微处理器在工业控制等领域得到了广泛的应用,LPC ARM是嵌入式系统中常用的较容易入门的ARM嵌入式处理器,掌握LPC ARM微处理器的软硬件开发技术是嵌入式软硬件开发人员应掌握的一种基本技能。
本书结合Proteus仿真工具、Keil MDK集成开发环境,以Keil C为开发语言,介绍了嵌入式系统的基本概念、ARM内核的分类、ARM内核开发流程、定时器、中断、GPIO、常见外设、操作系统、RLARM嵌入式实时操作系统等基本概念、基本应用,另外还描述了如何将μC/OS-II移植到LPC ARM上,用Keil MDK进行编译,通过Proteus进行仿真,讲述了μC/GUI的基础知识,以及如何将μC/GUI移植到Keil MDK平台,使用LPC ARM控制12864液晶显示的内容。
本书结构合理、文字流畅、通俗易懂,通过仿真软件,不需要任何硬件即可进行ARM嵌入式系统设计实验,是学习ARM的理想入门教材,具有计算机初步知识的读者都可快速入门。
本书可作为大学研究生、本科生、专科生ARM课程教材或自学材料,也可供嵌入式系统相关技术人员参考。
NXP公司推出的LPC系列ARM内核微处理器,在工业控制等领域得到了广泛的应用,LPC ARM是嵌入式系统中常用的较容易入门的ARM嵌入式处理器,掌握LPC ARM微处理器的软硬件开发技术是嵌入式软硬件开发人员应掌握的一种基本技能。
本书以Keil C为基础,将ARM理论知识与实际仿真演示相结合,使读者更容易理解ARM的基本概念、基本原理。同时,通过本书的学习,读者会逐步掌握Proteus仿真环境、Keil MDK集成开发环境的基本使用,可以在自己的计算机上通过Proteus来搭建自己的创新设计平台。
本书是根据作者4年来讲授的研究生课程“嵌入式电子系统”讲稿整理而成的,为方便教师授课和学生学习,每一章可以安排2~3个学时,一共12章,适合24~36学时。
本书共分12章,各章主要内容如下。
第1章:嵌入式系统概述,主要讲述了嵌入式系统的基本概念、嵌入式系统的基本组成等。
第2章:ARM微处理器内核分类及开发流程,主要介绍ARM内核分类、ARM开发流程及开发环境,重点介绍了ARM初始化过程、RealView MDK软件及其开发流程。
第3章:ARM嵌入式微处理器体系结构及最小系统开发,主要介绍ARM微处理器的体系结构,使读者对ARM处理器工作模式、寄存器等有一个基本的了解,最后以Philips的LPC21XX系列为例,对LPC ARM最小系统的软硬件开发过程给以简要的描述。
第4章:LPC21XX系列ARM芯片GPIO及其应用,主要介绍了LPC ARM的GPIO及其基本应用。
第5章:LPC213X系列ARM芯片中断及应用,主要介绍LPC ARM中断的基本概念及相关的寄存器,针对外部中断给出应用。
第6章:LPC21XX控制1602液晶应用初步,主要讲述LPC ARM控制1602液晶模块的方法。
第7章:LPC21XX控制12864液晶应用初步,主要讲述LPC ARM控制12864液晶模块的基本应用,也是第8章的基础。
第8章:μC/GUI及其在LPC21XX上的基本应用,主要讲述μC/GUI基础知识,并将其应用到LPC21XX上,对12864液晶模块的驱动进行了编写,并在Proteus中进行仿真。
第9章:LPC21XX系列ARM芯片时钟管理与定时器应用,讲述了LPC ARM内部的时钟管理,讲述如何通过寄存器进行时钟的设置,介绍了LPC内部的定时器,给出了定时器/计数器的简单应用。
第10章:LPC串行口通信及应用,介绍了LPC ARM内部串行口的基本结构、基本寄存器,给出了查询方式和中断方式两种工作方法的仿真实例。
第11章:RTX-51实时多任务操作系统,主要介绍常见嵌入式实时操作系统的基本概念、嵌入式操作系统中的进程管理及进程通信等,还介绍了支持LPC ARM的RL-ARM操作系统并给出了简单应用仿真。
第12章:μC/OS-II嵌入式实时操作系统及基本应用仿真,对μC/OS-II进行了初步的介绍,重点放在如何将μC/OS-II移植到LPC ARM上,最后给出了简单的例子对其应用做了简单说明。
本书结构合理,文字流畅,通俗易懂,是学习LPC ARM的理想入门教材,具有计算机初步知识的读者都可快速入门。本书可作为研究生、本科生、专科生ARM课程教材或自学材料,也可供嵌入式系统相关技术人员参考。
本书的编写人员主要有于红旗、徐欣、刁节涛、孙兆林等人。其中,于红旗负责全书的内容组织和目录规划及编写,徐欣教授、孙兆林副教授提供了部分课件素材,刁节涛教授完成了全书的审校,田苗苗、张琨完成了书稿的整理及实验验证工作。书稿在整理过程中,也得到了徐晖、王玺、刘海军、聂洪山、李楠、张玉梅等老师的热情帮助,在此表示感谢。限于篇幅,本书没有对ARM处理器内部的各个组成部分进行全面的介绍,仅列举出有利于教学和实验的部分内容,加上嵌入式系统本身也在不断地发展变化之中,一些有益的科研项目和科研经验尚未在本书中体现,一些更深入的应用也未加入。限于作者水平,本书难免有疏漏之处,欢迎广大读者批评指正。同时,为采用本书作为教材的老师提供部分章节的PPT供参考。作者的联系方式是dr.yhq@163.com。
本书在编写的过程中参阅了不少同行有益的教材,在此深表感谢!
编 者
第1章 嵌入式系统概述1
1.1 身边的嵌入式系统1
1.2 嵌入式系统概述2
1.2.1 嵌入式系统的定义2
1.2.2 嵌入式系统的特点2
1.2.3 嵌入式系统与通用计算机系统的区别3
1.3 嵌入式系统的基本结构4
1.3.1 嵌入式系统的硬件组成4
1.3.2 嵌入式系统的软件7
1.3.3 嵌入式软件系统的设计方法8
1.3.4 嵌入式系统的开发模式11
1.3.5 嵌入式项目开发流程11
1.4 嵌入式系统的发展12
1.4.1 嵌入式系统的历史12
1.4.2 嵌入式系统的发展现状13
1.4.3 嵌入式系统的发展趋势13
1.5 小结14
第2章 ARM微处理器内核分类及开发流程15
2.1 ARM处理器简介15
2.1.1 ARM处理器概述15
2.1.2 ARM微处理器的应用领域15
2.1.3 ARM微处理器的特点16
2.2 ARM内核分类17
2.2.1 ARM718
2.2.2 ARM920
2.2.3 SecurCore微处理器系列21
2.2.4 ARM1022
2.2.5 ARM1122
2.2.6 StrongARM微处理器系列23
2.2.7 Xscale处理器23
2.2.8 ARM Cortex23
2.2.9 ARM流水线28
2.3 ARM微处理器的应用选型30
2.3.1 ARM微处理器内核的选择31
2.3.2 系统的工作频率31
2.3.3 芯片内存储器的容量31
2.3.4 片内外围电路的选择31
2.3.5 多芯核ARM系列的选择31
2.3.6 根据应用选型31
2.4 ARM程序设计基础32
2.4.1 系统的初始化过程32
2.4.2 定义程序入口点33
2.4.3 设置异常向量33
2.4.4 初始化存储器系统33
2.4.5 初始化堆栈指针寄存器34
2.4.6 初始化临界I/O设备36
2.4.7 初始化C代码的运行环境36
2.4.8 改变处理器的运行模式和状态36
2.4.9 使能中断36
2.4.10 进入C代码运行37
2.5 RealView MDK简介37
2.5.1 RealView MDK概述37
2.5.2 产品模块介绍38
2.5.3 ULINK2仿真器40
2.6 LPC2000系列ARM芯片GPIO简介42
2.6.1 GPIO(通用I/O口)简介42
2.6.2 I/O口连接模块简介43
2.6.3 GPIO基本控制寄存器44
2.6.4 GPIO应用示例45
2.6.5 Proteus原理图46
2.6.6 如何控制LED46
2.6.7 如何编程47
2.7 RealView MDK开发流程47
2.8 其他常见的ARM开发环境及工具49
2.9 小结50
第3章 ARM嵌入式微处理器体系结构及最小系统开发51
3.1 ARM微处理器体系结构51
3.1.1 RISC体系结构51
3.1.2 ARM微处理器工作模式53
3.1.3 ARM微处理器的寄存器结构53
3.1.4 ARM微处理器工作状态58
3.1.5 ARM微处理器的异常处理58
3.1.6 ARM处理器存储结构59
3.1.7 ARM处理器的存储映射I/O61
3.1.8 ARM处理器的内部总线61
3.2 LPC214X系列ARM芯片应用开发62
3.2.1 LPC214X系列ARM芯片简介62
3.2.2 LPC2148管脚描述64
3.2.3 LPC2148最小系统设计69
3.2.4 LPC2148内置Flash的烧写73
3.3 小结77
第4章 LPC21XX系列ARM芯片GPIO及其应用78
4.1 LPC21XX管脚功能设置78
4.2 LPC21XX GPIO相关寄存器80
4.3 LPC21XX GPIO基本应用82
4.3.1 GPIO控制LED闪烁82
4.3.2 通过GPIO由按键控制LED84
4.3.3 软件译码点亮单个7段数码管85
4.3.4 硬件译码点亮单个7段数码管87
4.3.5 LPC控制多个7段数码管88
4.4 小结91
第5章 LPC213X系列ARM芯片中断及应用92
5.1 什么是中断92
5.2 为什么需要中断92
5.3 与中断有关的几个概念93
5.4 从一个中断例子讲起94
5.4.1 管脚功能设置94
5.4.2 中断初始化95
5.4.3 主程序95
5.4.4 中断服务程序95
5.5 LPC213X中断及相关寄存器96
5.5.1 中断结构96
5.5.2 中断源及其VIC中断号96
5.5.3 外部中断相关寄存器98
5.5.4 中断处理流程105
5.5.5 中断使用注意事项107
5.6 中断基本应用107
5.6.1 实例一:两个外部中断控制两个LED闪烁107
5.6.2 实例二:3个外部中断控制数码管加减、复位109
5.7 小结110
第6章 LPC21XX控制1602液晶应用初步111
6.1 液晶显示器概述111
6.2 1602液晶显示模块概述112
6.3 1602液晶显示模块管脚定义114
6.4 1602液晶显示模块和LPC接口115
6.5 LPC对1602的4种操作模式116
6.5.1 读操作时序116
6.5.2 写操作时序119
6.6 1602液晶内部显示存储器122
6.7 1602液晶指令123
6.7.1 显示功能设置124
6.7.2 显示开关及光标设置124
6.7.3 清屏125
6.7.4 设定显示屏或光标移动方向指令126
6.7.5 AC值控制及屏幕移动设置127
6.7.6 光标归位指令128
6.7.7 指令小结及编程技巧128
6.8 1602液晶的初始化128
6.9 1602液晶综合应用129
6.9.1 LCD显示字符串129
6.9.2 按键控制显示内容131
6.10 小结132
第7章 LPC21XX控制12864液晶应用初步133
7.1 12864液晶模块概述133
7.1.1 HD61202的特点134
7.1.2 HD61202的引脚功能135
7.1.3 HD61202显示RAM地址136
7.2 12864液晶模块管脚定义137
7.3 LPC对12864液晶模块的操作时序138
7.3.1 写操作时序138
7.3.2 读操作时序139
7.4 12864液晶模块的指令140
7.4.1 读状态指令140
7.4.2 行设置指令141
7.4.3 页设置指令142
7.4.4 列地址设置指令142
7.4.5 显示开/关指令145
7.5 12864液晶模块的初始化145
7.6 12864液晶模块综合应用145
7.6.1 字模软件145
7.6.2 12864液晶模块显示数字146
7.6.3 12864液晶模块显示汉字148
7.6.4 12864显示图片148
7.6.5 12864液晶模块的绘图149
7.7 小结152
第8章 μC/GUI及其在LPC21XX上的基本应用153
8.1 μC/GUI基础知识153
8.1.1 μC/GUI简介153
8.1.2 μC/GUI目标硬件153
8.1.3 开发环境(编译程序)154
8.1.4 ?C/GUI的特点154
8.1.5 屏幕和坐标156
8.1.6 数据类型156
8.2 μC/GUI入门指南156
8.2.1 ?C/GUI文件结构156
8.2.2 向目标程序加入?C/GUI157
8.2.3 将?C/GUI的“C”文件加入工程中157
8.2.4 配置?C/GUI157
8.2.5 初始化?C/GUI158
8.2.6 在目标硬件上使用?C/GUI158
8.2.7 “Hello World”范例程序159
8.3 μC/GUI在LPC单片机上的应用160
8.3.1 获取μC/GUI3.98源码160
8.3.2 新建工程160
8.3.3 修改配置文件160
8.3.4 复制操作系统支持文件161
8.3.5 代码移植161
8.3.6 设置include路径168
8.3.7 其他修改169
8.3.8 Proteus仿真170
8.3.9 显示其他内容171
8.3.10 文本显示相关函数171
8.3.11 数值显示函数175
8.3.12 绘图函数177
8.3.13 字体相关函数180
8.3.14 颜色相关函数183
8.4 Keil编译库的使用方法183
8.4.1 去掉主函数文件184
8.4.2 Lib文件的使用184
8.5 小结185
第9章 LPC21XX系列ARM芯片时钟管理与定时器应用186
9.1 LPC21XX系列ARM处理器外部时钟连接186
9.1.1 ARM处理器内部时钟结构186
9.1.2 ARM处理器内部时钟及相互关系187
9.1.3 外设时钟相关寄存器188
9.1.4 PLL相关寄存器188
9.1.5 PLL设置过程190
9.1.6 PLL操作方法191
9.1.7 PLL使用注意事项191
9.1.8 PLL设定实例191
9.2 LPC21XX ARM定时器192
9.2.1 定时器/计数器概述192
9.2.2 相关寄存器194
9.2.3 定时器工作流程199
9.2.4 定时器操作方法200
9.3 定时器综合应用200
9.3.1 使用查询方式使LED闪烁200
9.3.2 使用中断方式使LED闪烁202
9.3.3 使用中断方式使数码管显示时间203
9.3.4 使用中断刷新方式使数码管显示时间206
9.4 小结207
第10章 LPC串行口通信及应用208
10.1 串行通信基本概念208
10.1.1 同步通信方式208
10.1.2 异步通信方式209
10.1.3 串行通信的数据传送方式209
10.1.4 串行通信的奇偶校验210
10.1.5 异步串行通信的波特率210
10.1.6 串行接口标准210
10.2 RS-232C接口210
10.2.1 接口信号210
10.2.2 技术指标212
10.2.3 RS-232的帧结构212
10.2.4 RS-232的编程和使用213
10.3 LPCARM串口的编程与应用213
10.3.1 LPC21XX的串口管脚213
10.3.2 串口基本结构213
10.3.3 相关的寄存器及其作用215
10.4 LPC串口通信应用举例219
10.4.1 实例一:串口向PC发送字符串219
10.4.2 实例二:串口将接收到的数据发送给PC(查询方式)223
10.5 LPC21XX ARM处理器串口通信(中断方式)225
10.5.1 相关向量中断控制寄存器设置225
10.5.2 串口相关寄存器225
10.5.3 串口通信中断方式示例229
10.5.4 实例三:串口将接收到的数据发给PC(中断方式)229
10.6 小结230
第11章 RTX-51实时多任务操作系统231
11.1 操作系统基础知识231
11.1.1 什么是计算机操作系统231
11.1.2 操作系统的功能231
11.1.3 进程和线程的基本概念232
11.2 实时操作系统基础知识235
11.2.1 实时系统及其特点235
11.2.2 计算机实时操作系统236
11.2.3 嵌入式实时操作系统240
11.2.4 常见的嵌入式实时操作系统244
11.3 RL-ARM嵌入式实时操作系统及基本应用246
11.3.1 多任务系统简介246
11.3.2 RL-ARM实时多任务系统任务状态及任务间通信248
11.3.3 如何使用RTX内核249
11.3.4 RTX的配置249
11.3.5 RTX应用入门250
11.4 小结254
第12章 μC/OS-II嵌入式实时操作系统及基本应用仿真255
12.1 μC/OS-II文件结构255
12.2 μC/OS-II任务状态及其转换关系257
12.3 μC/OS-II任务控制块258
12.4 任务调度器259
12.4.1 任务切换259
12.4.2 就绪表260
12.4.3 中断服务260
12.4.4 时钟节拍260
12.5 μC/OS-II的初始化和启动260
12.6 任务管理261
12.7 μC/OS-II任务间通信方式263
12.7.1 信号量263
12.7.2 互斥型信号量264
12.7.3 事件标志组265
12.7.4 消息邮箱265
12.7.5 消息队列266
12.8 μC/OS-II在LPC上的移植267
12.9 小结271
参考文献272