图书目录

第1章 单片机概论1

1.1 单片机概念1

1.2 单片机的开发方法2

1.3 单片机的广泛选择3

1.4 Freescale单片机4

1.5 MC68HC11系列单片机5

1.6 16位单片机7

1.6.1 MC68HC12系列单片机7

1.6.2 MC9S12系列单片机7

1.7 双核单片机10

1.7.1 双核单片机系列12

1.7.2 使用CPU V1的双核单片机系列12

1.7.3 使用CPU V2内核的S12X系列单片机14

1.7.4 S12XE系列单片机14

1.8 支持FlexRay通信协议的单片机15

1.8.1 FlaxRay通信协议15

1.8.2 S12XF系列单片机16

1.9 S12XS系列单片机17

1.10 8位单片机18

1.10.1 HC08Q系列单片机18

1.10.2 S08系列单片机21

1.11 32位单片机22

1.11.1 以68K、CPU32为CPU的32位单片机22

1.11.2 以ColdFire为CPU的32位单片机23

1.11.3 用于控制的以PowerPC为CPU的32位单片机24

1.11.4 用于通信的以PowerPC为CPU的32位单片机24

1.11.5 ARM系列32位单片机25

1.11.6 M.Core(C.Core)26

1.12 Freescale的DSP型单片机26

1.12.1 普通16位DSP型单片机27

1.12.2 使用增强型内核的16位DSP型单片机30

1.12.3 StarCore系列DSP型16位单片机30

1.12.4 24位的DSP型单片机31

1.13 相关软件开发工具32

1.14 单片机中的新技术32

第2章 单片机基础知识35

2.1 数的表示35

2.2 从门电路到逻辑运算单元35

2.2.1 与非门和或非门36

2.2.2 三态门37

2.2.3 与门和或门38

2.2.4 异或门38

2.2.5 组合逻辑电路38

2.2.6 组合运算电路39

2.2.7 D触发器与时序电路40

2.2.8 算术逻辑单元示意41

2.3 CPU的构成43

2.4 堆栈45

2.5 CPU的核心寄存器堆45

2.6 中断46

2.6.1 中断源46

2.6.2 中断标志46

2.6.3 中断控制46

2.6.4 中断锁存与中断应答47

2.6.5 中断与堆栈47

2.6.6 中断向量48

2.6.7 中断嵌套48

2.6.8 中断优先级49

2.7 存储器49

2.7.1 随机存储器49

2.7.2 Flash存储器49

2.8 外设50

第3章 单片机基本系统51

3.1 16位单片机51

3.2 单片机基本硬件系统52

3.2.1 S12XS系列单片机53

3.2.2 MC9S12XS基本硬件系统57

3.2.3 与PC连接59

3.2.4 PC串口设置61

3.3 体验监控程序62

3.4 MC9S12XS单片机系统的硬件电路设计66

3.4.1 电源电路66

3.4.2 复位电路和BDM引脚67

3.4.3 时钟电路69

3.4.4 串行口的RS-232驱动电路70

3.4.5 BDM接口70

3.4.6 单片机并行口及驱动能力71

3.4.7 调试显示72

第4章 微处理器结构和指令集73

4.1 微处理器的内部寄存器结构73

4.1.1 典型的8位微处理器73

4.1.2 典型的16位微处理器73

4.1.3 32位CPU与16位CPU的对比75

4.1.4 8位/16位单片机的基本内存空间分配76

4.2 S12X汇编指令集77

4.3 指令按功能分类78

4.3.1 数据传送指令78

4.3.2 算术与逻辑运算指令80

4.3.3 程序控制指令84

4.4 指令按寻址方式分类87

4.5 汇编指令表89

4.6 指令的机器码组织90

4.7 用汇编语言编写程序91

4.7.1 汇编程序的格式91

4.7.2 汇编管理指令91

4.8 汇编语言程序设计举例92

4.9 码的转换类子程序95

4.10 汇编语言编程技巧97

4.11 进一步学习98

第5章 复位、中断及存储空间的扩展100

5.1 复位和中断100

5.2 寻址空间的扩展104

5.3 寻址空间的管理107

5.3.1 给连续存储空间分区107

5.3.2 闪存页面管理寄存器PPage 107

5.3.3 数据闪存页面管理寄存器EPage 108

5.3.4 RAM页面管理寄存器RPage 109

5.3.5 子程序远程调用111

5.4 存储器的可靠性113

5.5 以存储器为核心制定解决方案114

5.5.1 选择结构简单的CPU116

5.5.2 片内存储器资源管理技术116

5.5.3 避免使用浮点数和浮点运算的方法117

5.5.4 使用实时操作系统118

第6章 异步串行通信120

6.1 串行通信协议RS-232标准120

6.2 SCI功能简介124

6.3 SCI寄存器125

6.3.1 波特率寄存器126

6.3.2 串行通信控制寄存器1127

6.3.3 串行通信控制寄存器2127

6.3.4 串行通信状态寄存器1128

6.3.5 串行通信状态寄存器2128

6.3.6 串行通信数据寄存器129

6.4 SCI的软件开发方法130

6.4.1 SCI的初始化130

6.4.2 SCI的查询方式131

6.4.3 SCI的中断方式131

6.5 SCI应用133

第7章 用C语言开发应用程序137

7.1 C语言是开发单片机应用软件的有力工具137

7.2 开发嵌入式应用的C编译器的特点138

7.2.1 编译过程与集成开发环境139

7.2.2 不要使用初始化变量140

7.2.3 注意变量的数据类型141

7.2.4 注意函数的可重入性143

7.3 建立C语言程序运行环境143

7.4 应用程序的模块化146

7.5 合理使用全局变量和局部变量147

7.6 函数的结构与函数间参数的传递148

7.7 在C程序中直接操作硬件150

7.8 程序模块的框架与组织151

7.9 程序的链接与定位152

7.10 MISRA标准C153

第8章 监控程序与BDM原理156

8.1 单片机开发工具156

8.2 监控程序157

8.3 建立单片机运行环境157

8.3.1 堆栈指针初始化158

8.3.2 串行口初始化159

8.3.3 人机对话159

8.3.4 命令字与跳转表161

8.4 建立CPU在内存中的固定影像161

8.5 执行程序162

8.6 显示和修改CPU寄存器163

8.7 显示与修改内存164

8.8 向RAM下载程序165

8.9 闪存的擦除与写入166

8.10 断点与单步执行169

8.11 中断向量表管理170

8.12 监控程序的链接与定位171

8.13 用户可以使用的存储空间171

8.14 系统调用表172

8.15 BDM调试方法172

8.15.1 单线通信和通信建立机制173

8.15.2 BDM基本操作--读写单字节174

8.15.3 BDM接口175

8.15.4 BDM命令字176

8.15.5 BDM指令基本结构177

8.15.6 TBDML工具178

第9章 使用嵌入式实时操作系统179

9.1 移植 μC/OS-II181

9.1.1 根据应用定义内核的大小和功能182

9.1.2 修改OS_CPU.H文件184

9.1.3 编写OS_CPU_C.C文件187

9.1.4 产生时钟节拍中断197

9.2 写应用程序200

9.2.1 主程序main.c200

9.2.2 3个任务203

9.2.3 链接与程序定位203

9.3 精心分配RAM资源206

9.3.1 RAM空间的分页管理206

9.3.2 估算μC/OS-II占用的RAM资源206

9.3.3 估算内核占用RAM空间举例212

第10章 单片机片内外设模块214

10.1 并行I/O214

10.2 同步串行外设接口SPI215

10.2.1 SPI的数据流动216

10.2.2 SPI功能217

10.2.3 SPI引脚217

10.2.4 SPI寄存器219

10.2.5 SPI接口编程范例222

10.3 ATD转换模块223

10.3.1 ATD转换模块简述223

10.3.2 ATD转换模块寄存器223

10.3.3 ATD模块编程范例230

10.4 周期中断定时器PIT234

10.4.1 周期中断定时器简介234

10.4.2 周期中断定时器寄存器235

10.4.3 PIT模块编程范例238

10.5 时钟产生器模块239

10.5.1 与时钟相关的寄存器239

10.5.2 系统时钟初始化242

第11章 单片机软件开发工具使用入门243

11.1 商用软件开发工具CODEWARRIOR FOR HCS12243

11.2 安装CODEWARRIOR244

11.3 建立一个简单的工程244

11.4 自动生成的文件系统249

11.5 写一个汇编程序250

11.6 编写一个简单的C程序251

11.7 再写一个能看到演示效果的C程序252

11.8 增加新程序模块253

11.9 定义装载地址和复位向量253

第12章 S12实验开发系统及实验指导255

12.1 S12 实验开发系统简介256

12.2 S12实验系统设计框架257

12.3 基于S12实验开发系统的实验261

实验1 熟悉实验环境261

实验2 S12汇编语言基础262

实验3 熟悉BDM工具的使用262

实验4 C程序编写263

实验5 并行IO口及IRQ中断263

实验6 SCI串行口实验265

实验7 用周期中断定时器(PIT)实现精确定时265

实验8 A/D转换实验266

实验9 SPI同步串行外设接口266

实验10 KEYBOARD实验269

实验11 动态数码管的显示269

实验12 uC/OS-II在S12上的移植270

实验13 综合实验--uC/OS-II下多I/O任务实现270

第13章 单片机应用中的电磁兼容问题271

13.1 电磁兼容基本概念271

13.2 电磁兼容组织与标准272

13.3 单片机系统的电磁兼容问题274

13.4 噪声的来源与传输275

13.4.1 信号线间交叉干扰276

13.4.2 来自电源的噪声277

13.5 印刷线路板EMC设计278

13.5.1 元件的布置279

13.5.2 印刷线路板接地线的处理279

13.5.3 多层板设计280

13.6 常用抗干扰器件281

13.7 印刷线路板设计中控制噪声的经验284

13.8 单片机自身的抗干扰措施285

附录A MC9S12XS128监控程序289附录B S12X CPU汇编指令表310附录C CPU12指令机器码表334参考文献338第1章 嵌入式系统导论1

1.1 概述1

1.1.1 什么是嵌入式系统1

1.1.2 嵌入式系统的特点及分类2

1.2 嵌入式微处理器和嵌入式操作系统4

1.2.1 嵌入式微处理器4

1.2.2 嵌入式操作系统5

1.3 嵌入式系统设计过程9

1.3.1 需求分析10

1.3.2 规格说明13

1.3.3 体系结构设计13

1.3.4 设计硬件构件和软件构件15

1.3.5 系统集成15

1.3.6 系统测试15

小结16

习题16

第2章 ARM/Thumb微处理器结构及指令系统17

2.1 ARM微处理器概述17

2.1.1 ARM系列微处理器17

2.1.2 RISC体系结构20

2.1.3 ARM和Thumb状态21

2.1.4 寄存器21

2.1.5 ARM指令集概述21

2.1.6 Thumb指令集概述21

2.2 ARM微处理器体系结构22

2.2.1 数据类型22

2.2.2 ARM微处理器的工作状态22

2.2.3 ARM体系结构的存储器格式23

2.2.4 处理器模式23

2.2.5 寄存器组织24

2.2.6 异常28

2.3 ARM/Thumb指令系统34

2.3.1 ARM处理器寻址方式34

2.3.2 ARM指令集介绍36

2.3.3 Thumb指令集介绍54

小结55

习题55

第3章 程序设计基础56

3.1 GCC简介56

3.1.1 GCC组成56

3.1.2 GCC编译程序的基本过程57

3.2 C/C++交叉编译器arm-elf-gcc58

3.2.1 概述58

3.2.2 命令使用60

3.3 交叉连接器arm-elf-ld62

3.3.1 概述62

3.3.2 命令使用63

3.3.3 linkcmds链接命令文件64

3.4 工程管理器make70

3.4.1 概述70

3.4.2 命令使用71

3.4.3 编写一个makefile72

3.5 交叉汇编器 arm-elf-as76

3.5.1 概述76

3.5.2 命令使用77

3.6 汇编语言编程78

3.6.1 汇编语言78

3.6.2 宏语句与条件汇编83

3.6.3 模块化程序设计86

3.6.4 内存模式86

3.6.5 StrongARM和ARM786

3.7 简单程序设计88

3.7.1 顺序程序设计88

3.7.2 分支程序设计89

3.7.3 循环程序设计90

3.7.4 子程序设计91

3.8 混合语言编程92

3.8.1 如何在C语言内嵌汇编语言93

3.8.2 C与汇编相互调用96

小结99

习题99

第4章 S3C44B0X CPU管理及附加电路101

4.1 S3C44B0X简介101

4.2 时钟和功耗管理109

4.2.1 概述109

4.2.2 寄存器定义111

4.2.3 时钟与电源管理编程113

4.3 CPU Wrapper和总线特性114

4.3.1 概述114

4.3.2 内部SRAM115

4.3.3 总线优先级115

4.3.4 写缓冲区操作116

4.3.5 特殊寄存器116

4.4 存储器管理118

4.5 存储时序图123

4.6 MICETEK EV44B0II开发板简介126

4.6.1 存储地址空间分配126

4.6.2 I/O口配置128

4.6.3 电源、时钟及复位电路130

4.6.4 MBL(Micetek Boot Loader)介绍130

小结131

习题131

第5章 S3C44B0X接口电路设计与编程132

5.1 存储器电路设计及编程132

5.1.1 SDRAM KM416S4020B芯片132

5.1.2 Flash 存储器132

5.1.3 存储器与CPU的连接137

5.1.4 SDRAM存储器接口电路与编程138

5.1.5 Flash 存储器接口电路与编程139

5.2 中断系统电路设计及编程141

5.2.1 S3C44B0X中断概述141

5.2.2 中断源及中断模式142

5.2.3 中断请求及允许143

5.2.4 中断判优143

5.2.5 IRQ中断响应模式145

5.2.6 中断及异常响应处理过程150

5.2.7 中断特殊寄存器154

5.2.8 中断程序应用编程159

5.3 通用I/O接口电路设计及编程161

5.3.1 概述161

5.3.2 端口控制寄存器165

5.3.3 LED接口电路设计及编程166

5.3.4 键盘接口电路设计及编程167

5.4 DMA接口电路原理及编程169

5.4.1 S3C44B0X DMA控制器结构170

5.4.2 外部DMA请求/应答协议171

5.4.3 DMA传输模式172

5.4.4 DMA请求源的选择173

5.4.5 DMA自动重装模式173

5.4.6 S3C44B0X芯片的DMA寄存器174

5.4.7 S3C44B0X DMA编程177

5.5 PWM计时器接口电路原理及编程180

5.5.1 概述180

5.5.2 PWM计时器操作181

5.5.3 PWM计时器控制寄存器186

5.5.4 PWM计时器编程188

5.6 看门狗计时器接口电路原理及编程190

5.6.1 概述190

5.6.2 WDT计时器控制寄存器190

5.6.3 WDT计时器编程191

5.7 日历时钟接口电路设计及编程192

5.7.1 概述192

5.7.2 日历时钟192

5.7.3 日历时钟寄存器定义194

5.7.4 日历时钟接口电路设计及编程197

5.8 LCD控制器198

5.8.1 LCD工作原理199

5.8.2 S3C44B0X的内部LCD控制器199

5.8.3 LCD控制器的操作201

5.8.4 LCD控制器专用寄存器203

5.8.5 LCD接口电路设计及编程209

5.9 触摸屏电路设计及编程213

5.9.1 触摸屏概述213

5.9.2 电阻触摸屏原理213

5.9.3 触摸屏电路控制213

5.9.4 编程217

5.9.5 触摸屏与显示器的配合218

5.10 异步串行通信接口219

5.10.1 简述219

5.10.2 中断/DMA请求产生器220

5.10.3 UART错误状态FIFO220

5.10.4 UART寄存器221

5.10.5 编程225

5.11 A/D转换器227

5.11.1 A/D转换器概述227

5.11.2 ADC的相关寄存器228

5.11.3 A/D转换器电路设计及编程229

5.12 D/A转换器230

5.12.1 D/A转换器工作原理230

5.12.2 DAC0832芯片231

5.13 IIS总线接口234

5.13.1 音频系统简介234

5.13.2 IIS总线概述234

5.13.3 传输方式235

5.13.4 声音串口格式236

5.13.5 采样频率和主时钟237

5.13.6 IIS操作238

5.13.7 IIS总线接口寄存器238

5.13.8 UDA1341TS概述240

5.13.9 IIS接口及编程246

小结252

习题252

第6章 嵌入式Linux开发254

  6.1 嵌入式Linux概况254

6.1.1 嵌入式Linux254

6.1.2 嵌入式Linux的组成257

6.1.3 嵌入式Linux的版本257

  6.2 μCLinux 开发介绍258

6.2.1 启动模块258

6.2.2 内核初始化259

6.2.3 系统调用处理/异常处理259

6.2.4 驱动程序259

6.2.5 文件系统260

6.2.6 内存管理260

6.2.7 进程管理261

6.2.8 运行时间库及应用程序261

  6.3 μCLinux启动过程263

  6.4 开发工具介绍266

6.4.1 安装267

6.4.2 开发环境的建立267

6.4.3 调试方法268

  6.5 内核的配置和编译272

6.5.1 配置内核272

6.5.2 编译内核274

  6.6 内核的调试274

6.6.1 下载μCLinux内核274

6.6.2 几个调试窗口274

  小结278

  习题278

第7章 进程/线程管理279

  7.1 进程概念及组成279

7.1.1 进程概念279

7.1.2 进程的组成279

  7.2 进程调度280

7.2.1 信号280

7.2.2 进程状态283

7.2.3 进程调度284

  7.3 进程运行和控制285

  7.4 进程通信与同步286

7.4.1 进程通信286

7.4.2 进程同步288

  7.5 线程概念及分类288

7.5.1 线程特点288

7.5.2 线程的基本概念289

7.5.3 线程的分类289

  7.6 线程基础290

7.6.1 线程的基本操作函数290

7.6.2 简单的多线程编程291

  7.7 线程应用中的同步问题292

7.7.1 特定线程数据292

7.7.2 互斥锁292

7.7.3 读写锁294

7.7.4 记录上锁294

7.7.5 条件变量295

7.7.6 信号量295

  小结295

  习题295

第8章 存储管理296

  8.1 FLAT模式内存管理296

8.1.1 3种内存管理模型296

8.1.2 标准Linux的内存管理297

8.1.3 μCLinux的内存管理298

8.1.4 μCLinux内存管理的局限性298

  8.2 内存管理模块的启动初始化299

8.2.1 setup_arch()299

8.2.2 paging_init()300

8.2.3 free_area_init()301

8.2.4 mem_init()301

  8.3 可执行程序的加载301

8.3.1 用户程序的内存分布301

8.3.2 reloc段机制302

8.3.3 FLAT可执行文件格式303

8.3.4 执行文件加载流程304

  小结307

  习题307

第9章 文件系统308

  9.1 文件系统结构308

  9.2 文件系统类型310

9.2.1 ROMFS文件系统310

9.2.2 RAMFS文件系统312

9.2.3 JFFS与JFFS2文件系统312

9.2.4 EXT2文件系统314

  9.3 文件系统目录结构315

9.3.1 ROMFS文件系统目录结构315

9.3.2 μCLinux源程序结构318

  9.4 简单编程实例321

  小结324

  习题324

第10章 设备管理325

  10.1 设备管理结构325

10.1.1 概述325

10.1.2 字符设备与块设备325

10.1.3 主设备号和次设备号326

10.1.4 Linux设备命名习惯326

  10.2 驱动程序326

10.2.1 驱动程序基本功能326

10.2.2 驱动程序的运作过程327

10.2.3 常用接口函数介绍327

10.2.4 常用函数原型328

  10.3 驱动程序编写实例329

10.3.1 设备功能介绍329

10.3.2 具体实现329

  小结333

  习题334

第11章 应用程序开发335

  11.1 串口应用程序335

11.1.1 串口主要函数介绍336

11.1.2 串口举例338

  11.2 网络应用340

11.2.1 TCP/IP网络应用340

11.2.2 Web服务器应用350

  11.3 音频设备应用354

11.3.1 常用音频文件格式354

11.3.2 播放WAV文件举例360

  11.4  键盘及LCD显示应用364

11.4.1 LCD介绍364

11.4.2 键盘实现368

  11.5 汉字音乐点播应用368

  小结377

  习题378

第12章 μCLinux在UP-NETARM3000平台上的移植379

  12.1 UP-NETARM3000嵌入式开发平台介绍379

  12.2 μCLinux在UP-NETARM3000上的移植379

12.2.1 Linux移植准备379

12.2.2 关于交叉编译环境380

12.2.3 修改μCLinux内核源码382

12.2.4 Linux内核裁减384

12.2.5 内核的编译392

  12.3 内核及根文件系统的烧写392

12.3.1 配置minicom392

12.3.2 烧写内核393

12.3.3 烧写根文件系统393

  小结394

  习题394

附录 A S3C44B0X特殊功能寄存器地址对应表395

附录B 部分Linux命令403

附录C LinuxView简介406

参考文献411