以ARM控制器LPC2104及基于LPC2104的开发学习板EasyARM2104人手,逐步引导读者掌握使用开发ARM的基本知识。本书分3个部分:第1部分为基础篇,包括第1章和第2章,主要从ARM芯片开发者的角度介绍ARM7TDMI的体系结构和指令系统。第2部分为实验篇,包括第3章、第4章和第5章,详细介绍ARM控制器LPC2104的内部结构和开发学习板EasyARM2104的硬件结构等知识,给出LPC2104的各个功能部件的编程方法,包括汇编代码和C语言代码。第3部分为提高篇,包括第6章~第13章,介绍如何把嵌入式实时操作系统µC/OS-IILPC2104,在不同情况下如何编译这些代码。然后介绍LPC2104的几个重要功能部件在µC/OS-I动程序(中间件),以及其它功能部件在µC/OS-II法。
本书可作为高等院校嵌入式系统课程的参考用书,以及ARM应用技术开发人员的参考手册。
第1章 从程序员角度看ARM7TDMI(-S)
1.1 简介
1.2 ARM7TDMI(-S)的模块和内核框图
1.3 体系结构直接支持的数据类型
1.4 处理器状态
1.5 处理器模式
1.6 内部寄存器
1.7 程序状态寄存器
1.8 异常
1.9 中断延迟
1.10 复位
1.11 存储器及存储器映射I/O
1.12 寻址方式简介
1.13 ARM7TDMI(-S)指令集简介
1.14 协处理器接口简介
1.15 调试接口简介
第2章 ARM7TDMI(-S)指令集及汇编
2.1 ARM处理器寻址方式
2.2 指令集介绍
2.3 伪指令
2.4 ARM汇编程序设计
2.5 C与汇编混合编程
第3章 LPC2106/2105/2104硬件结构与功能
3.1 简介
3.2 LPC2106/2105/2104存储器寻址
3.3 系统控制模块
3.4 存储器加速模块
3.5 向量中断控制器
3.6 GPIO
3.7 引脚连接模块
3.8 UART0
3.9 UART1
3.10 I²C接口
3.11 SPI接口
3.12 定时器0和定时器1
3.13 脉宽调制器(PWM)
3.14 实时时钟
3.15 看门狗
3.16 Flash存储器系统和编程
第4章 EasyARM2104开发实验板
4.1 功能特点
4.2 硬件原理
4.3 硬件结构
4.4 实验板使用基础
第5章 LPC2106/2105/2104基础实验
5.1 LPC2106/2105/2104系统基础
5.2 LPC2106/2105/2104功能部件实践
5.3 PC机人机界面
第6章 移植µC/OS-II
6.1 µC/OS-II简介
6.2 移植规划
6.3 编写LPC2106/2105/2104的启动代码
6.4 移植µC/OS-II
6.5 移植µC/OS-II的例子
第7章 移植代码的使用
7.1 高性能的应用
7.2 高代码密度的应用
7.3 性能与代码密度兼顾的应用
7.4 µC/OS-II与应用代码分别编译的应用
第8章 移植代码新增的函数手册和配置手册
8.1 新增的函数手册
8.2 新增的配置手册
第9章 中间件之数据队列
9.1 概述
9.2 使用
9.3 原理
第10章 中间件之串口驱动
10.1 概述
10.2 使用
10.3 原理
第11章 中间件之I²C总线驱动
11.1 概述
11.2 使用
11.3 原理
第12章 中间件之SPI总线驱动
12.1 概述
12.2 使用
12.3 原理
第13章 在µC/OS-II中使用其它内外设
13.1 概述
13.2 通用I/O的使用
13.3 定时器的使用
13.4 PWM的使用
13.5 实时时钟的使用
附录A 常见问题
A.1 程序写入Flash后不能运行
A.2 进入AXD后无法调试
A.3 不能进入ISP
A.4 从JTAG调试出错
A.5 项目不能拷贝到其它目录
附录B JTAG接口设计指南
附录C ARM指令集相关列表汇总
C.1 ARM指令列表
C.2 Thumb指令列表
C.3 汇编预定义变量及伪指令
C.4 其它
附录D PHLIPS LPC ARM微控制器系列产品列表
参考文献
相信比较敏锐的使用单片机开发项目的电子工程师会感觉到:32位微控制器的广泛应用已经到了“山雨欲来风满楼”的时候了。这主要由两方面的因素引起,一个因素是需求推动,另一个因素是技术进步拉动。
有人说“需求决定一切”,这话虽然有些武断,但需求的确是很多事情的原动力。目前,随着人们生活水平的提高,人民对生活质量的追求也逐步提高。因此,人们对智能产品的需求增加了(如PDA、手机和智能家居等),且对智能产品要求提高了(如更具人性化、操作更简单、功能更强大、容错性更好、更安全以及更具个性化等)。另外,随着网络的发展,越来越多的产品需要具有联网功能。这一切需要智能产品具有一个更强劲的“芯”,这是8位机很难做到的。同时,由于要生产这样的产品,对生产线的要求也同样提高了(全自动、更精确、效率更高、更安全、容错性更好以及可提供个性化产品等),这也需要一个更强劲的“芯”。同时,对于产品研发的企业来说,有时产品上市的时间很重要。有时上市时间落后于竞争对手就意味着市场的丢失,不过同时质量也要有起码的保证。这样就要求开发者尽量减少重复劳动。建立开发平台是一个很好的产品开发战略思想且具有现实意义,但8位系统的可怜资源对建立开发平台十分不利,用32位系统就好多了。
在个人电脑行业有著名的“摩尔定律”,它已经主宰个人电脑行业很多年了。在嵌入系统领域虽然“摩尔定律”那么明显,但技术的进步已经使32位系统不再高高在上,32位微控制器的价格已经不比8位机高多少,有些系统使用32位机其整体成本甚至比用8位机还要低。这样,使用32位系统就没有技术和成本的障碍了。
目前,在32位市场上,ARM扮演着8位市场上8051的角色,又由于感觉到“山雨欲来风满楼”之势,很多人觉得:应该学一学ARM了。但如何学ARM是一个很大的问题。目前,很多ARM开发板/学习板给人的印象是:学ARM必移植LINUX(或者uCLinux),必搞TCP/IP。其实这是不对的。LINUX(µCLinux)、TCP/IP均是计算机范畴的东西,与ARM没有必然的联系,它们本身就是一个十分复杂的体系。一个人要精通任何一种都很困难,又何必与ARM搅在一起,人为增加学习ARM的难度?而且,如果学习这些不成功,势必会打击学习者的积极性。本书就是以一个简单的ARM开发学习板EasyARM2104为基础,引导大家学习ARM的精髓,让想学ARM的人都读得懂、学得会,增强其信心,为以后可学习更复杂的ARM打下坚实的基础。
本书的各个章节安排如下:
第1章介绍了ARM7TDMI和ARM7TDMI(-S)的体系结构中对程序员有用的部分。体系结构中很多东西仅仅对芯片设计者或编译器开发者或仿真器开发者有用,它们没有包含到第1章中。
第2章介绍ARM7TDMI(-S)的指令集且介绍了如何编写汇编程序。ARM7TDMI和ARM7TDMI(-S)是基于ARM体系结构版本v4T的,这一章仅介绍ARM体系结构版本v4T支持的指令,ARM体系结构版本v5及以上版本扩展的指令没有介绍。汇编程序设计是以ARM公司自己开发的基层开发环境ADSl.2中附带的汇编器为基础讲解,这一章还给出C与汇编混合编程的方法,并给出指令和汇编伪指令速查表。
第3章介绍EasyARM2104开发学习板的主控芯片LPC2104的硬件结构和功能部件,在介绍功能部件原理的同时通过简单的程序片断加深读者对相应功能件的理解。
第4章介绍了EasyARM2104开发学习板的特点、硬件原理和基本使用方法,相当于EasyARM2104开发学习板的简单说明书。阅读完这一章,读者应当知道如何设计基于芯片LPC2106/2105/2104的用户板。
第5章详细讲述了LPC2106/2105/2104的各个功能部件的编程方法。这一章首先介绍了系统最底层的一些操作代码,并给出了一个使用C语言但不使用RTOS时通用的启动代码。使用这个启动代码之后,这几个芯片最底层的一些操作读者可以不再关心,读者可以从C语言的main函数开始编写代码。然后本章分析各个功能部件的编程方法,并分别给出汇编的例子和C语言的例子。
第6章详细讲述了如何把嵌入式实时操作系统µC/OS-II移植到芯片LPC2106/2105/2104上。与一般公开的移植不同,本移植的任务不必在特权模式下运行(在用户和/或系统模式下运行),任务可以任意使用ARM指令和/或Thumb指令。而且,它还支持µC/OS-II内核与用户任务分别编译,分别调入芯片执行的应用。
第7章介绍了各种情况下移植代码的使用方法,包括如何建立ADS工程。用户可以根据自己的需求参考相关部分编写自己的代码。
第8章介绍了移植代码相对原来的µC/OS-II增加的函数和配置参数。
第9章~第12章介绍了LPC2106/2105/2104几个重要功能部件的中间件,并分析了中间件的原理。它们包括数据队列、串口驱动驱动、I²C总线驱动和SPI总线驱动。它们应当可以直接在用户板中使用。
第13章则介绍了剩余功能部件在使用µC/OS-Ⅱ的情况下如何编程。由于这些部件使用非常灵活,所以很难写出通用中间件。但读者可以通过这一章学会使用它们的方法。
参与本书写作、策划及EasyARM2104开发套件设计的工作主要人员有:陈明计、戚军、黄绍斌、钟亦峰、岳宪臣、朱曼和李仕兵等,全书由周立功负责策划、审定和统稿。
在此感谢美国PHILIPS半导体公司的潘志强先生、PHILIPS亚太区经理华果先生、PHILIPS香港区的梅润平、李建业、刘俊杰、郭志锐和陈华程等先生以及PHILIPS大陆区的刘忠、杨俊等先生多年来的大力支持和帮助。如果没有他们长期以来对我们的支持,我们肯定不能取得今天这样的成绩。
感谢北京航空航天大学出版社的大力支持,如果没有他们的帮助和努力,这本书不会这么快出版。
感谢“周立功单片机团队”所有成员几年来亲密无间的合作和默默无私的奉献,我之所以有今天,完全是与他们共同努力的结果,我仅仅是“周立功公司”的代表而已。
由于本书的所有作者都是初次使用ARM,理解难免出现偏差。因此,本书在各个方面难免有疏忽、不恰当甚至完全错误的地方,恳请各位同行指正。