目录
第1章嵌入式系统概述
1.1嵌入式系统定义
1.1.1嵌入式系统的概念
1.1.2嵌入式系统的特点
1.2嵌入式系统的组成
1.2.1嵌入式系统硬件<p>目录</p> <p> </p> <p> </p> <p>第1章嵌入式系统概述</p> <p> </p> <p>1.1嵌入式系统定义</p> <p> </p> <p>1.1.1嵌入式系统的概念</p> <p> </p> <p>1.1.2嵌入式系统的特点</p> <p> </p> <p>1.2嵌入式系统的组成</p> <p> </p> <p>1.2.1嵌入式系统硬件</p> <p> </p> <p>1.2.2嵌入式系统软件</p> <p> </p> <p>1.2.3嵌入式系统的开发系统和开发工具</p> <p> </p> <p>1.3嵌入式系统的应用</p> <p> </p> <p>1.4本章小结</p> <p> </p> <p>1.5习题1</p> <p> </p> <p>第2章ARM微处理器概述与编程模型</p> <p> </p> <p>2.1ARM微处理器概述</p> <p> </p> <p>2.1.1ARM微处理器的特点</p> <p> </p> <p>2.1.2ARM微处理器系列</p> <p> </p> <p>2.2ARM微处理器结构</p> <p> </p> <p>2.2.1RISC体系结构</p> <p> </p> <p>2.2.2ARM微处理器的寄存器结构</p> <p> </p> <p>2.2.3ARM微处理器的指令结构</p> <p> </p> <p>2.3ARM微处理器的工作状态</p> <p> </p> <p>2.4ARM体系结构的存储器格式</p> <p> </p> <p>2.4.1指令长度及数据类型</p> <p> </p> <p>2.4.2存储管理单元</p> <p> </p> <p> </p> <p>2.5处理器模式</p> <p> </p> <p>2.6寄存器组织</p> <p> </p> <p>2.6.1ARM状态下的寄存器组织</p> <p> </p> <p>2.6.2Thumb状态下的寄存器组织</p> <p> </p> <p>2.6.3程序状态寄存器</p> <p> </p> <p> </p> <p>2.7异常</p> <p> </p> <p>2.7.1ARM体系结构所支持的异常类型</p> <p> </p> <p>2.7.2异常优先级</p> <p> </p> <p>2.7.3异常的响应及返回</p> <p> </p> <p>2.7.4应用程序中的异常处理</p> <p> </p> <p> </p> <p>2.8本章小结</p> <p> </p> <p>2.9习题2</p> <p> </p> <p>第3章ARM9指令系统</p> <p> </p> <p>3.1ARM处理器的寻址方式</p> <p> </p> <p>3.1.1寄存器寻址</p> <p> </p> <p>3.1.2立即寻址</p> <p> </p> <p>3.1.3寄存器间接寻址</p> <p> </p> <p>3.1.4变址寻址</p> <p> </p> <p>3.1.5寄存器移位寻址</p> <p> </p> <p>3.1.6多寄存器寻址</p> <p> </p> <p>3.1.7堆栈寻址</p> <p> </p> <p>3.1.8相对寻址</p> <p> </p> <p> </p> <p>3.2ARM指令集</p> <p> </p> <p>3.2.1指令格式</p> <p> </p> <p>3.2.2条件码</p> <p> </p> <p>3.2.3ARM 存储器访问指令</p> <p> </p> <p>3.2.4ARM 数据处理类指令</p> <p> </p> <p>3.2.**RM 分支指令</p> <p> </p> <p>3.2.6ARM 协处理器指令</p> <p> </p> <p>3.2.7ARM 软件中断指令</p> <p> </p> <p> </p> <p>3.3Thumb指令集</p> <p> </p> <p>3.4本章小结</p> <p> </p> <p>3.5习题3</p> <p> </p> <p>第4章嵌入式程序设计基础</p> <p> </p> <p>4.1伪指令</p> <p> </p> <p>4.1.1通用伪指令</p> <p> </p> <p>4.1.2与ARM指令相关的伪指令</p> <p> </p> <p>4.1.3与Thumb指令相关的伪指令</p> <p> </p> <p> </p> <p>4.2汇编语言的语句格式</p> <p> </p> <p>4.2.1书写格式</p> <p> </p> <p>4.2.2汇编语言中表达式和运算符</p> <p> </p> <p> </p> <p>4.3汇编程序应用</p> <p> </p> <p>4.3.1汇编程序基本结构</p> <p> </p> <p>4.3.2子程序调用</p> <p> </p> <p> </p> <p>4.4汇编语言与C/C 的混合编程</p> <p> </p> <p>4.4.1在C/C 程序中内嵌汇编指令的语法格式</p> <p> </p> <p>4.4.2C/C 与汇编语言的混合编程应用</p> <p> </p> <p> </p> <p>4.5本章小结</p> <p> </p> <p>4.6习题4</p> <p> </p> <p>第5章嵌入式内部可编程模块</p> <p> </p> <p>5.1存储控制模块</p> <p> </p> <p>5.1.1存储器控制器</p> <p> </p> <p>5.1.2NAND Flash控制器</p> <p> </p> <p>5.1.3存储器实例</p> <p> </p> <p> </p> <p>5.2GPIO</p> <p> </p> <p>5.2.1端口功能</p> <p> </p> <p>5.2.2端口配置寄存器</p> <p> </p> <p>5.2.3端口其他寄存器</p> <p> </p> <p>5.2.4I/O应用实例</p> <p> </p> <p> </p> <p>5.3中断系统</p> <p> </p> <p>5.3.1中断优先级</p> <p> </p> <p>5.3.2中断控制寄存器</p> <p> </p> <p>5.3.3中断编程实例</p> <p> </p> <p>5.4定时部件</p> <p> </p> <p>5.4.1看门狗定时器原理及实例</p> <p> </p> <p>5.4.2RTC部件</p> <p> </p> <p>5.4.3Timer部件</p> <p> </p> <p>5.4.4定时部件应用实例</p> <p> </p> <p> </p> <p>5.5UART</p> <p> </p> <p>5.5.1UART的操作</p> <p> </p> <p>5.5.2UART接口寄存器</p> <p> </p> <p>5.5.3UART实例</p> <p> </p> <p> </p> <p>5.6ADC及触摸屏接口</p> <p> </p> <p>5.6.1功能描述</p> <p> </p> <p>5.6.2ADC及触摸屏接口特殊寄存器</p> <p> </p> <p>5.6.3A/D转换实例</p> <p> </p> <p> </p> <p>5.7本章小结</p> <p> </p> <p>5.8习题5</p> <p> </p> <p>第6章嵌入式接口技术应用</p> <p> </p> <p>6.1LCD显示器接口</p> <p> </p> <p>6.1.1LCD的控制器</p> <p> </p> <p>6.1.2S3C2440A芯片的LCD专用寄存器</p> <p> </p> <p>6.1.3S3C2440A芯片LCD寄存器的设置</p> <p> </p> <p> </p> <p>6.2I2C总线</p> <p> </p> <p>6.2.1S3C2440A的I2C接口</p> <p> </p> <p>6.2.2I2C总线接口特殊寄存器</p> <p> </p> <p>6.2.3I2C编程举例</p> <p> </p> <p> </p> <p>6.3I2S总线</p> <p> </p> <p>6.3.1发送接收模式</p> <p> </p> <p>6.3.2音频串行接口格式</p> <p> </p> <p>6.3.3I2S总线接口特殊寄存器</p> <p> </p> <p>6.3.4I2S编程实例</p> <p> </p> <p> </p> <p>6.4AC97控制器</p> <p> </p> <p>6.4.1AC97控制器操作</p> <p> </p> <p>6.4.2AC97控制器特殊寄存器</p> <p> </p> <p>6.4.3AC97应用实例</p> <p> </p> <p> </p> <p>6.5本章小结</p> <p> </p> <p>6.6习题6</p> <p> </p> <p>第7章软件开发环境</p> <p> </p> <p>7.1ADS1.2集成开发环境</p> <p> </p> <p>7.1.1使用ADS创建工程</p> <p> </p> <p>7.1.2用AXD进行代码调试</p> <p> </p> <p> </p> <p>7.2嵌入式Linux的交叉编译环境安装</p> <p> </p> <p>7.3本章小结</p> <p> </p> <p>7.4习题7</p> <p> </p> <p>第8章嵌入式系统Boot Loader技术</p> <p> </p> <p>8.1Boot Loader的基本概念</p> <p> </p> <p>8.1.1Boot Loader的相关设备和机制</p> <p> </p> <p>8.1.2Boot Loader的启动过程</p> <p> </p> <p>8.1.3Boot Loader的操作模式</p> <p> </p> <p>8.1.4Boot Loader的总体设计</p> <p> </p> <p> </p> <p>8.2Boot Loader(vivi)的代码分析</p> <p> </p> <p>8.3本章小结</p> <p> </p> <p>8.4习题8</p> <p> </p> <p>第9章嵌入式Linux操作系统移植</p> <p> </p> <p>9.1嵌入式Linux基本概念</p> <p> </p> <p>9.2嵌入式Linux内核移植</p> <p> </p> <p>9.2.1内核修改</p> <p> </p> <p>9.2.2内核配置</p> <p> </p> <p>9.2.3内核编译</p> <p> </p> <p> </p> <p>9.3建立Linux根文件系统</p> <p> </p> <p>9.4下载目标文件</p> <p> </p> <p>9.5本章小结</p> <p> </p> <p>9.6习题 9</p> <p> </p> <p>第10章嵌入式Linux设备驱动程序开发</p> <p> </p> <p>10.1嵌入式Linux驱动程序开发基础</p> <p> </p> <p>10.1.1嵌入式Linux设备驱动程序分类</p> <p> </p> <p>10.1.2*简单的内核模块</p> <p> </p> <p> </p> <p>10.2嵌入式Linux设备驱动重要技术</p> <p> </p> <p>10.2.1内存与I/O端口</p> <p> </p> <p>10.2.2同步机制</p> <p> </p> <p>10.2.3阻塞与非阻塞</p> <p> </p> <p>10.2.4时间问题</p> <p> </p> <p>10.2.5中断处理</p> <p> </p> <p> </p> <p>10.3字符设备驱动程序</p> <p> </p> <p>10.3.1字符设备驱动结构</p> <p> </p> <p>10.3.2字符设备驱动实例——LED驱动</p> <p> </p> <p> </p> <p>10.4网络设备驱动程序</p> <p> </p> <p>10.4.1Linux 网络设备简介</p> <p> </p> <p>10.4.2网络驱动核心数据结构</p> <p> </p> <p>10.4.3网络驱动程序分析</p> <p> </p> <p> </p> <p>10.5设备驱动实例</p> <p> </p> <p>10.5.1ADC设备驱动实例</p> <p> </p> <p>10.5.2PWM设备驱动实例</p> <p> </p> <p>10.5.3触摸屏设备驱动实例</p> <p> </p> <p> </p> <p>10.6本章小结</p> <p> </p> <p>10.7习题10</p> <p> </p> <p>第11章嵌入式Linux应用程序设计</p> <p> </p> <p>11.1嵌入式Linux C语言应用程序开发基础</p> <p> </p> <p>11.1.1编写源程序</p> <p> </p> <p>11.1.2交叉编译程序</p> <p> </p> <p>11.1.3调试程序</p> <p> </p> <p> </p> <p>11.2文件I/O编程</p> <p> </p> <p>11.2.1文件I/O操作例程</p> <p> </p> <p>11.2.2文件I/O操作API</p> <p> </p> <p> </p> <p>11.3网络编程</p> <p> </p> <p>11.3.1网络通信基础及例程</p> <p> </p> <p>11.3.2网络通信API</p> <p> </p> <p> </p> <p>11.4应用实例</p> <p> </p> <p>11.4.1ADC应用实例</p> <p> </p> <p>11.4.2PWM蜂鸣器控制应用实例</p> <p> </p> <p>11.4.3触摸屏应用实例</p> <p> </p> <p> </p> <p>11.5本章小结</p> <p> </p> <p>11.6习题11</p> <p> </p> <p>第12章嵌入式CDIO实训项目</p> <p> </p> <p>实训1ARM汇编基础训练1</p> <p> </p> <p>实训2ARM汇编基础训练2</p> <p> </p> <p>实训3GPIO输入输出实训</p> <p> </p> <p>实训4GPIO定时器中断应用实训</p> <p> </p> <p>实训5直流电机应用实训</p> <p> </p> <p>实训6温度采集应用实训</p> <p> </p> <p>实训7红外通信应用实训</p> <p> </p> <p>实训8CAN总线应用实训</p> <p> </p> <p>参考文献</p>显示全部信息前 言前言
第1版前言前言 <div></div> <div>“嵌入式无处不在”已成为现实。嵌入式系统应用的领域日益广阔,与网络通信、数字家庭、工业控制、国防军事、**系统、安防系统、能源系统、交通系统等行业的融合逐步加深,智能设备终端应用市场的快速发展对嵌入式系统提出了持续需求,使得嵌入式系统产业在****的机遇下飞速发展。因此,系统开设嵌入式系列课程是非常必要的,这样就需要合适的配套教材。鉴于这种情况,笔者参考了大量国内外教材,结合应用型本科院校的特点,在原有第1版教材的基础上进行更新和修订,从而有了更具实践性和应用性的《嵌入式系统原理及应用教程(第2版)》。本书着眼于“应用”,立足于“工程开发”,强调“工程训练”,具有以下特点。1. 综合性嵌入式系统是嵌入式硬件和嵌入式软件的综合体,硬件的设计服务于软件功能,软件的开发也必须考虑硬件资源的有限性。根据嵌入式系统的这一特点,本书采用“ARM9微处理器 Linux操作平台 应用程序设计 CDIO工程实训”的教学体系。2. 基础性本书详细讲解了ARM9体系结构和编程方法,尤其是举例讲解了指令系统中的指令集及汇编语言与C/C 混合编程的方法,以便读者掌握好底层嵌入式开发的技能。3. 实用性本书以S3C2440A芯片和Linux操作系统为例,举例介绍了开发环境的使用与调试方法,详细介绍了嵌入式软件的编程技术。例如介绍了AC97音频控制器设计实例。4. 针对性本书是笔者多年嵌入式教学的总结。主要是针对应用型本科学生实践性的特点,在介绍ARM9微处理器原理及结构的同时,注重各功能模块的应用介绍。5. 工程性本书在第1版教材的基础上,结合CDIO教学模式,增加了嵌入式CDIO实训项目,以提高学生的实践能力,增强学生的工程意识。本书系统介绍嵌入式系统软硬件的组成、工作原理和设计方法。全书分为5部分,共12章,主要内容和篇章结构安排如下。第1部分为理论部分,由第1章组成。介绍嵌入式系统的基本概念,包括嵌入式系统的定义、组成、特点、分类和应用领域。第2部分为基础部分,由第2~6章组成。第2章**讲解ARM9处理器的体系结构; 第3章详细讲解基于ARM的嵌入式处理器指令系统; 第4章讲解嵌入式系统的程序设计基础,包括汇编语言程序设计及与C/C 语言的混合编程技术; 第5、6章详细讲解S3C2440A芯片内部结构、外设及工作原理和应用方法,并辅以实例讲解。第3部分为开发工具部分,由第7章组成,着重讲解ADS1.2集成开发环境及嵌入式Linux的软件开发环境的使用。第4部分为操作系统部分,由第8~11章组成。第8章详细分析嵌入式系统的Boot Loader,第9~11章以实例的方式讲解基于“S3C2440A芯片 Linux操作平台”的设计方法。第5部分为CDIO工程实训,由第12章组成,详细讲解了8个实训实例,学生还可以进行扩展训练。本书由孟祥莲任主编,孙平、王嘉鹏、姜波、于剑光任副主编。由于嵌入式技术发展迅速,加上笔者水平有限,时间仓促,书中难免有疏漏和错误之处,请读者不吝赐教,以便我们在再版的时候及时纠正补充。本书的配套课件、代码等可以从清华大学出版社网站www.tup.com.cn下载,如在本书使用或课件下载中遇到问题,请联系fuhy@tup.tsinghua.edu.cn。编者2017年1月<br /><br /><br /><br /><br />第1版前言<br />“嵌入式无处不在”已成为现实。嵌入式系统应用的领域日益广阔,与网络通信、数字家庭、工业控制、国防军事、**系统、安防系统、能源系统、交通系统等行业融合正在加深,智能设备终端应用市场的快速发展对嵌入式系统提出了持续需求,使得嵌入式系统产业在****的机遇下快速地发展。因此,系统地开设嵌入式系列课程是必要的,这样就需要合适的配套教材,鉴于这种情况,作者参考了大量国内外教材,结合应用型本科院校的特点,编写了《嵌入式系统原理及应用教程》一书。全书着眼于“应用”、立足于“工程开发”,具有以下特点。1. 综合性嵌入式系统是嵌入式硬件和嵌入式软件的综合体,硬件的设计服务于软件功能,软件的开发也必须考虑硬件资源的有限性。根据嵌入式系统的这一特点,本书采用“ARM9处理器 Linux操作平台 应用程序设计”的介绍方法。2. 基础性本书详细地讲解了ARM9处理器的体系结构和编程方法,尤其是举例讲解了指令系统中的指令集及汇编语言与C/C 混合编程的方法,以便读者掌握好底层嵌入式开发的技能。3. 实用性本书以S3C2440A芯片和Linux操作系统为例,举例介绍了开发环境的使用与调试方法,详细介绍了嵌入式软件的编程技术。例如介绍AC97音频控制器和触摸屏的设计实例。4. 针对性本书是编者几年嵌入式教学的总结。主要是针对应用型本科学生实践性强的特点,在介绍ARM9处理器的原理及结构的同时,注重了各功能模块的应用介绍。本书系统地介绍了嵌入式系统软硬件的组成、工作原理和设计方法。全书分为4部分,共11章,主要内容和篇章结构安排如下。第1部分为理论部分,由第1章组成。介绍嵌入式系统的基本概念,包括嵌入式系统的定义、组成、特点、分类和应用领域。第2部分为基本部分,由第2~6章组成。第2章**讲解ARM9处理器的体系结构; 第3章详细讲解基于ARM的嵌入式处理器指令系统; 第4章讲解其嵌入式系统的程序设计基础,包括汇编语言程序设计及与C/C 语言的混合编程技术; 第5~6章详细讲解S3C2440A芯片内部结构、内部外设及工作原理和应用方法,并辅以实例讲解。第3部分为开发工具部分,由第7章组成。着重讲解ADS1.2集成开发环境及嵌入式Linux的软件开发环境的使用。第4部分为操作系统部分,由第8~11章组成。第8章详细分析嵌入式系统的Boot Loader; 第9~11章以实例的方式讲解基于“S3C2440A芯片 Linux操作平台”的设计方法。全书由孟祥莲主编并编写第3~6章,高洪志编写第1~2章,孙平编写第7~8章,朱国晗编写第9~11章。由于嵌入式技术发展迅速,加上作者水平有限,时间仓促,书中难免有疏漏和错误之处,无论如何,请读者不吝赐教,以便我们在改版或再版的时候及时纠正补充。<br />作者2010年8月</div>显示全部信息媒体评论评论免费在线读第3章ARM9指令系统本章介绍ARM处理器的寻址方式、ARM指令集和Thumb指令集。通过对本章的阅读,希望读者能了解ARM微处理器所支持的指令集及具体的使用方法。3.1ARM处理器的寻址方式所谓寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式。目前ARM指令系统支持如下几种常见的寻址方式。3.1.1寄存器寻址寄存器寻址就是利用寄存器中的内容作为操作数,寄存器本身就是操作数地址。这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。例如以下指令:
MOV R2,R3; R2←R3R3中的内容赋给R2
ADDR2,R3,R4; R2←R3+R4R3和R4中的内容相加,结果赋给R2
3.1.2立即寻址立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数没有存储在寄存器或存储器中,而是包含在指令的操作码中,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下指令:
ADDR1,R1,#1234; R1←R1+1234
ADDR1,R1,#0x7f; R1←R1+0x7f
在以上两条指令中,第二个源操作数即为立即数,要求以“#”为前缀,对于以十六进制表示的立即数,还要求在“#”后加上“0x”。3.1.3寄存器间接寻址寄存器间接寻址就是以寄存器中的内容作为操作数的地址,而操作数本身存放在存储器中。例如以下指令:
LDRR1,[R2]; R1←[R2]
STRR1,[R2]; [R2]←R1
**条指令以R2中的内容为地址,将该地址中的数据传送到R1中。第二条指令将R1中的内容传送到以R2中的内容为地址的存储器中。3.1.4变址寻址变址寻址就是将寄存器(该寄存器一般称为基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。采用变址寻址方式的指令有以下几种常见形式,如下所示。
LDR R0,[R1,#8]; R0←[R1+8]
LDR R0,[R1,#8]!; R0←[R1+8],R1←R1+8
LDR R0,[R1],#2; R0←[R1],R1←R1+2