本书以“DSP281x外设驱动源码解读”讲义为雏形,对TI提供的外设驱动源码进行了更深入的解读,具有以下特点:对构建SPRC097文件体系的位域结构体方法及文件中出现的陌生的指令进行详细的注解;对尚未公示的采用SPRC097文件风格建立一个简捷且容易管理的新项目的方法进行解析和引用;对每条外设示例源码设置专用寄存器的指令,具体到对每一个控制位进行注释;对每一个函数(子程序),在题头说明该函数的实现功能及相关要点;说明怎样通过示波器观察关键变量,以及怎样通过CCS视窗观察动态数据及动态波形;对F28x所有外设的相关原理的叙述,围绕实际应用展开并通过图示进行说明;对反映在专用控制寄存器中非显式表示的配置表达式,都用规范的数学公式表示;通过实例归纳出相应外设驱动的设置要领。
这是一本F28x系统的入门书。书中提供的F28x外设驱动源码文件是TMS 320 F28x系统的底层文件,适合所有F28x硬件系统。实践证明,从可操作调试的外设驱动源码出发,是进入F28x领域的一条捷径。
本书通过解读德州仪器提供的DSP2000系列外设驱动源码(文档名SPRC097)的方式,介绍了TMS 320 F28x各种外设的驱动机制、运行要领及与系统之间的关系,并对建立SPRC097文件体系的位域结构体方法给出详细的说明。书中源代码均通过实际运行验证。
本书可作为电气、自动控制和电子类专业本科生和研究生的教科书或参考书,也可作为相关领域的工程技术人员的参考书。
第1章 DSP F28x使用入门/1
1.1 项目文件的目录结构/1
1.2 外设位域结构体方法综述/2
1.2.1 传统#define方法/2
1.2.2 位域及结构体方法/3
1.2.3 添加位域结构体/6
1.2.4 共用体结构体位域的的应用实例/8
1.3 外设示例项目/10
1.3.1 开启一个项目/10
1.3.2 新建一个项目/13
1.3.3 示例程序结构/19
1.3.4 示例流程及示例一览表/21
第2章 CPU定时器0的驱动/24
2.1 定时器基本概念/24
2.1.1 定时器时钟和时钟源/24
2.1.2 定时器寄存器/25
2.1.3 控制定时器速率的几个因素/27
2.1.4 启动定时器0步骤/28
2.2 定时器0中断设置/29
2.3 关于ConfigCpuTimer()函数的说明/30
2.4 定时器0中断启动程序实例(CpuTimer.c)/32
第3章 通用输入/输出(GPIO)/38
3.1 GPIO概述/38
3.1.1 GPIO寄存器/38
3.1.2 寄存器功能介绍/41
3.1.3 GPIO的启动/43
3.2 程序实例/45
3.2.1 GPIO切换测试程序(GpioToggle.c)/45
3.2.2 GPIO回送测试程序(GpioLoopback.c)/51
第4章 串行通信接口(SCI)/59
4.1 SCI模块概述/59
4.1.1 SCI寄存器一览表/59
4.1.2 SCI引脚的连接/60
4.1.3 SCI通信数据格式/61
4.1.4 多处理器(多机)通信的唤醒模式/62
4.2 SCI模块启动要领/63
4.2.1 串行通信接口的配置/63
4.2.2 SCI时钟及波特率的配置/64
4.2.3 通信模式的配置/65
4.2.4 SCI数据发送及接收过程/65
4.3 接收和发送过程中的中断逻辑/68
4.3.1 标准模式下的SCI中断/70
4.3.2 增强型模式下的SCI中断/71
4.3.3 SCI中断设置指令/72
4.4 程序实例/74
4.4.1 SCI数字回送测试程序(SciLoopBac.c)/74
4.4.2 通过中断进行数字回送测试程序(SciLoopBackInt.c)81
4.4.3 SCI自动波特检测示例(SciAutobaud.c)/89
第5章 串行外围接口(SPI)/99
5.1 SPI模块概述/99
5.2 SPI工作模式/101
5.2.1 主机工作模式/102
5.2.2 从机工作模式/103
5.2.3 数据传送格式/104
5.3 SPI时钟及波特率/105
5.3.1 SPI时钟/105
5.3.2 波特率的计算/106
5.3.3 SPI时钟方案/107
5.4 SPI中断/107
5.4.1 标准模式下的SPI中断/108
5.4.2 增强模式下的SPI中断/109
5.5 SPI的启动和配置指令/111
5.5.1 SPI同步串行接口的配置/111
5.5.2 SPI时钟及波特率的配置/111
5.5.3 SPI配置控制寄存器(SPICCR)的配置/111
5.5.4 SPI工作寄存器(SPICTL)的配置/112
5.5.5 SPI中断设置/113
5.6 程序实例/115
5.6.1 Spi数字回送程序(SpiLoopBack.c)/115
5.6.2 采用中断的Spi数字回送程序(SpiLoopBackInterrupts.c)/120
5.6.3 数模(DAC)转换测试程序(SpiDac.c)/126
第6章 多通道缓冲接口(McBSP)的驱动/134
6.1 McBSP概述/134
6.1.1 McBSP寄存器列表/135
6.1.2 多通道缓冲串行端口的配置/136
6.2 McBSP采样率发生器时钟/137
6.2.1 内部时钟CLKG与帧同步脉冲FSG的计算/138
6.2.2 采样率发生器CLKG时钟的控制/139
6.2.3 采样率发生器的输入极性选择/139
6.2.4 帧同步信号FSG用于接收器和发送器的条件/140
6.2.5 帧脉冲检测和时钟同步模块的作用/140
6.3 McBSP的接收与发送/141
6.3.1 McBSP的接收/141
6.3.2 McBSP的发送/142
6.4 多通道选择模式/143
6.5 SPI协议/146
6.6 接收器和发送器的配置与实例/149
6.6.1 接收器配置/149
6.6.2 发送器的配置/153
6.7 McBSP配置实例/155
6.7.1 复位McBSP/156
6.7.2 McBSP控制寄存器的配置/156
6.7.3 McBSP增强模式下的配置/158
6.7.4 启动McBSP/160
6.8 McBSP中断/160
6.8.1 接收中断的产生/160
6.8.2 发送中断的产生/162
6.8.3 中断设置/164
6.9 McBSP寄存器/165
6.10 程序示例/173
6.10.1 McBSP数字回送程序(McbspLoopBack.c)/173
6.10.2 通过中断进行McBSP数字回送程序(McBSP_FFDLB_int.c)/184
第7章 增强型局域网络控制器(eCAN)的驱动/193
7.1 CAN概述/193
7.1.1 CAN数据帧的组成/193
7.1.2 eCAN控制和状态寄存器/195
7.2 eCAN模块的结构及运行机制/196
7.3 eCAN的设置和启动/197
7.3.1 使能CAN通信/198
7.3.2 时钟模块的配置及计算/199
7.3.3 过滤器的使用/201
7.3.4 设置主控制寄存器(CANMC)/202
7.3.5 发送邮箱的配置/204
7.3.6 接收邮箱的配置/208
7.3.7 远程帧邮箱的使用/209
7.4 eCAN的中断/211
7.4.1 中断标志位的选择/212
7.4.2 中断配置/212
7.4.3 邮箱中断/213
7.4.4 邮箱中断处理/214
7.4.5 中断服务程序结束前必须的操作/215
7.4.6 中断设置/216
7.5 程序实例(eCAN.c)/218
第8章 事件管理器(EV)驱动要领及例程/230
8.1 定时器模块/231
8.1.1 定时器的时钟源及时钟/232
8.1.2 定时器的设置和启动/233
8.1.3 定时器的四种计数模式/234
8.1.4 定时器的比较操作和输出逻辑/236
8.1.5 对称和非对称的波形发生器/237
8.1.6 TxPWM脉冲的计算/238
8.1.7 定时器的中断/240
8.1.8 PWM的设置流程及复位引发的事件/240
8.1.9 TxPWM引脚输出脉冲频率及占空比的控制/241
8.2 全比较单元模块/242
8.2.1 全比较单元的设置/243
8.2.2 比较单元的死区逻辑模块/244
8.2.3 比较单元的操作和输出逻辑/246
8.2.4 PWM1/PWM2引脚输出及占空比的控制/248
8.3 定时器2模块(正交编码QEP模块)/248
8.4 捕获单元模块/250
8.5 控制逻辑模块/254
8.6 事件管理器(EV)的中断/255
8.6.1 事件管理器(EV)的4类中断/256
8.6.2 中断的处理过程/258
8.6.3 中断设置/258
8.7 用事件管理器启动模数转换/260
8.8 通过事件管理产生PWM示例(EvPwm.c)/261
第9章 模数转换器(ADC)/270
9.1 ADC概述/270
9.1.1 ADC寄存器列表/270
9.1.2 级联模式下的工作原理/271
9.1.3 双序列模式下的工作原理/272
9.2 ADC模块设置要领/274
9.2.1 ADC的上电顺序/274
9.2.2 ADC时钟及采样周期的配置/275
9.2.3 采样方式及序列发生器模式配置/279
9.2.4 通道及运行方式的配置/279
9.2.5 启动模数转换的几种方法/281
9.2.6 序列发生器的覆盖功能/283
9.3 ADC中断/283
9.3.1 中断的产生/283
9.3.2 中断设置/284
9.4 模数转换的电阻型输入网络/285
9.5 示例程序/286
9.5.1 ADC序列发生器模式测试程序(AdcSeqMode.c)/286
9.5.2 在中断状态下的连续级联模式模数转换程序(AdcSoc.c)/289
9.5.3 ADC序列发生器覆盖特性测试程序(AdcSeqOvd.c)/295
第10章 外设中断扩展(PIE)模块的使用/302
10.1 PIE控制器概述/302
10.1.1 向量表映射/304
10.1.2 PIE中断流程/306
10.1.3 PIE向量表的建立/307
10.2 PIE主要的几个寄存器/309
10.3 PIE向量表/313
10.4 外设中断的设置步骤/314
10.5 程序实例/316
10.5.1 用软件区分中断优先级示例(SWPrioritizedInterrupts.c)/316
10.5.2 看门狗中断例程(Watchdog.c)/323
第11章 CMD文件的运用/328
11.1 MEMORY伪指令/328
11.2 SECTIONS伪指令/329
11.3 CMD文件中的段/333
11.4 存储空间结构/335
11.4.1 片内SARAM的设置/336
11.4.2 片内Flash的设置/338
11.4.3 F2812外设寄存器的映像空间/339
11.4.4 外部XINTF7区引导的CMD文件配置/340
11.4.5 片内引导ROM的使用/343
11.5 内部RAM区引导的CMD文件配置/345
11.6 内部Flash区引导的CMD文件配置/346
11.7 示例程序/349
11.7.1 程序从外部扩展接口运行示例(RunFromXintf.c)/349
11.7.2 程序在片内Flash运行示例(Flash.c)/355
第12章 IQmath方法概述/366
12.1 IQmath方法的引入/366
12.2 32位IQ数据的定义/367
12.3 IQ数据的运算规则/369
12.4 IQmath 函数及其调用方法/369
参考文献/377