《嵌入式系统开发基础:基于ARM9微处理器C语言程序设计(第四版)/高等学校计算机应用规划教材》对32位精简指令系统嵌入式微处理器S3C2410的硬件系统和C语言驱动程序进行了详细的讲解,书中的源代码和实例程序对学习或从事嵌入式系统设计的读者都有很高的参考价值。在人机界面设计、系统初始化程序编写、仿真器设置和复杂工程项目构建等方面给出了简化做法,使初学者能够轻松、快速地掌握嵌入式系统设计方法。本书以实用技术为主,内容通俗易懂,实例丰富,特别适合初学者和从事嵌入式系统设计工作的读者使用。本书配套的电子课件、配套实验讲义、各章的习题答案和部分工具软件可以到http://www.tupwk.com.cn网站下载。
嵌入式控制系统的教学现状
嵌入式控制系统的教学一般分为两个层次。
第一个层次,完成以MCS-51为代表的8位单片机教学。这在各个高校都得到了重视,大多数学校安排理论课64学时,实验课32学时,课时比较充足。在这个层次上,无论是讲授C语言程序设计,还是讲授汇编语言程序设计,可供选择的教材都比较多。
第二个层次,也就是以32位ARM为代表的嵌入式控制系统教学。目前,许多学校都没有开设,主要有以下3个原因。
一是缺乏师资。毕竟,以ARM为代表的嵌入式控制系统设计是20世纪90年代才发展起来的新技术,它不仅包括高性能、功能丰富的硬件平台,而且软件开发的难度和嵌入式操作系统的应用,都对教师提出了更高的要求。
二是在课时安排上也有一定困难。这么复杂的软硬件系统,包括嵌入式操作系统,即使是用96(包括实验)学时,也不一定能讲深讲透。况且,整个教学计划中也没有很多的时间。
三是没有合适的教材。特别是深入浅出、条理分明、适应本科生水平、课时比较合理的教材非常少。
为了克服上述困难,也为了满足教学需要,作者根据多年科研和教学经验编写了本书。
作者的想法是:在32位ARM为代表的嵌入式控制系统教学中,不讲述带嵌入式操作系统的部分,而选择一种有代表性的32位单片机(类似8位机中的MCS-51)。这里选择韩国三星S3C2410 ARM9单片机。在ADS1.2 For Windows集成开发环境中,用C语言完成嵌入式控制系统的开发工作。理论课内容安排48学时,实验课时间和内容由教师根据各校的时间和条件自行决定。
在48学时(16周,每周3学时)内,集中将S3C2410的最基本硬件结构、软件资源学深学透,学会用C语言编写应用程序。在用C语言编写驱动程序时,尽量借助系统资源,参考例子程序,减少设计者的工作量。通过较短时间的学习,学生可以很快掌握嵌入式控制系统设计的方法,完成嵌入式控制系统的设计工作。
本书篇幅虽然不长,但程序源代码较多,对于从事嵌入式系统开发和学习来说是非常宝贵的资源。但是,如果在课堂上讲解和分析这些代码,学时显然不够。建议教师主要讲解S3C2410的硬件资源和编程方法,具体程序代码留给学生课后慢慢消化理解。
教学实验平台介绍
有条件的学校,在完成理论课教学的同时,应安排一定的实验课,教学效果会更好。
作者接触的ARM9(SAMSUNG 2410)教学实验系统有深圳英蓓特信息技术有限公司(http://www.embedinfo.com)的Embest EDUKIT-Ⅱ/Ⅲ、北京博创科技集团(http://www.up- tech.com)的UP-NETARM 2410教学实验系统、北京精仪达盛科技公司(http://www. techshine.com)的EL-ARM-830教学实验系统。上述教学实验系统都有基于ARM9系统资源的C语言实验程序例子,使用方便,可供选择。随书下载的实验讲义有两册:一是基于深圳英蓓特信息技术有限公司(http://www.embedinfo.com)的Embest EDUKIT-Ⅱ/Ⅲ,实验时应配合Embest EDUKIT-Ⅱ/Ⅲ教学实验系统平台,并安装Embest IDE;二是基于北京精仪达盛科技公司(http://www.techshine.com)的EL-ARM-830教学实验系统,实验时应配合EL-ARM-830教学实验系统平台。两套实验系统程序的执行都要去掉目录中的中文目录,并尽量缩短目录深度。
本书主要内容和学习本书所需基础知识
第1章:简单讲述嵌入式控制系统的定义、研究现状和研究方法。
第2章:较详细地讲述基于ARM芯片的集成开发环境ADS 1.2的创建和使用。
第3章:讲述ARM9芯片S3C2410的片上资源和编程参考项目2410test.mcp。
第4章:讲述S3C2410的I/O口和I/O口操作。
第5章:讲述S3C2410的中断系统及编程。
第6章:讲述S3C2410的串口UART。
第7章:讲述S3C2410的A/D和D/A转换控制。
第8章:讲述ADC和触摸屏控制。
第9章:讲述S3C2410的实时时钟(RTC)和编程。
第10章:讲述直接存储器存取(DMA)的工作原理及S3C2410的DMA控制器。
第11章:讲述脉宽调制(PWM)的工作原理及S3C2410的PWM控制器。
第12章:讲述看门狗(Watchdog)电路的工作原理及S3C2410的Watchdog控制。
第13章:讲述双向二线制同步串行总线 I C及S3C2410的I C控制电路。
第14章:讲述数字音频信号(I S)和S3C2410的I S控制。
第15章:对串行外设接口(SPI)进行了介绍。
第16章:讲述S3C2410的人机界面设计。
第17章:讲述程序的调试、烧写和运行。
第18章:项目开发实训。
以上各章内容除第1~5章外,其他各章内容基本独立。教师如果觉得在48学时内完成教学比较困难,除第2、3、4、5章和第16、17章作为重点建议必讲之外,其他各章可根据情况有选择地删节。
随书提供软件包一个,其中有本书的电子课件、S3C2410使用手册、实验讲义、各章习题答案、ADS1.2、参考项目2410test.mcp、通用字模提取程序和部分例子程序,可以在清华大学出版社网站(http://www.tupwk.com.cn)上免费下载。
第四版课件由孙颖馨老师在第三版基础上重新进行了制作,作者对她的工作表示感谢。
本书的特点是通过深入浅出的讲述,将基于ARM9的嵌入式控制系统设计方法教给学生,使学生能够在最短的时间内入门。
学习本书至少要有C语言基础,如果有MCS-51单片机基础,学习本书就会更加轻松。
第四版与第三版区别
为了满足教学急需,第三版出书时间较紧,书中难免有错误或不足之处,在第四版中作者对书中内容进行了仔细斟酌研究,更正了已发现的错误,并根据多年教学经验和指导学生参加全国和省级“嵌入式”和“电子设计”大赛体会,删除了一些不适用的章节,增加了一部分新内容。
书中实验程序的注释是本书的重要内容,仔细阅读这些注释对于理解书中内容和练习编程非常重要。
为了使读者正确理解原程序,凡是原参考文献给出的注释,书中仍然保留英文,凡是作者给出的注释,用中文给出。
为了提高学生实践动手能力,第四版增加了一章实训内容(第18章项目开发实训)。
根据读者意见,为了使版面工整,方便阅读,注释采用分散方式对齐。
虽然做了很大努力,并请孙俊喜、才华两位教授对书中内容进行审核校对,但百密一疏,难免有考虑不周或错误之处,真诚欢迎读者多提宝贵意见和建议。我们的信箱是huchenhao@263.net,电话是010-62796045。
本书通用字模提取程序密码:194512125019。
侯殿有
2015年6月
第1章 嵌入式控制系统简介1
1.1 单片机和嵌入式控制系统的
定义和分类1
1.1.1 单片机和嵌入式控制系统
的定义1
1.1.2 嵌入式控制系统的设计方法2
1.1.3 嵌入式控制系统各种设计方法
的特点2
1.2 ARM处理器简介4
1.2.1 ARM体系结构的发展4
1.2.2 ARM体系结构的存储器格式8
1.3 习题9
第2章 ADS1.2开发环境
创建与简介10
2.1 ADS1.2开发环境创建10
2.1.1 ADS1.2概述10
2.1.2 ADS1.2的安装12
2.2 ADS集成开发环境的使用14
2.2.1 建立一个新工程14
2.2.2 开发环境设置14
2.2.3 其他开发环境介绍18
2.3 用AXD进行代码仿真、
调试19
2.3.1 AXD简介19
2.3.2 JTAG概述21
2.3.3 Nor和Nand Flash的区别和
使用22
2.3.4 烧写Flash24
2.4 ARM C语言程序的基本规则和
系统初始化程序24
2.4.1 ARM使用C语言编程
基本规则24
2.4.2 初始化程序和开发环境设置25
2.5 习题27
第3章 ARM9微处理器S3C2410
资源28
3.1 S3C2410处理器介绍28
3.1.1 AMBA、AHB、APB总线
特点28
3.1.2 S3C2410处理器体系结构30
3.1.3 S3C2410处理器管理系统30
3.1.4 S3C2410处理器存储器
映射30
3.1.5 S3C2410处理器时钟和
电源管理31
3.2 S3C2410处理器片上资源的
定义和使用33
3.3 参考软件资源2410test.mcp34
3.4 几个常用的输入/输出函数39
3.5 def.h头文件45
3.6 习题46
第4章 S3C2410的I/O口和 I/O口
操作47
4.1 S3C2410 I/O口描述47
4.2 I/O端口控制寄存器48
4.2.1 端口A控制寄存器和
功能配置48
4.2.2 端口B控制寄存器和
功能配置49
4.2.3 端口C控制寄存器和
功能配置50
4.2.4 端口D控制寄存器和
功能配置52
4.2.5 端口E控制寄存器和
功能配置53
4.2.6 端口F控制寄存器和
功能配置54
4.2.7 端口G控制寄存器和
功能配置55
4.2.8 端口H控制寄存器和
功能配置56
4.3 I/O口控制C语言编程实例57
4.3.1 硬件电路57
4.3.2 参考程序58
4.4 习题60
第5章 S3C2410的中断系统61
5.1 S3C2410的中断源61
5.2 S3C2410的中断处理62
5.3 中断控制63
5.3.1 中断模式(INTMOD)
寄存器63
5.3.2 中断挂起寄存器和中断源
挂起寄存器64
5.3.3 中断屏蔽寄存器(INTMSK)66
5.3.4 中断优先级寄存器
(PRIORITY)66
5.4 子中断源的中断控制69
5.5 中断向量设置70
5.6 其他常用寄存器70
5.7 中断程序编写中需注意的
问题72
5.8 中断实验和中断程序编写74
5.9 习题78
第6章 S3C2410的串口UART79
6.1 S3C2410的串口UART概述79
6.1.1 S3C2410串行通信(UART)
单元79
6.1.2 波特率的产生79
6.1.3 UART通信操作80
6.2 UART的控制寄存器80
6.2.1 UART线路控制寄存器
ULCONn(n=0~2)80
6.2.2 UART控制寄存器
UCONn(n=0~2)81
6.2.3 UART FIFO控制寄存器
UFCONn(n=0~2)81
6.2.4 UART调制解调器控制寄存器
UMCONn(n=0或1)81
6.2.5 发送寄存器UTXHn(n=0~2)和接收寄存器URXHn(n=0~2)82
6.2.6 UART TX/RX状态寄存器
UTRSTATn(n=0~2)82
6.2.7 S3C2410 UART使用的
端口82
6.3 UART通信程序例子82
6.3.1 RS232接口电路83
6.3.2 UART实验程序83
6.4 习题89
第7章 S3C2410的A/D、D/A
转换控制90
7.1 S3C2410的A/D、D/A
转换控制90
7.1.1 A/D转换控制寄存器
(ADCCON)90
7.1.2 A/D转换控制程序的
编制步骤91
7.2 参考程序91
7.3 习题94
第8章 触摸屏控制95
8.1 触摸屏结构和工作原理95
8.1.1 触摸屏工作原理95
8.1.2 S3C2410的触摸屏控制97
8.2 触摸屏控制程序100
8.3 习题102
第9章 S3C2410的实时
时钟(RTC)103
9.1 实时时钟在嵌入式系统中的
作用103
9.1.1 S3C2410的实时时钟单元103
9.1.2 S3C2410的实时时钟
寄存器104
9.2 参考程序及说明106
9.3 习题112
第10章 直接存储器存取(DMA)
控制113
10.1 DMA基础知识113
10.2 S3C2410的DMA控制器115
10.3 DMA方式实现存储器到
存储器的数据传送117
10.3.1 头文件定义和函数声明118
10.3.2 DMA方式实现存储器到
存储器的数据传送118
10.4 习题123
第11章 S3C2410的PWM控制124
11.1 PWM定时器概述124
11.1.1 什么是脉宽调制124
11.1.2 S3C2410的脉宽调制
PWM控制124
11.1.3 S3C2410定时器特性126
11.1.4 定时器操作示例127
11.1.5 死区生成器127
11.2 PWM输出电平控制128
11.2.1 PWM工作原理128
11.2.2 PWM输出控制129
11.3 PWM定时器控制寄存器129
11.3.1 定时器配置寄存器0129
11.3.2 定时器配置寄存器1130
11.3.3 减法缓冲寄存器和比较缓
冲寄存器130
11.3.4 定时器控制寄存器131
11.3.5 减法计数器观察寄存器131
11.4 PWM参考程序132
11.5 习题138
第12章 S3C2410的看门狗
电路控制140
12.1 看门狗电路的功能及
工作原理140
12.1.1 S3C2410的看门狗控制140
12.1.2 看门狗定时器控制
寄存器141
12.2 参考程序及说明142
12.3 习题143
第13章 S3C2410的I2C
总线控制144
13.1 I2C总线工作原理144
13.2 EEPROM读/写操作147
13.2.1 AT24C04结构与
应用简述147
13.2.2 设备地址(DADDR)148
13.2.3 AT24CXX的数据
操作格式148
13.3 S3C2410处理器I2C接口148
13.3.1 S3C2410 I2C接口简介149
13.3.2 使用S3C2410 I2C总线读/
写方法150
13.4 S3C2410 I2C总线读/写参考
程序编写150
13.5 I2C实验程序151
13.6 习题155
第14章 I2S介绍和S3C2410的I2S
控制156
14.1 数字音频信号(I2S)介绍156
14.2 数字音频计算机处理157
14.2.1 采样频率和采样精度157
14.2.2 音频编码158
14.2.3 I2S数字音频接口158
14.3 音频芯片UDA1341TS
介绍158
14.3.1 硬件结构158
14.3.2 S3C2410和UDA1341TS的
连接160
14.3.3 UDA1341TS的
软件编程161
14.3.4 UDA1341TS DATA0
编程162
14.3.5 UDA1341TS DATA1
编程165
14.3.6 UDA1341TS 控制寄存器
STATUS编程165
14.4 S3C2410中I2S总线控制
寄存器167
14.5 WAV声音格式文件168
14.6 I2S实验参考程序169
14.7 习题177
第15章 串行外设接口(SPI)介绍178
15.1 SPI接口及操作178
15.1.1 SPI接口原理178
15.1.2 SPI接口特性180
15.2 SPI接口控制寄存器180
15.2.1 SPI控制寄存器
(SPICONn)180
15.2.2 SPI状态寄存器
(SPSTAn)180
15.2.3 SPI引脚控制寄存器
(SPPINn)181
15.2.4 SPI波特率预分频寄存器
(SPPREn)181
15.2.5 SPI发送数据寄存器
(SPTDATn)182
15.2.6 SPI接收数据寄存器
(SPRDATn)182
15.2.7 SPI接口操作182
15.2.8 SPI接口编程182
15.2.9 SPI口的传输格式183
15.2.10 SPI通信模式184
15.3 参考程序184
15.4 习题188
第16章 S3C2410的人机
界面设计189
16.1 英文字符存储与显示原理189
16.1.1 ASCII码189
16.1.2 英文字符的显示190
16.2 汉字在计算机中的
表示和显示191
16.2.1 汉字的内码和区位码191
16.2.2 汉字的显示192
16.2.3 其他西文字符在计算机中的
存储和显示193
16.2.4 屏幕上“打点”194
16.2.5 字模提取与建立小字库
概述194
16.3 字模提取与建立小字库195
16.3.1 用C语言提取字模和建立
小字库195
16.3.2 用Delphi提取字模和建立
小字库199
16.3.3 通用字模提取程序MinFonBase
使用说明209
16.4 S3C2410显示控制特点210
16.4.1 STN LCD显示器210
16.4.2 TFT LCD显示器211
16.4.3 LCD控制器特点211
16.5 S3C2410的LCD控制信号和
外部引脚211
16.5.1 LCD专用控制寄存器213
16.5.2 LCD专用控制寄存器的
设置218
16.5.3 LCD屏幕“打点”程序221
16.6 S3C2410的LCD
驱动程序224
16.6.1 S3C2410的LCD驱动程序
编写步骤225
16.6.2 利用S3C2410显示汉字与
曲线226
16.7 S3C2410在LCD驱动方面的
其他应用234
16.7.1 HD66421的硬件简介235
16.7.2 HD66421的软件编程236
16.7.3 HD66421与微处理器接口及
驱动程序240
16.8 在LCD屏上按一定格式显示
汉字和曲线252
16.9 S3C6410 (ARM11)的汉字和
曲线显示253
16.9.1 S3C6410 (ARM11)简介253
16.9.2 S3C6410(ARM11)的汉字和
曲线显示254
16.10 习题262
第17章 程序的调试、运行和
烧写263
17.1 VIVI软件的运行和使用263
17.1.1 VIVI软件的运行263
17.1.2 VIVI的几个常用命令263
17.2 VIVI软件的安装265
17.3 程序的调试运行267
17.4 程序的烧写275
17.5 习题278
第18章 项目开发实例279
18.1 实例目的和软硬件准备279
18.1.1 实例目的279
18.1.2 软硬件准备279
18.2 字模提取、建小字库279
18.2.1 汉字字模提取、建小汉
字库279
18.2.2 西文和数学符号字模
提取280
18.2.3 ASCII码字模处理、其他
图形处理282
18.3 项目构建282
18.3.1 项目结构282
18.3.2 main.c程序简单介绍283
18.4 项目调试284
18.4.1 开发环境设置285
18.4.2 项目编译289
18.4.3 项目调试290
18.5 项目烧写(固化)293
参考文献296