第1章 概述
第2章 CPU结构
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状态寄存器SR20
2.6.2 内核控制寄存器CORCON23
2.6.3 其他CPU控制寄存器24
2.7 指令流水线类型28
2.8 地址寄存器相依性29
第3章 存储器结构
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章 寻址方式
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快速入门
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章 系统设置
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 使用和禁止WDT127
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端口
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章 中断
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章 程序存储器
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章 非易失数据存储器
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模块
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模块
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章 输入捕捉模块
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章 输出比较模块
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模块
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 帧模式下的SCKx273
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模块
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章 通用异步收发器模块
19.1 UART模块特性319
19.2 UART设置319
19.2.1 UART使能320
19.2.2 关闭UART320
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模块
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位模/数转换器
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章 数据传输接口模块
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 ACLink工作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 DSP函数库的使用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
展开