DSP第四章TMS320C54x定时器/计数器
- 格式:ppt
- 大小:465.50 KB
- 文档页数:42
T M S320C54x D S P(精)TMS320C54x DSP CPU与外设第一章综述1 总线结构C54x包括8条16比特宽度的总线,其中:●一条程序总线(PB)●三条数据总线(CB、DB、EB)●四条地址总线(PAB、CAB、DAB、EAB)2CPUC54x的CPU结构包括:●40比特的ALU,其输入来自16比特立即数、16比特来自数据存储器的数据、暂时存储器、T中的16比特数、数据存储器中两个16比特字、数据存储器中32比特字、累加器中40比特字。
●2个40比特的累加器,分为三个部分,保护位(39-32比特)、高位字(31-16比特)、低位字(15-0比特)。
●桶型移位器,可产生0到31比特的左移或0到16比特的右移。
●17×17比特的乘法器●40比特的加法器●比较选择和存储单元CSSU●数据地址产生器DAGEN●程序地址产生器PAGEN3外设C54x包括:●通用I/O引脚,XF和BIO●定时器●PLL时钟产生器●HPI口,8比特或16比特●同步串口●带缓存串口,BSP●多路带缓存串口,McBSP●时分复用串口,TDM●可编程等待状态产生器●可编程bank-switching模块●外部总线接口●IEEE1149.1标准JTAG口第二章存储器一般而言,C54x的存储空间可达192K16比特字,64K程序空间,64K数据空间,64KI/O空间。
依赖其并行的工艺特性和片上RAM双向访问的性能,在一个机器周期内,C54x可以执行4条并行并行存储器操作:取指令,两操作数读,一操作数写。
使用片内存储器有三个优点:高速执行(不需要等待),低开销,低功耗。
1 存储空间分配图(以C549为例)复位后,中断矢量表位于程序区FF80H 位置,可重新定位于程序空间任何一个128字的页面(其地址高9比特即页号由PMST 中IPTR 确定)。
2 程序存储区C54x 有片内ROM 、DARAM 、SARAM ,这些区域可以通过软件配置到程序空间。
第一章TMS320C54x系列DSP概述1.1DSP芯片概述1.什么是DSP芯片2.DSP芯片的基本结构1.2TMS320C54x系列DSP的结构和特点1.2.1TMS320C54x系列DSP的概述1.2.2 TMS320C54x系列DSP的特点.1.2.3 TMS320C54x系列DSP的内部硬件结构1.3 总线结构1.4 CPU状态和控制寄存器1.4.1 状态寄存器ST0和ST11.4.2 处理器工作模式状态(PMST)寄存器1.5 算数逻辑单元(ALU)1.5.1 ALU的输入1.5.2 溢出处理1.5.3 进位位1.5.4 双16位模式1.6 累加器A和B1.6.1 保存累加器的内容1.6.2 累加器移位和循环操作1.6.3 饱和处理累加器内容1.6.4 专用指令1.7 桶式移位器1.8 乘法器/加法器单元1.8.1 乘法器的输入源1.8.2 乘法/加法(MAC)指令1.8.3 MAC和MAS乘法运算的饱和处理1.9 比较、选择和存储单元1.10 指数编码器第二章存储器和I/O空间操作TMS320C54x DSP存储器概述存储器空间程序存储器程序存储器的可配置性片内ROM的组织程序存储器地址映射和片内ROM内容片内ROM的代码内容和映射扩展程序存储器数据存储器数据存储器的可配置性片内RAM的组织存储器映射寄存器I/O空间及其访问第三章寻址方式和程序控制3.1立即寻址3.2绝对寻址3.2.1数据存储器地址(dmad)寻址3.2.2程序存储器地址(pmad)寻址3.2.3端口地址(PA)寻址3.2.4*(lk)寻址3.3累加器寻址3.4直接寻址3.4.1基于DP的直接寻址3.4.2基于SP的直接寻址3.5间接寻址3.5.1单操作数寻址3.5.2ARAU和地址产生操作3.5.3单操作数地址的修改1.增加/减少地址(MOD=0、1、2或3)2.偏移地址修改(MOD=12或13)3.变址地址修改(MOD=5或6)4.循环地址修改(MOD=8、9、10、11或14)5.位反向寻址(MOD=4或7)3.5.4双操作数寻址3.5.5修正(ARP)模式3.6存储器映射寄存器寻址3.7堆栈寻址3.8数据类型3.9产生程序存储器地址3.10程序计数器(PC)3.11程序控制3.11.1分支转移1. 无条件分支转移2. 条件分支转移3. 远分支转移3.11.2 调用1.无条件调用2.条件调用3.远调用3.11.3 返回1.无条件返回2.条件返回3.远返回3.11.4 条件操作1.使用多个条件2.条件执行(XC)指令3.条件存储指令3.11.5 重复单条指令3.11.6 重复一个指令快3.12 复位操作3.13 TMS320C54x DSP的中断系统3.13.1 TMS320C54x DSP中断系统概述1. 中断分类2. 处理中断的步骤3.13.2 中断标志寄存器(IFR)3.13.3 中断屏蔽存储器(IMR)3.13.4 接收中断请求3.13.5 应答中断3.13.6 执行中断服务程序(ISR)3.13.7 保存中断上下文3.13.8 中断等待时间3.13.9 中断操作流程3.13.10 重新映射中断向量地址3.13.11 中断和中断向量表3.14 节电模式3.14.1 IDLE1模式3.14.2 IDLE2模式3.14.3 IDLE3模式3.14.4 保持(Hold)模式3.14.5 其他节电性能第四章流水线4.1流水线操作4.1.1 流水线的分支转移指令1. 分支转移指令B2. 延时分支转移指令BD4.1.2 流水线中的调用指令1. 调用指令CALL和CALLD2. 中断指令INTR4.1.3 流水线中的返回指令4.1.4 流水线中的条件执行4.1.5 流水线中的条件调用和分支转移1. 条件调用2. 条件分支转移4.2 中断和流水线4.3 双访问存储器和流水线4.3.1 解决取指和读操作数之间的冲突4.3.2 解决写操作数和读双操作数之间的冲突4.3.3 解决写操作数、写操作数和读双操作数的冲突4.4 单访问存储器和流水线4.5 流水线等待4.5.1 访问存储器映射寄存器的推荐指令4.5.2 更新ARx、BK或SP-解决冲突第五章汇编程序设计应用软件开发流程和工具COFF文件概述COFF文件的基本单元-段汇编器对段的处理1.未初始化段2.初始化的段3.自定义段4.子段(Subsections)5.段程序计数器6.使用段伪指令的简单实例链接器对段的处理重新定位运行时重新定位加载程序COFF文件中的符号1.外部符号2.符号表汇编语言程序格式汇编程序格式1.标号区2.助记符指令域3.代数指令域4.注释汇编语言的数据格式1.常数2.符号表达式1.算术操作符2.表达式上溢和下溢3.有效定义的表达式4.条件表达式5.可重定位的符号和合法表达式5.3.4 内置函数5.3.5 加载值到扩展程序存储器5.4 汇编伪指令5.4.1 定义段的伪指令5.4.2 初始化常数的伪指令5.4.3 对准段程序计数器的伪指令5.4.4 格式化输出清单文件的伪指令5.4.5 引用其他文件的伪指令5.4.6 条件汇编伪指令5.4.7 汇编时符号伪指令5.4.8 混和伪指令5.4.9 常用伪指令及其语法格式5.5 程序汇编5.5.1 运行汇编程序5.5.2 条件汇编5.5.3 列表文件5.5.4 交叉引用清单5.6 程序链接5.6.1 链接器的调用5.6.2 链接器的选项5.6.3 链接器命令文件(.cmd文件)5.7 编写链接器命令文件(.cmd文件)5.7.1 MEMORY指令5.7.2 SECTIONS指令1. SECTINS指令的使用方法2. 为输出段指定地址5.7.3 MEMORY和SECTIONS指令的默认算法5.7.4 命令文件编写及链接实例1. 命令文件2. 链接文件5.8 宏定义和调用宏5.8.1 宏定义5.8.2 调用宏5.8.3 使用递归和嵌入宏第六章汇编语言指令指令集概述算数操作逻辑操作程序控制加载和存储指令6.2 指令集的符号和缩写第七章C/C++编译器概述7.1C/C++编译器命令解释程序7.2调用编译器解释命令程序7.3改变编译器的选项7.3.1常用的选项7.3.2指定文件名7.3.3修改编译器对文件名的解释7.3.4修改编译器对文件名扩展的解释和命名7.3.5指定目录7.3.6控制汇编器的选项7.4 使用环境变量改变编译器特性7.4.1 制定文件目录(C_DIR和C54X_C_DIR)7.4.2 设置默认编译器选项(C_OPTION 或C54_C_OPTION) 7.5 控制预处理器7.5.1 预定义的宏名7.5.2 #include 文件的搜索路径7.5.3 用-i选项改变#include 文件的搜索路径7.5.4 产生预处理的列表文件(-ppo选项)7.5.5 预处理后继续编译(-ppa选项)7.5.6 产生一个带注释的预处理列表文件(-ppc选项)7.5.7 产生一个具有行控制信息的预处理列表文件(-ppl选项)7.5.8 产生#include伪指令包含的文件列表(-ppi选项)7.6 使用直接插入函数展开7.6.1 直接插入内部操作数7.6.2 无保护的定义控制直接插入7.6.3 使用预处理器符号_INLINE的保护直接插入7.6.4 直接插入限制7.7 使用交互列表工具7.8 编译错误简介7.8.1 控制诊断消息7.8.2 如何使用诊断选项第八章优化C/C++代码8.1使用C编译优化器8.2使用-O3选项8.2.1 控制文件级优化(-O1n选项)8.2.2 创建优化信息文件(-On n选项)8.3 执行程序级优化8.3.1 控制程序级优化(-Op n选项)8.3.2 混和C/C++语言和汇编的优化考虑因素8.4 自动直接插入扩展(-Oi选项)8.5 使用交互列表工具8.6 访问优化代码中的别名变量8.7 调试优化得代码和优化类型8.7.1 调试优化的代码8.7.2 压缩优化的代码(-gp和-O选项)8.7.3 可执行的优化类型1. 基于重要程度的寄存器分配2. 消除别名的歧义3. 分支转移优化和控制流简化4. 数据流优化5. 表达式简化6. 函数的直接插入展开7. 循环归纳变量优化和强度降低8. 循环不变代码的移动9. 循环旋转10. 尾部合并11. 自动增量寻址12. 重复块13. 延迟、转移、调用和返回14. 算数重排、符号简化和常数合并第九章链接C/C++代码9.1调用链接器9.1.1 单步调用链接器9.1.2 作为编译的步骤调用链接器9.2 禁用链接器(-c编译器选项)9.3 控制链接过程9.3.1 链接运行时支持库9.3.2 运行时初始化9.3.3 全局对象构造器9.3.4 指定初始化类型9.3.5 指定段在存储器中的分配9.3.6 链接器命令文件实例第十章TMS320C54x C/C++语言10.1 TMS320C54x C/C++语言的特点10.1.1 TMS320C54x C语言特点1. 标志符和常数2. 数据类型3. 数据转换4. 表达式5. 声明6. 预处理器10.1.2 TMS320C54x C++语言特点10.2 数据类型10.3 关键词10.3.1 const关键词10.3.2 ioport关键词10.3.3 interrupt关键词10.3.4 near 和far关键词10.3.5 volatile关键词10.4 寄存器变量和全局寄存器变量10.4.1 寄存器变量10.4.2 全局寄存器变量1. 何时使用全局变量寄存器2. 避免破坏寄存器的值3. 禁止编译器使用AR1和AR6 10.5 Pragma伪指令1. CODE_SECTION指令2. DA TA_SECTION指令3. FUNC_CANNOT_INLINE指令4. FUNC_EXT_CALLED指令5. FUNC_IS_PURE指令6. FUNC_IS_SYSTEM指令7. FUNC_NEVER_RETURNS指令8. FUNC_NO_ASG指令9. FUNC_NO_IND_ASG指令10. IDENT指令11. INTERRUPT指令12. NO_INTERRUPT指令10.6 初始化静态和全局变量10.7 C/C++和汇编语言混和编程10.7.1 用/C++代码调用汇编语言模块10.7.2 在C语言中插入汇编语句10.7.3 在程序中访问汇编语言变量10.7.4 访问汇编语言的常数第十一章运行时环境和支持库11.1存储器模式11.1.1 段11.1.2 C系统堆栈11.1.3 分配.const到程序存储器11.1.4 动态存储器分配11.1.5 变量初始化11.1.6 为静态和全局变量分配存储器11.1.7 子段/结构体定位11.1.8 字符串常数11.2 寄存器规定11.2.1 状态寄存器的位11.2.2 寄存器变量11.3 函数结构和调用规定11.3.1 函数如何进行调用11.3.2 被调用函数如何响应11.3.3 访问变量和局部变量11.3.4 分配帧和使用32位存储器读指令11.4 中断处理11.4.1 C语言中中断的基本知识11.4.2 使用C/C++中断程序11.4.3保存中断入口点的上下文11.5 系统初始化11.5.1 变量自动初始化11.5.2 全局构造器11.5.3 初始化表11.5.4 运行时变量的自动初始化11.5.5 在加载时变量的初始化11.6 运行时支持库函数11.6.1 库11.6.2 C的I/O函数1. 低级I/O的执行2. 为C的I/O添加一个设备3. 低级函数11.6.3 头文件1. 诊断消息头文件(assert.h/cassert)2. 字符测试和转换(ctype.h cctype)3. 错误报告(error.h/cerrno)4. 扩展寻址函数(extaddr.h)5. 低级输入/输出函数(file.h)6. 限制头文件(float.h/cfloat和limits.h/climits)7. 浮点数学函数(math.h/cmath)8. 非局部转移(set jump.h/cset jump)9. 变量可变头文件(stdarg.h/cstdarg)10. 标准定义头文件(stddef.h/cstddef)11. 输入/输出函数(stdio.h/cstdio)12. 通用工具头文件(stdlib.h/cstdlib)13. 字符串函数头文件(string.h/cstring)14. 时间函数头文件(time.h/ctime)15. 异常事件的处理(exception和stdexcept)16. 动态存储器管理(new)17. 运行时类型信息(typeinfo)第十二章集成开发环境(CCS)12.1CCS2.0系统的安装和配置S2.0系统的安装2.系统配置3.运行CCS2.012.2建立工程文件1.建立一个新的工程项目文件2.向工程项目中添加文件12.3设置工程项目选项12.3.1 编译器环境参数设置1. 设置结果显示2. 具体选项的设置12.3.2 链接器环境参数设置1. 设置结果显示2. 具体选项的设置12.4 编译、链接和运行目标文件12.4.1 编译和链接12.4.2 仿真运行输出目标文件12.5 查看存储器信息12.6 查看寄存器信息1. 查看CPU寄存器2. 查看外设寄存器12.7 修改存储器和寄存器内容1. 修改存储器内容2. 修改寄存器内容3. 修改变量内容12.8 设置断点和探测点1. 设置断点2. 设置探测点12.9 图形显示12.9.1 定义探测点和输入数据12.9.2 将探测点与数据文件链接起来12.9.3 建立幅值-时间图形1. 建立图形2. 链接图形到数据源激活图形12.9.4 建立“眼(Eye)”图形1. 建立图形2. 链接图形到数据源激活图形12.9.5 建立“合成(Constellation)”图形1. 建立图形2. 链接图形到数据源激活图形第十三章应用程序开发实例13.1提高系统性能的几种方法13.1.1 有效存储器分配的建议1. 安排SARAM和DARAM的数据分配2. 对于随即访问的变量,使用直接寻址,并将他们分配到同一个128字的页面3. 为中断而保留专用的CPU资源13.1.2 存储器定位要求13.1.3 堆栈初始化13.1.4 重叠管理13.1.5 存储取之间的移动13.2 算术运算13.2.1 除法和求模运算13.2.2 正弦和余弦运算13.2.3 扩展精度运算13.2.4 浮点运算13.3 快速傅立叶变换(FFT)的DSP实现13.3.1 离散傅立叶变换(DFT)13.3.2 快速傅立叶变换(FFT)13.3.3 快速傅立叶变换的DSP实现1. 实数FFT运算序列的存储分配2. 基2实数FFT运算的算法3. 计算所求信号的功率13.4 FIR滤波器的DSP实现1. FIR滤波器实现方法2. FIR的DSP实现程序代码13.5 IIR滤波器的DSP实现1. 无限脉冲响应(IIR)滤波器结构2. 双二次IIR滤波器的实例程序13.6 自适应滤波的DSP实现13.7 CODEC应用程序的DSP实现1. 编写汇编程序2. 链接命令文件。
TMS320C54xDSP CPU外设第一章综述1 总线结构C54x包括8条16比特宽度的总线,其中:●一条程序总线(PB)●三条数据总线(CB、DB、EB)●四条地址总线(PAB、CAB、DAB、EAB)2CPUC54x的CPU结构包括:●40比特的ALU,其输入来自16比特立即数、16比特来自数据存储器的数据、暂时存储器、T中的16比特数、数据存储器中两个16比特字、数据存储器中32比特字、累加器中40比特字。
●2个40比特的累加器,分为三个部分,保护位(39-32比特)、高位字(31-16比特)、低位字(15-0比特)。
●桶型移位器,可产生0到31比特的左移或0到16比特的右移。
●17×17比特的乘法器●40比特的加法器●比较选择和存储单元CSSU●数据地址产生器DAGEN●程序地址产生器PAGEN3外设C54x包括:●通用I/O引脚,XF和BIO●定时器●PLL时钟产生器●HPI口,8比特或16比特●同步串口●带缓存串口,BSP●多路带缓存串口,McBSP●时分复用串口,TDM●可编程等待状态产生器●可编程bank-switching模块●外部总线接口●IEEE1149.1标准JTAG口第二章 存储器一般而言,C54x 的存储空间可达192K16比特字,64K 程序空间,64K 数据空间,64KI/O 空间。
依赖其并行的工艺特性和片上RAM 双向访问的性能,在一个机器周期内,C54x 可以执行4条并行并行存储器操作:取指令,两操作数读,一操作数写。
使用片内存储器有三个优点:高速执行(不需要等待),低开销,低功耗。
1 存储空间分配图(以C549为例)复位后,中断矢量表位于程序区FF80H 位置,可重新定位于程序空间任何一个128字的页面(其地址高9比特即页号由PMST 中IPTR 确定)。
2 程序存储区C54x 有片内ROM 、DARAM 、SARAM ,这些区域可以通过软件配置到程序空间。
《TMS320C54x DSP应用技术教程》部分习题答案注意:未提供的参考答案习题(因考试为开卷形式,部分在课堂讲过,部分需要自行思考归纳总结或编程),请参考PPT和书上示例,自行解答。
第1章绪论1.简述Digital Signal Processing 和Digital Signal Processor 之间的区别与联系。
答:前者指数字信号处理的理论和方法,后者则指用于数字信号处理的可编程微处理器,简称数字信号处理器。
数字信号处理器不仅具有可编程性,而且其数字运算的速度远远超过通用微处理器,是一种适合于数字信号处理的高性能微处理器。
数字信号处理器已成为数字信号处理技术和实际应用之间的桥梁,并进一步促进了数字信号处理技术的发展,也极大地拓展了数字信号处理技术的应用领域。
2.什么是DSP技术?答:DSP技术是指使用通用DSP处理器或基于DSP核的专用器件,来实现数字信号处理的方法和技术,完成有关的任务。
5.数字信号处理的实现方法有哪些?答:参见P3-4 1.1.3节。
6.DSP的结构特点有哪些?答:哈佛结构和改进的哈佛结构、多总线结构、流水线技术、多处理单元、特殊的DSP指令、指令周期短、运算精度高、硬件配置强。
7.什么是哈佛结构和冯洛伊曼结构?它们有什么区别?答:参见P5-6 1.2.2节。
8.什么是哈佛结构和冯.诺依曼结构?它们有什么区别?答:DSP处理器将程序代码和数据的存储空间分开,各空间有自己独立的地址总线和数据总线,可独立编址和独立访问,可对程序和数据进行独立传输,这就是哈佛结构。
以奔腾为代表的通用微处理器,其程序代码和数据共用一个公共的存储空间和单一的地址和数据总线,取指令和取操作数都是通过一条总线分时进行的,这样的结构称为冯·诺伊曼结构。
采用哈佛结构,可同时取指令和取操作数,并行地进行指令和数据的处理,从而可以大大地提高运算的速度,非常适合于实时的数字信号处理。
而冯·诺伊曼结构当进行高速运算时,取指令和取操作数是分时操作的,这样很容易造成数据传输通道的瓶颈现象,其工作速度较慢。
大家在阅读的时候使Word成折叠模式看着会更舒服些。
关于文档里边用到的中文参考资料,附下载地址:/icview-161578-1-1.html前言DSP的本质还是单片机-微机,个人认为,微机类芯片,不论是MCU,ARM还是DSP 甚至是PC上的处理器,我们在学习这类芯片的使用时,首先要学习的便是这些芯片的CPU 核,存储器组织和中断系统。
只有把这几方面的内容掌握之后,你才能说根据其特点来使用这块芯片,Debug时你心中才有数。
至于片上外设,与芯片本身其实并没有太大关系,大可以要使用时再去学习,而且不同芯片的外设其实还都是相通的。
基于此,我把我在学习这类芯片时对于这几块的学习的笔记摘录出来(这篇文档中对是对Ti的TMS320C54x系列的学习笔记),以供大家参考。
我的笔记虽然可能次序,排版,没有市面上的书本组织得好,但我可以说,我决对是面面向应用来写的,而不是为了出书来写的。
市面上的技术类的书,大多数其实只是简单的把官方的文档翻译过来而已,而且在翻译的过程中还省略了很多细节,这些细节其实对于我们的理解和工程开发都是很重要的,另外很多翻译还不准确。
在我的笔记中,中文资料我只是作为一个参考,或者作为一种线索,真正有价值的信息都是来自于我对于官方文档的学习。
每一部分的记录都是以一个新手的态度来写的,这些问题都是新手在学习过程中很可能会遇到或想到的。
虽然排版不好,但当你遇到相关问题或想了解某一块时,把我写的这个Word 文档下载下来,然后使用Word文档的搜索功能搜索自己感兴趣的内容,相信一定会让你得到较为满意的结果的。
不仅是DSP芯片方面的知识笔记,在我向信号处理工程师奋斗的路程上,我对我每一天的学习都作了笔记记录,这些笔记记录都是面向新手,面向细节,面向工程的,都是自己用心的体会。
当有笔记成熟或自成一块时,我会把这些笔记都陆续分享给大家,以供大家在学习或开发过程的参考,希望能为大家节省点时间。
附一张目前自己的笔记文件夹的图。