|
内容简介 本书以美国TI公司的TMS320LF2407A为典型芯片,讲述240x DSP系列芯片的原理结构、硬件设计和软件编程。通过一系列循序渐进的实验安排,可以使读者对DSP的整个开发过程有一个全面的认识和掌握,便于了解240x系列的硬件结构,学习C24x DSP编程语言、编程方法、调试方法,并参照本书所给的硬件模板和软件模板,设计出较完整的240x DSP应用系统。是一本系统而实用的240x系列DSP学习教程。
本书适用于进行TI公司DSP应用开发的初级和中级应用工程师,也可作为本科高年级学生、研究生学习和应用DSP240x系列芯片人员的教学参考书。
前言 在过去的20年中,电子技术已基本上实现了从模拟到数字的过渡。正值本书写作期间,2006年12月12日,中央电视台新闻节目播出了一条很短的新闻——荷兰全国实现电视数字化。这说明,世界正朝着数字化的方向发展。在国内,数字技术和DSP芯片的作用及重要性已被各界认识,DSP芯片的应用和普及已是一个基本事实。尽管如此,围绕DSP芯片的学习、研究和工程项目的开发,入门显得比较困难。这是为什么呢?
作者愿意在这里谈一谈自己的粗浅认识。
(1) 在DSP开发过程中,包含的知识点多,技术资料分布在多个文献中,内容比较分散。以TMS320X240x系列芯片开发为例,TI公司提供的、也是开发人员需要阅读的技术资料如下:
① TMS320LF2407A,TMS320LF2406A,TMS320LF2403A,TMS320LF2402A,TMS320LC2406A,TMS320LC2404A,TMS320LC2402A DSP Controllers,SPRS145G——芯片手册,介绍芯片片内存储器大小、片内外设种类和引脚封装等具体信息。
② TMS320C24x DSP Controllers: CPU,System and Instruction Set,SPRU160C,讲述了24x DSP CPU的结构、大系统级的设置(如系统级控制寄存器和中断的二级层次结构)和全部84条汇编指令详解。
③ TMS320C1x/C2x/C2xx/C5x Assembly Language Tools User’s Guide,SPRU018E——汇编指令编程指导书,含汇编程序如何组织和构成及大量汇编伪指令的解释。
④ TMS320C2x/C2xx/C5x Optimizing C Compiler User’s Guide,SPRU024E——C语言编程指导书,主要讲述C编译器的特点、C代码优化和链接、实时运行库rts2xx.lib和C编译器与CCS的接口。
⑤ TMS320LF/LC240x DSP Controllers System and Peripherals,SPRU357B,讲述了所有片内外设的结构、设置和使用,包括PLL、软件看门狗、I/O口、片外存储器接口、事件管理器、ADC、SCI、SPI和CAN等。
⑥ Code Composer Studio Getting Started Guide,SPRU509——CCS 集成环境介绍。
以上6本技术资料构成了DSP240x开发时所涉及的知识点的6大部分,每部分都讲述了开发中的一个侧面,没有重叠,缺一不可;然而,并不是每本资料都要全面阅读,但起码要阅读大部分。在每一本技术资料中,TI公司给出了一些编程的例子,这些例子都是局部的,可看成森林中的树木。TI公司和所有DSP开发业内人士都深知DSP入门难这一事实,因此特开发了典型的DSP硬件电路,并配以完整程序,称其为初学者套件DSK(DSP Starter Kit),专为初学者入门使用。DSK中的完整程序,就像是森林,所以使初学者看到了DSP软件编程的全貌。全面阅读以上6本技术资料,并配合DSK,是TI公司提供的DSP开发入门解决方案,也是DSP入门的正确途径。
(2) 英文技术资料阅读难度大。国内工科院校本科生、研究生经过英语学习和实践后,有一定的阅读能力,部分学生能熟练阅读英文资料,达到实用目的;但是,有部分学生在英语思维方面的训练不够,常常是一边阅读英文,一边在大脑中译为中文,记下中文意思,之后再把记下的中文语义汇总起来,构成一个新的知识点。这样会影响阅读速度。当完全沉浸在以上五六本英文资料中并通过它获得崭新的DSP技术知识时,就显得十分勉强。
(3) 中文书籍有限。目前,国内讲述TI公司的DSP芯片开发方面的书,多以翻译技术资料为主,这些书籍对DSP技术的应用、普及起到了积极作用。由于处于国内DSP开发应用的初期及各种客观条件的限制,这些图书仅含有少部分的开发经验和体会,只给读者展现了树木,而没有展现森林,所以在引导初学者看到DSP硬件设计、软件编程和开发仿真全貌方面,显得有些欠缺。
(4) 要有单片机等嵌入式系统的开发经验。如果没有单片机等嵌入式系统的开发经验,直接进行DSP学习、研究和开发,则显得跨度大,难度大。
(5) 数学和应用领域的知识储备要多。一定要了解本科的电工原理、信号与系统和数字信号处理这3门课程的主干内容,并结合工程应用的特定领域(如电机控制),了解相关算法。
在多年的DSP开发实践中,作者先阅读中文书籍,后阅读英文技术资料,并以TI英文技术资料为主。在编程调试时,作者总是在思考软件工程中的几个模块是怎样有机地结合在一起的,什么是初学者感到困惑的,什么是开发人员应该知道的,什么是开发人员不知道的。
通过TI公司的C2000、C5000和C6000的学习、研究和实践,作者发现这3个系列的软件工程构成是相同的,都是由cmd文件、头文件、vector文件和实时运行库函数组成;中断的软件结构也相同;这些模块及相互关系平时变动很小,复杂的工程都是在此基础上的扩展,这就是软件模板的来由。硬件最小系统实际上也是一个模板。在掌握了软、硬件两个模板后,再进行DSP开发工作,一切就变得容易起来。如果一个开发人员完全自主地了解、掌握了类似这两个模板的工作和内容,并亲手做了硬件并调试成功,那么可谓渡过了DSP开发的入门阶段。
本书总结、揉合了上述6本英文资料中除第⑤项(片内外设)以外的作为DSP初学者应掌握的内容,并介绍了自己的开发体会和经验。片内外设是DSP开发中的重要内容,由于受时间和篇幅的限制,本书只介绍了片内外设的I/O口和事件管理器中的定时器,而SCI、SPI、CAN、PWM和ADC等没有涉及。同样,受时间和篇幅所限,使用汇编语言采用DFT算法计算220 V交流电压有效值的实例也未能写入本书。本书具有如下特点:
对DSP240x开发全过程,从DSP内部结构讲起,到软件工程文件组织及代码调试,内容比较完整。读者能够从本书中看到DSP240x应用开发的全貌。
重点介绍了一个硬件模板和一个软件模板这两个模板及一个最小系统和一个典型系统这两个实例。
加强汇编语言的讲述。没有采用汇编指令一条条讲的机械方式,而是从不同的寻址方式讲述,使读者能较好地理解汇编语言寻址方式这一难点。
讲述汇编语言的第6章的后半部分和讲述FFT的第11章属于中级水平的内容。“第2个硬件系统”可以看作是一个小型的DSK,希望它能对读者有所帮助。
感谢北航出版社在本书早期策划和写作过程中所给予的鼓励和支持,感谢王有绪老师在本书写作过程中所给予的鼓励。在本书写作过程中,同事张永波工程师始终以读者角度对本书内容、实例取舍等方面提出建议,并做了大量具体工作,在此深表谢意。感谢张娜、崔兵兵、刘小刚、韩瑾、刘宏乐为本书文字录入和表格所作的工作,感谢西安美术学院设计系闫贺、周稳定为本书所作的素描插图工作。
由于作者水平有限,且DSP是一个范围广大的技术领域,书中错误和疏漏之处在所难免,欢迎广大读者通过Email: zhaoshilian@sina.com或网站http://www.dspedu.com,把意见和建议告诉作者。作者希望与各位读者交流DSP开发的经验和体会,共同进步。对于想通过硬件进一步调试本书程序的读者,也可通过上面提供的网站查询硬件邮购信息。
作者
2007年3月于西安
目录 第1章 DSP芯片基本结构与特点
1.1 DSP简介1
1.1.1 什么是DSP?1
1.1.2 为什么要使用DSP?2
1.1.3 DSP芯片的发展简史2
1.2 DSP芯片基本结构3
1.2.1 DSP算法特点3
1.2.2 实时处理4
1.2.3 DSP芯片的结构特征5
1.2.4 DSP与MCU、通用处理器、FPGA三者的比较7
1.3 TMS320系列DSP产品介绍8
1.3.1 C2000系列8
1.3.2 C5000系列8
1.3.3 C6000系列9第2章DSP2407引脚与内部结构
2.1 DSP2407引脚定义10
2.2 DSP2407的内部结构18
2.2.1 DSP2407内部包含哪些部分18
2.2.2 DSP2407的体系结构18
2.3 CPU结构20
2.3.1 CPU组成框图20
2.3.2 乘法器23
2.3.3 中央算术逻辑部分23
2.3.4 辅助寄存器算术单元25
2.3.5 状态寄存器25
2.4 存储器及存储空间配置27
2.4.1 片内存储器的种类27
2.4.2 程序存储器28
2.4.3 数据存储器30
2.4.4 I/O口31
第3章 系统配置和中断——全局控制
3.1 系统配置寄存器33
3.1.1 系统控制和状态寄存器133
3.1.2 系统控制和状态寄存器234
3.2 DSP2407中断组织和结构35
3.2.1 DSP2407中断概述——两层结构35
3.2.2 DSP2407内核级中断36
3.2.3 DSP2407外设级中断38
3.2.4 中断优先级和中断向量总表39
3.2.5 假中断向量41
3.3 DSP2407中断寄存器42
3.3.1 中断标志寄存器42
3.3.2 中断屏蔽寄存器43
3.4 外设中断向量寄存器44
3.5 外部中断控制寄存器45
3.5.1 外部中断1控制寄存器45
3.5.2 外部中断2控制寄存器46
第4章 DSP2407最小硬件系统设计
4.1 DSP2407最小系统电源设计49
4.1.1 DSP2407最小系统电源种类和要求49
4.1.2 DSP2407最小硬件系统电源解决方案49
4.2 晶体振荡器电路50
4.2.1 PLL滤波电路50
4.2.2 晶振电路51
4.3 JTAG接口52
4.3.1 JTAG标准接口52
4.3.2 仿真器与DSP2407最小系统的连接52
4.4 片外存储器扩展53
4.4.1 外部存储器接口53
4.4.2 DSP仿真开发状态的特点54
4.4.3 DSP2407最小系统外部存储器的设计55
4.5 最小系统其他引脚的处理和说明57
4.5.1 DSP其他功能引脚的处理57
4.5.2 未用的输入/输出引脚的处理57
4.5.3 指示灯简要说明57
4.6 最小硬件系统模板58
第5章 仿真环境建立和工程文件组织
5.1 硬件仿真开发环境的建立59
5.1.1 硬件仿真方法简介59
5.1.2 硬件仿真器连接60
5.2 软件仿真开发环境——CCS61
5.2.1 程序开发环境CCS及其建立61
5.2.2 第1次启用CCS调试最小硬件系统64
5.2.3 查看、修改CPU寄存器和数据空间内容实例66
5.3 创建我的第1个工程69
5.3.1 创建新工程69
5.3.2 创建寄存器头文件的实例70
5.3.3 COFF目标文件78
5.3.4 创建CMD文件的实例79
5.3.5 创建中断向量表文件vector.asm实例83
5.3.6 创建最小汇编语言软件工程模板85
第6章 汇编语言——DSP的灵魂
6.1 使用汇编语言编写程序的好处92
6.2 汇编语言初步93
6.2.1 汇编程序格式93
6.2.2 第1个具有控制功能的汇编程序94
6.2.3 使XF发光二极管LED熄灭96
6.3 控制XF引脚LED闪烁97
6.3.1 如何使XF的LED交替点亮和熄灭97
6.3.2 用外部信号标志BIO控制LED99
6.3.3 用汇编指令产生长时间延迟101
6.4 直接寻址104
6.4.1 直接寻址基础知识104
6.4.2 用直接寻址方式在数据存储器与累加器之间搬移数据106
6.4.3 直接寻址方式数据读/写实例107
6.5 间接寻址112
6.5.1 间接寻址方式知识准备113
6.5.2 间接寻址的使用113
6.5.3 间接寻址高级内容117
6.6 常用汇编指令120
6.6.1 汇编指令分类120
6.6.2 常用汇编指令详解126
第7章 C语言——DSP的快捷工具
7.1 C语言概述194
7.2 C编译器和C代码优化195
7.2.1 C编译器特性195
7.2.2 Shell程序的作用及使用196
7.2.3 优化C代码199
7.3 C程序代码链接200
7.3.1 C程序代码链接概述200
7.3.2 把运行支持库包含到工程文件中201
7.3.3 指定初始化类型203
7.3.4 把段分配到物理存储器中204
7.4 创建C语言软件模板实例206
7.4.1 创建C语言寄存器头文件实例206
7.4.2 创建main()函数实例213
7.4.3 创建DSP2407芯片初始化函数实例214
7.4.4 创建假中断处理函数实例216
7.4.5 最小C语言软件工程模板216
7.4.6 _c_int0函数的深入研究218
7.5 TMS320LF240x的C语言221
7.5.1 数据类型221
7.5.2 C语言标准库函数的使用222
7.5.3 常用C语言标准库函数224
7.5.4 使用C语言标准库函数实例230
7.6 C语言和汇编语言混合编程233
7.6.1 在C语言中嵌入单句汇编语言233
7.6.2 在C语言中调用汇编子程序234
7.7 C语言中断程序236
7.7.1 中断处理要点236
7.7.2 中断函数236
7.7.3 中断的嵌套238
第8章 数字输入/输出(I/O)端口
8.1 数字I/O端口概述239
8.2 数字I/O端口结构240
8.3 数字I/O端口控制寄存器241
8.3.1 I/O口复用控制寄存器241
8.3.2 I/O口数据和方向寄存器243
8.4 I/O端口应用编程实例245
8.4.1 I/O端口输出编程实例245
8.4.2 Map文件的功能和使用实例249
第9章 事件管理器
9.1 事件管理器结构和组成252
9.1.1 事件管理器结构252
9.1.2 事件管理器引脚255
9.1.3 事件管理器控制寄存器及其地址256
9.1.4 功率驱动保护中断258
9.2 事件管理器中断处理258
9.2.1 事件管理器中断事件的处理258
9.2.2 事件管理器中断控制寄存器262
9.3 通用定时器的工作过程271
9.3.1 通用定时器的结构和组成271
9.3.2 定时器控制寄存器277
9.3.3 通用定时器的工作模式280
9.4 通用定时器的应用实例283
9.4.1 通用定时器使用实例283
9.4.2 中断嵌套实例288
9.4.3 调用TI定点数学库开方函数实例294
9.4.4 自测程序代码执行时间实例296
第10章 A/D转换——第2个硬件系统
10.1 A/D转换芯片AD7865简介302
10.1.1 AD7865简述302
10.1.2 AD7865引脚定义303
10.2 第2个硬件系统的硬件和软件设计305
10.2.1 A/D转换芯片的选择305
10.2.2 硬件设计305
10.2.3 软件设计309
10.3 220 V电压采样实例309
10.3.1 访问I/O口空间310
10.3.2 220 V电压采样实例310
10.4 220 V电压有效值计算实例318
10.4.1 利用DFT算法计算220 V电压有效值实例318
10.4.2 利用时域算法计算220 V电压有效值实例326
第11章 快速傅里叶变换FFT
11.1 FFT的基本原理330
11.1.1 离散傅里叶变换DFT330
11.1.2 FFT算法的导出331
11.2 FFT库333
11.2.1 FFT库简介334
11.2.2 FFT32C计算模块介绍336
11.3 32点FFT计算实例338
11.3.1 伪指令#pragma的用法339
11.3.2 32点FFT计算实例339
第12章 C2000 DSP芯片的发展与比较
12.1 C24xx系列芯片的发展与比较361
12.1.1 C2000系列芯片的发展简史361
12.1.2 C24xx系列芯片的比较361
12.2 TMS320X281x DSP系列性能简介362
12.2.1 F/C281x系列功能简介362
12.2.2 F/C281x系列DSP的性能363
12.2.3 F/C281x与C240x内核的比较365
12.2.4 C240x汇编代码向F/C281x的移植365
第13章 世界向数字化方向发展
13.1 集成电路在TI公司的发明367
13.2 数字技术创造未来368
参考文献371 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|