本书详细介绍了AT91系列微控制器的体系结构、片内资源、指令集、开发平台、软件编程、操作系统移植等内容,同时结合作者的开发实际,给出了具体的实用程序和设计实例。全书共7章,包括AT91系列微控制器的体系结构、AT91系列微控制器的片内资源、ARM指令集和汇编程序设计、AT91的C/C++编程和调试、μC/OSII在AT91上的移植以及基于AT91M40800的嵌入式WEB服务器的设计等。
本书内容比较全面,设计实例详细,可作为AT91应用技术人员的参考手册和ARM开发课程的参考用书。
第1章 AT91系列微控制器的体系结构
1.1 AT91系列微控制器概述1
1.2 AT91X408xx系列微控制器3
1.2.1 体系结构3
1.2.2 存储器映射9
1.2.3 内嵌Flash的AT91X408xx系列微控制器10
1.3 AT91M55800A微控制器17
1.4 AT91RM9200微控制器24
第2章 AT91系列微控制器的片内资源
2.1 外部总线接口EBI35
2.1.1 功能介绍35
2.1.2 寄存器描述44
2.2 省电模块PS47
2.2.1 功能介绍47
2.2.2 寄存器描述48
2.3 先进中断控制器AIC50
2.3.1 功能介绍51
2.3.2 寄存器描述56
2.4 并行I/O控制器PIO60
2.4.1 功能介绍60
2.4.2 寄存器描述64
2.5 看门狗定时器WD70
2.5.1 功能介绍70
2.5.2 寄存器描述71
2.6 特殊功能寄存器SF73
2.6.1 功能介绍73
2.6.2 寄存器描述74
2.7 通用同步/异步收发器 USART77
2.7.1 功能介绍77
2.7.2 寄存器描述83
2.8 定时器/计数器94
2.8.1 功能介绍94
2.8.2 寄存器描述102
2.9 先进电源管理控制器APMC114
2.9.1 功能介绍114
2.9.2 寄存器描述121
2.10 实时时钟RTC128
2.10.1 功能介绍128
2.10.2 寄存器描述130
2.11 串行外围接口 SPI137
2.11.1 功能介绍138
2.11.2 寄存器描述144
2.12 A/D转换器152
2.12.1 功能介绍152
2.12.2 寄存器描述154
2.13 D/A转换器158
2.13.1 功能介绍159
2.13.2 寄存器描述160
第3章 ARM指令集和汇编程序设计
3.1 ARM编程模型164
3.1.1 微处理器工作状态164
3.1.2 处理器模式164
3.1.3 寄存器组织165
3.1.4 异常170
3.2 ARM的寻址方式176
3.2.1 寄存器寻址176
3.2.2 立即寻址176
3.2.3 寄存器偏移寻址176
3.2.4 寄存器间接寻址177
3.2.5 基址寻址177
3.2.6 相对寻址177
3.2.7 多寄存器寻址178
3.2.8 堆栈寻址178
3.2.9 块拷贝寻址178
3.3 ARM指令集180
3.3.1 ARM指令的分类与格式180
3.3.2 条件执行181
3.3.3 指令分类说明182
3.4 Thumb指令集198
3.4.1 Thumb指令集与ARM指令集的区别198
3.4.2 指令分类说明198
3.5 ARM汇编程序设计209
3.5.1 ARM汇编程序规范209
3.5.2 ARM分支程序设计211
3.5.3 ARM循环程序设计214
3.5.4 ARM模块化程序设计215
3.5.5 伪指令216
第4章 ARM C/C++的编译和调试
4.1 ARM C/C++编译器232
4.2 ARM C/C++语言扩展247
4.3 ARM中的C/C++库252
4.3.1 ARM中C/C++运行时库的类型252
4.3.2 ARM中C/C++库的目录结构253
4.3.3 ARM C/C++库的可重入性和静态数据253
4.3.4 建立一个使用C/C++库的应用程序254
4.3.5 建立一个不使用C/C++库的应用程序256
4.3.6 裁剪C/C++运行时库258
第5章 AT91应用程序设计实例
5.1 用汇编语言编写AT91的启动程序260
5.2 AT91中断的自动定向和优先级管理269
5.2.1 中断的自动定向269
5.2.2 中断的优先级管理270
5.2.3 AT91中断管理的软件实现270
5.3 AT91中DMA的软件实现271
5.3.1 快速DMA的编程实现272
5.3.2 DMA通道的编程实现273
5.4 用AT91定时器/计数器产生脉宽调制信号276
5.5 AT91X408xx与I2S接口音频数/模转换器的连接279
5.5.1 I2S总线简介279
5.5.2 AT91X408xx与DAC3550连接电路279
5.5.3 接口转换电路的CPLD实现280
5.5.4 软件接口285
5.6 AT91RM9200与硬盘的连接285
第6章 μC/OSII在AT91上的移植
6.1 目录和文件296
6.2 OS_CPU.H文件296
6.2.1 数据类型296
6.2.2 代码临界区297
6.2.3 堆栈增长方向297
6.2.4 任务级切换298
6.2.5 中断级切换标志298
6.2.6 函数原型298
6.3 OS_CPU_C.C文件298
6.3.1 OSInitHookBegin()299
6.3.2 OSInitHookEnd()299
6.3.3 OSTaskCreateHook()299
6.3.4 OSTaskDelHook()300
6.3.5 OSTaskIdleHook()300
6.3.6 OSTaskStatHook()300
6.3.7 OSTaskStkInit()301
6.3.8 OSTaskSwHook()302
6.3.9 OSTCBInitHook()303
6.3.10 OSTimeTickHook()303
6.4 OS_CPU_A.S文件303
6.4.1 OSStartHighRdy( )303
6.4.2 OSCtxSw( )304
6.4.3 OS_CPU_SR_Save()305
6.4.4 OS_CPU_SR_Restore()306
6.4.5 OS_IntCtxSw()306
6.5 INCLUDES.H文件307
第7章 基于AT91M40800的WEB服务器的设计
7.1 基于AT91M40800的WEB服务器系统的组成308
7.1.1 WEB服务器存储器部分的设计309
7.1.2 WEB服务器以太网部分的设计311
7.1.3 WEB服务器LCD显示部分的设计316
7.1.4 WEB服务器键盘接口的设计321
7.2 WEB服务器中TCP/IP协议栈的实现325
7.2.1 ARP协议的实现326
7.2.2 IP协议的实现331
7.2.3 ICMP协议的实现334
7.2.4 UDP协议的实现335
7.2.5 TCP协议的实现337
7.2.6 HTTP协议的实现352
嵌入式系统是继网络技术之后又一个新的技术发展方向。ARM公司的32位IP核因其卓越的性能和良好的扩展性为广大嵌入式系统设计者所喜爱,目前,它在32位RISC处理器市场的占有率已经超过了75%。使用ARM芯片构造嵌入式系统正成为嵌入式系统设计的一个极为重要的分支。
AT91系列微控制器是ATMEL公司推出的采用ARM核的32位微控制器,主要有AT91X408xx、AT91M42800A、AT91M55800、AT91RM3400、AT91SAM7AX和AT91RM9200等6个子系列。其中AT91RM9200嵌入的是ARM9TDMI内核,其他5个系列嵌入的是ARM7TDMI内核。
为了使读者能对AT91系列ARM微控制器有一个全面的了解,本书详细介绍了AT91系列微控制器的体系结构、片内资源、指令集、开发平台、软件编程、操作系统移植等内容,同时结合作者的开发实际,给出了具体的实用程序和设计实例。全书共7章,各章节内容安排如下:
第1章AT91系列微控制器的体系结构。在给出AT91系列微控制器总体结构的基础上,介绍最为常用的AT91X408xx、AT91M55800A和AT91RM9200等3个系列器件的特点、资源和引脚配置等。
第2章AT91系列微控制器的片内资源。其中包括AT91内部的外部总线接口、中断控制器、I/O口、定时器和电源管理等部分的使用和配置方法。
第3章ARM指令集和汇编程序设计。其中包括ARM和Thumb每条指令的编码格式、语法格式、寻址方式、执行的操作、使用方法以及ARM汇编程序设计的基本方法等。
第4章AT91的C/C++编程和调试。其中包括ARM C/C++编译器的使用方法、ARM C/C++的语言扩展以及ARM C/C++的运行库。
第5章μC/OSII在AT91上的移植。介绍了嵌入式操作系统μC/OSII在AT91上的移植和接口函数的编写方法。
第6章AT91应用设计实例。给出了一些详细的AT91编程实例。
第7章基于AT91M40800的嵌入式WEB服务器的设计。详细介绍了以AT91M40800设计嵌入式WEB服务器的硬件电路和TCP/IP协议栈的软件编程方法。
参加本书编写的主要人员有朱义君、杨育红、赵凯、段志英;全书由朱义君修改并定稿。田忠骏、张福新、薛源和季建峰等同志在本书的绘图、初稿录入、校对等方面做了大量的工作,在此对他们表示衷心的感谢。此外,本书的编写参考了国内外众多的书籍及文献,仅将主要参考资料附书后,同时向原作者表示深深的谢意。
由于书中的内容覆盖面较广,目前国内可参考的中文资料较少,加之作者水平有限,错漏之处恳请读者批评指正。
编者
2004年10月