基于ARM技术的微处理器应用占领了32位RISC微处理器的大部分市场,并渗入到我们生活的各个方面。目前,常用的ARM微处理器系列有ARM7系列、ARM9系列、ARM9E系列、ARM10E系列、SecurCore系列、Intel的Xscale等,其中ARM7、ARM9、ARM9E和ARM10E为4个通用处理器系列,每一个系列提供一套相对独特的性能来满足不同应用领域的需求。而ARM9微处理器则成为嵌入式系统开发的主流。
本书以ARM920T处理器为核心,分两条主线详细介绍嵌入式系统的设计与开发过程、调试方法。即一条主线是利用ARM ADS 1.2集成开发环境对嵌入式系统硬件驱动的开发及基于μC/OSⅡ操作系统的开发; 另一条主线是利用GNU开发工具对嵌入式Linux应用程序开发及嵌入式Linux系统设备驱动程序的开发。本书是嵌入式系统设计与开发的实用指导书,通过案例详细介绍整个开发过程,案例中的程序都取自实际项目,且对程序有详细注解。
本书深入浅出,既可作为高等院校相关课程的本科和高职教材,也可作为研究生和嵌入式系统开发人员的技术参考书。
嵌入式系统(ES)是计算机技术、通信技术、半导体技术、微电子技术、语音图像数据传输技术,甚至传感器等先进技术和具体应用对象相结合后的更新换代产品,是技术密集、投资强度大、高度分散、不断创新的知识密集型系统,反映当代最新技术的先进水平。1991年自ARM(Advanced RISC Machines)公司成立以来,世界各大半导体生产商从ARM公司购买其设计的ARM微处理器,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM微处理器芯片进入市场。基于ARM技术的微处理器应用约占据了32位RISC微处理器75%以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。
目前,常用的ARM微处理器系列有ARM7系列、ARM9系列、ARM9E系列、ARM10E系列、 SecurCore系列、Intel的Xscale等,其中ARM7、ARM9、ARM9E和ARM10E为4个通用处理器系列,每一个系列提供一套相对独特的性能来满足不同应用领域的需求。而ARM9微处理器则成为嵌入式系统开发的主流,现在市面上嵌入式系统开发与应用的技术书籍可谓不少,但多数是基于ARM7微处理器的,且对目前最流行的用于嵌入式系统开发的两套开发工具(ADS 1.2集成开发环境和GNU开发工具)介绍过于简单,特别是缺少对这两种开发工具软件的开发环境配置和调试案例。
本书以ARM9处理器为核心,分两条主线详细介绍嵌入式系统的设计与开发过程、调试方法。即一条主线是利用ARM ADS 1.2集成开发环境对嵌入式系统硬件驱动的开发及基于μC/OSⅡ操作系统的开发; 另一条主线是利用GNU开发工具对嵌入式Linux应用程序及设备驱动程序的开发。
本书主要内容
第1章介绍了嵌入式系统的组成、应用领域、发展趋势及嵌入式处理器的分类,并对嵌入式操作系统Linux、μC/OSⅡ、Windows CE作了简单介绍,介绍了嵌入式系统的总体结构、开发特点、开发流程及调试。
第2章简单介绍了嵌入式各系列的ARM微处理器的特点及主要应用领域,并详细介绍了嵌入式ARM920T内核编程模型、ARM920T的运行模式、寄存器组织、ARM体系结构的存储器格式及三星S3C2410X处理器结构。
第3章主要介绍了基于S3C2410X处理器的嵌入式应用系统的硬件设计,其内容包括电源电路、晶振电路、复位电路、存储器扩展电路等外设电路,针对每个外设和扩展的常用外设的硬件分别进行介绍。
第4章主要介绍了μC/OSⅡ的内核、μC/OSⅡ内核调度特点、任务控制块 OS_TCB描述、就绪表(Ready List)、任务状态、任务切换、任务调度分析、 μC/OSⅡ的初始化、μC/OSⅡ的API函数、μC/OSⅡ的应用程序开发、μC/OSⅡ在S3C2410X上的移植、μC/OSⅡ的API应用及基于μC/OSⅡ操作系统的开发案例。
第5章主要介绍了如何使用ARM ADS集成开发工具进行嵌入式系统的开发。内容包括ADS 1.2的安装、ADS集成开发环境的使用及使用AXD进行代码调试。
第6章主要介绍了如何进行嵌入式Linux系统的开发。其内容包括嵌入式Linux的开发环境、常用命令、GNU gcc开发工具、GNU make命令和Makefile 文件、GDB调试器、嵌入式Linux下C语言编程、嵌入式Linux引导程序、Linux系统在ARM平台上的移植及应用程序的烧写。
第7章主要介绍了如何进行嵌入式Linux驱动程序的开发。其内容包括嵌入式Linux的设备管理、设备驱动模块化编程、GPIO字符设备驱动程序设计、A/D转换器驱动程序设计、IC卡驱动程序设计、内核驱动程序设计(触摸屏驱动程序)和音频驱动程序设计。
第8章主要介绍了如何开发嵌入式Linux系统的网络设备驱动程序。其内容包括嵌入式网络设备驱动程序的体系结构、以太网控制器AX88796的接口设计、嵌入式网络设备驱动程序的开发及Linux网络设备驱动程序实例。
第9章主要介绍了如何进行Qt/Embedded嵌入式图形开发。其内容包括Qt/Embedded嵌入式图形开发基础知识、Qt/Embedded开发环境的创建及使用、Qt设计器的使用、Qtopia虚拟平台及其在S3C2410s开发板上的移植。
本书由熊茂华主编,徐建闵教授主审。熊茂华编写了第5~9章,杨震伦编写了第1~4章。
本书由熊茂华负责全面内容规划、编排,由熊茂华、徐建闵共同审定。由于时间有限,书中不足之处在所难免,欢迎各位老师和同学指正。
在本书编写过程中,部分内容是基于北京博创公司UPNETARM2410嵌入式系统教学系统,在此谨向他们深表谢意。
编者
2007年10月
第1章嵌入式系统基础
1.1嵌入式系统简介
1.1.1嵌入式系统概述
1.1.2嵌入式系统的组成和特点
1.1.3嵌入式系统的应用领域
1.1.4嵌入式系统的发展趋势
1.2嵌入式处理器
1.2.1嵌入式系统的分类
1.2.2嵌入式处理器的分类和现状
1.2.3ARM处理器
1.3嵌入式操作系统
1.3.1嵌入式操作系统的概念和分类
1.3.2Linux
1.3.3μC/OSⅡ
1.3.4Windows CE
1.4嵌入式系统开发过程
1.4.1嵌入式系统的总体结构
1.4.2嵌入式系统的开发特点
1.4.3嵌入式系统的开发流程
1.4.4嵌入式系统的调试
第2章基于ARM920T核微处理器
2.1ARM处理器简介
2.1.1ARM微处理器系列
2.1.2ARM7系列微处理器
2.1.3ARM9系列微处理器
2.1.4ARM9E系列微处理器
2.1.5ARM10E系列微处理器
2.1.6SecurCore系列微处理器
2.1.7StrongARM系列微处理器
2.1.8Xscale处理器
2.2ARM920T简介
2.2.1ARM920T内核编程模型
2.2.2ARM体系结构的存储器格式
2.2.3处理器模式
2.2.4寄存器组织
2.2.5程序状态寄存器
2.2.6异常(Exceptions)
2.2.7ARM微处理器的指令集
2.3三星S3C2410X处理器详解
2.3.1三星S3C2410X处理器结构简介
2.3.2特殊功能寄存器
第3章基于S3C2410X处理器的嵌入式应用系统设计
3.1基本电路设计
3.1.1电源电路设计
3.1.2复位电路设计
3.1.3晶振电路设计
3.2存储器系统设计
3.2.18位存储器接口设计
3.2.2SDRAM接口电路设计
3.2.3Flash接口电路设计
3.3S3C2410X的串行通信设计
3.3.1串行口原理及接口技术
3.3.2S3C2410X的UART模块
3.3.3S3C2410X的UART模块软件设计
3.4S3C2410X的键盘及LED驱动设计
3.4.1LED驱动原理及功能
3.4.2键盘驱动
3.4.3键盘及LED驱动软件设计(KeyBoard.c)
3.5S3C2410X的D/A功能应用开发
3.5.1D/A转换器类型
3.5.2MAX504与S3C2410X的接口
3.5.3D/A转换器驱动软件设计
第4章基于ARM9和μC/OSⅡ嵌入式系统设计
4.1μC/OSⅡ的内核
4.1.1μC/OSⅡ内核调度特点
4.1.2任务控制块OS_TCB描述
4.1.3就绪表(Ready List)
4.1.4任务状态
4.1.5任务切换
4.1.6任务调度分析
4.1.7μC/OSⅡ的初始化
4.2μC/OSⅡ的API函数
4.2.1任务类
4.2.2消息类
4.2.3同步类
4.2.4时间类
4.2.5内存操作类
4.3μC/OSⅡ的应用程序开发
4.4μC/OSⅡ在S3C2410X上的移植
4.4.1移植原理
4.4.2移植实现
4.5μC/OSⅡ的API应用
4.5.1任务相关函数的使用
4.5.2任务间同步和通信相关函数的使用
4.6基于μC/OSⅡ操作系统的开发案例
4.6.1绘图
4.6.2系统的消息循环
第5章ARM ADS集成开发环境
5.1ADS 1.2的安装
5.1.1ADS 概述
5.1.2ADS 1.2的安装
5.2ADS集成开发环境的使用
5.2.1建立一个新工程
5.2.2配置生成目标
5.2.3编译和连接工程
5.3用AXD进行代码调试
第6章基于ARM9和Linux嵌入式系统设计
6.1嵌入式Linux的开发环境
6.1.1嵌入式Linux开发环境建立
6.1.2嵌入式Linux开发的一般过程
6.2Linux命令及开发工具GNU gcc的使用
6.2.1嵌入式Linux操作系统常用命令
6.2.2Linux开发工具GNU gcc的使用
6.2.3GDB调试器简介
6.3GNU make命令和Makefile文件
6.3.1Makefile文件的规则
6.3.2Makefile文件的命令
6.3.3Makefile文件的变量
6.3.4Makefile文件的条件判断
6.3.5Makefile文件中常用函数
6.3.6Makefile文件中隐含规则
6.3.7子目录Makefile
6.4嵌入式Linux下C语言编程——文件的操作
6.4.1文件的创建和读写
6.4.2文件的各个属性
6.4.3目录文件的操作
6.5嵌入式Linux引导程序
6.5.1Bootloader引导程序
6.5.2VIVI简介
6.6Linux系统在ARM平台上的移植
6.6.1Linux内核结构
6.6.2内核移植
6.7Linux系统及应用程序的烧写
6.7.1JTAG烧写vivi
6.7.2串口下载烧写
6.7.3上传应用程序
第7章嵌入式Linux设备驱动程序开发
7.1嵌入式Linux的设备管理
7.1.1设备驱动和文件系统的关系
7.1.2设备类型
7.1.3设备号
7.1.4设备驱动中的关键数据结构
7.1.5设备驱动开发中的基本函数
7.2设备驱动模块化编程
7.2.1设备驱动程序的开发流程
7.2.2内核空间和用户空间
7.2.3设备注册和初始化
7.2.4中断管理
7.2.5加载和卸载驱动程序
7.3GPIO字符设备驱动程序设计
7.3.1GPIO接口设计
7.3.2LED驱动程序代码分析
7.3.3LED驱动程序加载及测试
7.4A/D转换器驱动程序设计
7.4.1S3C2410X中断控制器
7.4.2S3C2410X中断接口函数及宏定义
7.4.3S3C2410X A/D转换器
7.4.4A/D转换驱动程序设计
7.4.5A/D转换驱动程序的测试
7.5IC卡驱动程序设计
7.5.1AT24CXX系列存储卡读卡器
7.5.2IC卡驱动程序设计
7.5.3IC卡测试程序设计
7.6内核驱动程序设计——触摸屏驱动程序
7.6.1触摸屏原理以及驱动芯片ADS7843
7.6.2触摸屏驱动程序分析
7.7音频驱动程序设计
7.7.1音频文件格式
7.7.2基于IIS接口的音频系统
7.7.3音频驱动程序设计
第8章嵌入式网络设备驱动程序设计
8.1嵌入式网络设备驱动程序
8.1.1Linux网络设备驱动程序的体系结构
8.1.2Linux网络设备驱动程序的数据结构
8.1.3网络驱动程序的基本方法
8.2基于以太网控制器AX88796的网络驱动程序设计
8.2.1基于以太网控制器AX88796的接口设计
8.2.2Linux网络设备驱动程序实例
第9章Qt/Embedded嵌入式图形开发
9.1Qt/Embedded嵌入式图形开发基础
9.1.1Qt/Embedded概述
9.1.2创建Qt/Embedded开发环境
9.1.3Qt设计器简介
9.1.4Qt Designer 实例及Qt/E的交叉编译
9.2Qtopia虚拟平台及其在S3C2410s开发板上的移植
9.2.1构建本机Qtopia虚拟平台
9.2.2Qtopia 2.1.1在2410S上的移植
附录A嵌入式系统应用编程API函数
附录BS3C2410X引脚及信号定义
参考文献