第1章 概述 6
第2章 CPU结构 6
2.1 概述 6
2.2 编程模型 7
2.3 软件堆栈指针/结构指针 11
2.3.1 软件堆栈指针示例 11
2.3.2 W14软件堆栈指针 13
2.3.3 堆栈指针上溢 13
2.3.4 堆栈指针下溢 13
2.4 除法支持 13
2.5 DSP引擎 14
2.5.1 乘法器 15
2.5.2 数据累加器加法器/减法器 16
2.5.3 桶形移位寄存器 20
2.6 CPU寄存器描述 20
2.6.1 CPU状态寄存器SR 20
2.6.2 内核控制寄存器CORCON 23
2.6.3 其他CPU控制寄存器 24
2.7 指令流水线类型 28
2.8 地址寄存器相依性 29
第3章 存储器结构 32
3.1 程序地址空间 32
3.1.1 程序计数器 32
3.1.2 用表读表写指令访问放在程序空间中的数据 34
3.1.3 用程序空间的可视性访问程序存储器中的数据 36
3.1.4 写程序存储器 38
3.2 数据地址空间 38
3.2.1 数据空间存储器映射 39
3.2.2 数据空间 40
3.2.3 数据空间宽度 41
3.2.4 数据对齐 41
3.2.5 Near数据空间 42
3.2.6 软件堆栈 42
第4章 寻址方式 44
4.1 地址产生单元 44
4.2 指令寻址模式 45
4.2.1 文件寄存器指令 45
4.2.2 MCU指令 45
4.2.3 移动和累加器指令 46
4.2.4 MAC指令 46
4.2.5 其他指令 47
4.3 模寻址 47
4.3.1 起始和结束地址 47
4.3.2 W地址寄存器的选择 48
4.3.3 模寻址的应用 48
4.4 位反转寻址 49
4.5 寻址寄存器 51
第5章 MPLAB IDE7.xx及MPLABC30安装及使用简介5.1 MPLAB IDE 7.xx的安装 56
5.2 MPLAB C30的安装 60
5.3 MPLAB IDE及MPLAB C18的使用简介 64
第6章 dsPIC30F6014快速入门 77
6.1 生成源程序文件 77
6.1.1 在MPLAB IDE软件环境下编辑源程序文件 77
6.1.2 在VC下编辑源程序文件 80
6.2 生成新项目 80
6.2.1 利用MPLAB IDE向导创建新项目 81
6.2.2 直接新建项目 85
6.3 编译项目 87
6.4 修改项目编译的语法错误 90
6.5 调试程序 92
6.5.1 调试程序方式 92
6.5.2 设置断点 93
6.5.3 单步运行 95
6.6 固化程序 95
6.7 编写程序中应注意的问题 97
第7章 dsPIC30F601x实验开发系统介绍7.1 dsPIC30F601x实验开发系统介绍 99
7.1.1 结构简介 99
7.1.2 主要功能及结构特点 99
7.1.3 可在实验目标板上做的实验 100
7.2 dsPIC30F601x实验目标板各模块功能介绍 100
7.2.1 实验目标板概述 100
7.2.2 人机交换接口 100
7.2.3 串行通信接口(SCI) 101
7.2.4 控制器区域网络(CAN) 101
7.2.5 串行外设接口(SPI) 101
7.2.6 用I2C总线实现的EEPROM和日历时钟电路 101
7.2.7 实验目标板的硬件设置 102
7.3 dsPIC30F601x使用中的几个建议 106
7.3.1 MCLR主清0和编程信号输入引脚 106
7.3.2 上电/手动复位电路 106
7.3.3 关于运行频率 106
7.3.4 关于EMU引脚 107
7.3.5 调试时的内存情况 107
7.3.6 MPLAB IDE调试时的几个问题 107
第8章 系统设置 108
8.1 概述 108
8.2 振荡器系统概述 109
8.3 振荡器配置 111
8.3.1 初始时钟源的选择 111
8.3.2 振荡器控制寄存器 111
8.3.3 主振荡器 112
8.3.4 晶体振荡器/陶瓷谐振器 113
8.3.5 C1、C2和Rs值的确定 115
8.3.6 振荡器起振定时器 116
8.3.7 外部RC振荡器 116
8.3.8 锁相环 117
8.3.9 LP振荡器 117
8.3.10 快速RC振荡器 118
8.3.11 低功耗的RC振荡器 118
8.3.12 故障保护时钟监视器 119
8.3.13 可编程振荡器后分频器 119
8.3.14 时钟切换原理 120
8.4 复位 122
8.4.1 上电复位 123
8.4.2 可编程掉电复位 125
8.5 看门狗定时器 127
8.5.1 看门狗定时器操作 127
8.5.2 使用和禁止WDT 127
8.5.3 WDT定时器周期选择 128
8.5.4 WDT预分频器 128
8.5.5 复位看门狗定时器 128
8.5.6 WDT在休眠或空闲模式的工作 129
8.6 电压过低检测 129
8.6.1 LVD初始化 129
8.6.2 LVD运行时的电流消耗 130
8.6.3 在休眠和空闲模式下工作 130
8.7 低功耗模式 130
8.7.1 休眠模式 130
8.7.2 空闲模式 131
8.8 外设模块禁止寄存器 132
8.9 在线调试器 132
8.10 寄存器 133
8.10.1 振荡器控制寄存器 133
8.10.2 复位控制寄存器 135
8.10.3 器件配置寄存器 137
第9章 I/O端口 143
9.1 并行I/O端口 143
9.1.1 I/O端口控制寄存器 143
9.1.2 外设复用 144
9.2 模拟端口引脚配置 149
9.3 输入电平变化中断模式 149
9.3.1 输入电平变化中断控制寄存器 150
9.3.2 输入电平变化中断配置和操作 150
9.3.3 休眠和空闲模式下的输入电平变化中断工作 150
9.3.4 输入电平变化中断控制寄存器 150
9.4 I/O端口编程 152
第10章 中断 163
10.1 概述 163
10.2 中断优先级 165
10.3 复位顺序 165
10.4 陷阱 166
10.4.1 陷阱源 166
10.4.2 硬件及软件陷阱 167
10.5 中断序列 167
10.6 备用中断向量表 168
10.7 快速上下文保存 168
10.8 外部中断请求 169
10.9 从休眠和空闲状态唤醒 169
10.10 中断处理时序 169
10.10.1 单周期指令的中断延迟 169
10.10.2 双周期指令的中断延迟 170
10.10.3 从中断返回 171
10.10.4 中断延迟的特殊条件 171
10.11 中断寄存器 171
10.12 中断编程 198
第11章 程序存储器 199
11.1 在线串行编程 199
11.2 运行时自编程 199
11.3 表读表写指令 199
11.4 运行时自编程 200
11.5 控制寄存器 200
11.6 自编程操作 201
11.6.1 Flash程序存储器的编程规则 201
11.6.2 擦除程序存储器一行 202
11.6.3 装载写锁存器 202
11.6.4 启动编程序列 203
11.7 控制寄存器 204
第12章 非易失数据存储器 206
12.1 读非易失数据存储器 206
12.2 擦除非易失数据存储器 207
12.2.1 擦除非易失数据存储器的一个区域 207
12.2.2 擦除非易失数据存储器的一个字 207
12.3 写非易失数据存储器 208
12.3.1 写非易失数据存储器一个字 209
12.3.2 写非易失数据存储器的一个区域 209
12.4 写校验 211
12.5 误写操作保护 211
12.6 非易失数据存储器编程 211
第13章 定时器1模块 214
13.1 Timer1模块简介 214
13.2 门控定时器 215
13.3 定时器预分频器 215
13.4 休眠模式下的定时器操作 216
13.5 定时器中断方式 216
13.6 实时时钟 217
13.6.1 RTC振荡器 217
13.6.2 实时时钟中断 219
13.7 秒表显示程序 219
第14章 定时器2/3和4/5模块 226
14.1 Timer2/3模块 226
14.2 定时器门控方式 229
14.3 ADC事件触发方式 229
14.4 定时器预分频器 229
14.5 Timer3定时器比较结束时启动A/D转换例程 232
14.6 定时器Timer4/5模块 236
第15章 输入捕捉模块 237
15.1 概述 237
15.2 简单的捕捉事件模式 238
15.2.1 预分频器捕捉事件 238
15.2.2 捕捉缓冲操作 238
15.2.3 Timer2和Timer3的选择模式 238
15.2.4 边沿检测模式 239
15.3 在休眠和空闲状态下的输入捕捉操作 239
15.3.1 休眠模式下的输入捕捉操作 239
15.3.2 空闲模式下的输入捕捉操作 239
15.4 输入捕捉中断 239
15.5 输入捕捉编程 241
第16章 输出比较模块 245
16.1 输出比较模块 245
16.2 Timer2和Timer3选择模式 246
16.3 单输出比较匹配模式 246
16.3.1 单比较模式驱动为高电平 246
16.3.2 单比较模式输出驱动为低电平 247
16.3.3 单比较模式电平交替翻转输出 248
16.4 双输出比较匹配模式 249
16.4.1 单脉冲输出模式 249
16.4.2 连续脉冲输出模式 250
16.5 简单PWM模式 252
16.5.1 带故障保护输入的PWM模式 252
16.5.2 PWM周期 252
16.5.3 PWM占空比 253
16.6 在CPU休眠模式下的输出比较操作 254
16.7 在CPU空闲模式下输出比较操作 254
16.8 输出比较中断 254
16.9 输出比较编程 256
第17章 SPI模块 264
17.1 概述 264
17.2 操作功能描述 265
17.3 字和字节通信 265
17.4 关闭SDOx(SPI仅启动接收功能) 265
17.5 主控模式和从动模式 266
17.5.1 主控模式 266
17.5.2 从动模式 268
17.6 SPI错误的处理 272
17.7 串行通信的帧支持 272
17.7.1 在SPI帧模式下的SCKx 273
17.7.2 在SPI帧模式下的SPIx缓冲寄存器 273
17.7.3 SPI主控模式和帧主控模式 273
17.7.4 SPI主控模式和帧从动模式 274
17.7.5 SPI从动模式和帧主控模式 275
17.7.6 SPI从动模式和帧从动模式 276
17.8 SPI主控模式时钟频率 276
17.9 CPU休眠模式下SPI操作 277
17.10 CPU空闲模式下SPI操作 277
17.11 SPI状态和控制寄存器 277
17.12 SPI编程 281
第18章 I2C模块 287
18.1 概述 287
18.2 操作功能描述 287
18.2.1 I2C操作模式 287
18.2.2 I2C模式下的引脚设置 287
18.2.3 I2C寄存器 288
18.3 I2C模块地址 289
18.4 I2C的7位从动模式操作 289
18.4.1 从动发送 289
18.4.2 从动接收 290
18.5 I2C的10位地址从动模式操作 291
18.6 自动时钟延长 292
18.7 软件控制时钟延长 293
18.8 中断 293
18.9 波形边沿斜率控制 293
18.10 IPMI支持 294
18.11 通用地址寻址 294
18.12 I2C主控方式支持 294
18.13 I2C主控模式操作 294
18.13.1 产生启动总线事件 295
18.13.2 I2C主控方式发送 296
18.13.3 I2C主动方式接收 297
18.13.4 应答产生 298
18.13.5 产生停止总线事件 299
18.13.6 重复启动产生 300
18.13.7 波特率发生器 300
18.13.8 时钟仲裁 301
18.13.9 多主机通信、总线冲突和总线仲裁 301
18.14 休眠和空闲模式下的I2C总线操作 301
18.15 I2C模块编程 306
18.15.1 I2C模块扩展片外的串行EEPROM编程 306
18.15.2 I2C模块扩展片外的日历时钟模块 309
第19章 通用异步收发器模块 319
19.1 UART模块特性 319
19.2 UART设置 319
19.2.1 UART使能 320
19.2.2 关闭UART 320
19.2.3 设置数据、奇偶和停止位 320
19.3 发送数据 320
19.3.1 8位数据发送方式 321
19.3.2 9位数据发送方式 322
19.3.3 发送缓冲器(UxTXB) 322
19.3.4 发送中断 322
19.3.5 设置UART发送 323
19.3.6 发送中止 323
19.4 接收数据 324
19.4.1 8位或9位数据接收方式 324
19.4.2 接收缓冲器(UxRXB) 325
19.4.3 接收中断 325
19.4.4 设置UART接收 325
19.5 处理接收错误 326
19.6 地址检测模式 327
19.7 自检模式 327
19.8 波特率发生器 328
19.9 自动波特率 328
19.10 休眠和空闲模式下的UART操作 329
19.10.1 休眠模式下的UART操作 329
19.10.2 空闲模式下的UART操作 329
19.11 USART编程 332
第20章 CAN模块 341
20.1 概述 341
20.2 帧类型 343
20.3 CAN操作模式 349
20.3.1 配置模式 349
20.3.2 禁止模式 349
20.3.3 正常工作模式 350
20.3.4 监听模式 350
20.3.5 监听所有报文模式 350
20.3.6 自检模式 350
20.3.7 错误识别模式 350
20.4 报文接收 351
20.4.1 接收缓冲器 351
20.4.2 报文接收过滤器 351
20.4.3 报文接收屏蔽器 352
20.4.4 接收溢出 354
20.4.5 接收错误 354
20.4.6 接收中断 354
20.5 报文发送 355
20.5.1 发送缓冲器 355
20.5.2 发送报文优先级 355
20.5.3 发送序列 356
20.5.4 发送报文中止 356
20.5.5 发送错误 358
20.5.6 发送中断 358
20.6 波特率设置 359
20.6.1 位时序 359
20.6.2 预分频设置 359
20.6.3 传输时间段 360
20.6.4 相位缓冲段 360
20.6.5 采样点 361
20.6.6 同步时间段 361
20.7 CAN模块在低功耗模式下工作 361
20.7.1 CAN模块在休眠模式下工作 361
20.7.2 CAN模块在空闲模式下的工作 362
20.8 CAN模块的寄存器 362
20.8.1 CAN控制状态寄存器 362
20.8.2 CAN发送缓冲器 364
20.8.3 CAN接收缓冲器 367
20.8.4 报文接收过滤器 370
20.8.5 接收过滤器屏蔽寄存器 372
20.8.6 CAN波特率寄存器 373
20.8.7 CAN模块错误计数寄存器 375
20.8.8 CAN中断寄存器 375
20.9 CAN总线编程 378
第21章 12位模/数转换器 383
21.1 概述 383
21.2 A/D转换结果缓冲寄存器 384
21.3 转换过程 384
21.4 A/D模块配置 386
21.4.1 参考电压源的选择 386
21.4.2 A/D转换时钟的选择 386
21.4.3 模拟输入通道的选择 387
21.5 采样/转换的控制 388
21.5.1 模块使能 388
21.5.2 采样开始 388
21.5.3 停止采样并开始转换 389
21.5.4 采样/转换的编程 393
21.6 转换结果写入缓冲器 394
21.7 A/D采样要求 395
21.8 输出格式 395
21.9 连接注意事项 396
21.10 复位的影响 396
21.11 配置模拟引脚 396
21.12 转换异常中断 397
21.13 A/D初始化及转换过程示例 397
21.13.1 A/D初始化 397
21.13.2 转换过程示例 398
21.14 在休眠和空闲模式下的A/D操作 400
21.15 控制寄存器 400
21.16 A/D编程 406
第22章 数据传输接口模块 410
22.1 概述 410
22.2 DCI引脚 410
22.3 编解码器接口 411
22.4 DCI模块操作 413
22.5 使用DCI缓冲器、状态位及中断发送和接收数据 421
22.5.1 DCI起动和数据缓冲 422
22.5.2 DCI禁止 423
22.6 多通道工作 424
22.7 AC-Link工作 425
22.8 I2S工作 427
22.9 DCI模块低功耗模式 430
22.10 DCI寄存器 430
第23章 汇编指令集与C语言库函数概述23.1 汇编指令概述 436
23.2 DSP函数库 443
23.2.1 DSF函数库的使用 444
23.2.2 矢量(数组)函数 445
23.2.3 窗函数 447
23.2.4 矩阵函数 447
23.2.5 滤波函数 448
23.2.6 变换函数 450
23.3 dsPIC外设函数库 451
23.3.1 dsPIC外设函数库的使用 451
23.3.2 外部LCD函数 451
23.3.3 CAN函数 452
23.3.4 ADC12函数 453
23.3.5 ADC10函数 453
23.3.6 定时器函数 454
23.3.7 复位/控制函数 455
23.3.8 I/O端口函数 455
23.3.9 输入捕捉函数 456
23.3.10 输出比较函数 456
23.3.11 UART函数 457
23.3.12 DCI函数 458
23.3.13 SPI函数 458
23.3.14 QEI函数 459
23.3.15 PWM函数 459
23.3.16 I2C函数 460
23.4 标准C函数库和数学函数 461
23.4.1 使用标准C函数库 461
23.4.2 <assert.h>诊断 461
23.4.3 <ctype.h>字符处理 462
23.4.4 <errno.h>错误 462
23.4.5 <float.h>浮点特征 463
23.4.6 <limits.h>实现定义的限制 464
23.4.7 <locale.h>语言环境 465
23.4.8 <setjmp.h>与语言环境无关的跳转 465
23.4.9 <signal.h>信号处理 466
23.4.10 <stdarg.h>可变参数列表 466
23.4.11 <stddef.h>公共定义 467
23.4.12 <stdio.h>输入和输出 467
23.4.13 <stdlib.h>实用函数 470
23.4.14 <string.h>字符串函数 471
23.4.15 <time.h>日期和时间函数 472
23.4.16 <math.h>数学函数 473
23.4.17 PIC30函数库 474
23.5 MPLAB C30内建函数 476
23.5.1 内建函数列表 476
23.5.2 内建函数错误消息 477
参考文献 478