资源预览内容
第1页 / 共294页
第2页 / 共294页
第3页 / 共294页
第4页 / 共294页
第5页 / 共294页
第6页 / 共294页
第7页 / 共294页
第8页 / 共294页
第9页 / 共294页
第10页 / 共294页
亲,该文档总共294页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
DSP技术原理及应用河北工业大学信息工程学院刘艳萍目录第1章 绪论第2章 TMS320C54x的结构原理(结合第七章内容)第3章 TMS320C54x硬件系统设计第4章 TMS320C54x指令系统第5章 DSP软件开发与设计(结合第六章内容)第八章和第九章结合实验学习第一章绪论要求:掌握:数字信号处理及数字信号处理器的基本概念和特点。选择dsp芯片的要素。了解:定点DSP的数据格式了解:现有各种型号DSP芯片的特征及其用途,尤其是TI公司的DSP芯片。数字信号处理器的发展及应用。第一章绪论DSP有两种理解:有两种理解:一、广义的理解:一、广义的理解:digital signal processing数字信号处理数字信号处理 二、狭义的理解:二、狭义的理解:digital signal processor数字信号处理器数字信号处理器 1.1数字信号处理:数字信号处理: 他是利用计算机或专用处理设备,以数字形式对信号进行采他是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,得到符合需集、变换、滤波、估值、增强、压缩、识别等处理,得到符合需要的信号形式。要的信号形式。在通用的计算机上用软件实现。在通用的计算机上用软件实现。在通用计算机系统上加上专用的加速处理机实现。在通用计算机系统上加上专用的加速处理机实现。用通用的单片机实现。用通用的单片机实现。用通用的可编程用通用的可编程DSP芯片实现。芯片实现。用专用的用专用的DSP芯片实现。芯片实现。用用/CPLD/FPGA实现。实现。 1、数字信号处理的实现方法:、数字信号处理的实现方法:2、数字信号处理系统的一般组成抗抗混混叠叠滤滤波波器器将将输输入入信信号号X(t)中中比比主主要要频频率率高高的的信信号号分分量量滤滤除除,避免产生信号频谱的混叠现象。避免产生信号频谱的混叠现象。A/D将输入的模拟信号转换为将输入的模拟信号转换为DSP芯片可接收的数字信号。芯片可接收的数字信号。DSP芯片芯片对对A/D输出的信号进行某种形式的数字处理。输出的信号进行某种形式的数字处理。D/A经经过过DSP芯芯片片处处理理的的数数字字样样值值经经D/A转转换换为为模模拟拟量量,然然后进行平滑滤波得到连续的模拟信号。后进行平滑滤波得到连续的模拟信号。3、数字信号处理系统的一般设计过程1.2 数字信号处理器DSPDSP:是一种特别适合于进行数字信号处理运算的微处理器,其是一种特别适合于进行数字信号处理运算的微处理器,其主要应用是实时快速地实现各种数字信号处理算法。主要应用是实时快速地实现各种数字信号处理算法。 1.DSP的主要特点:的主要特点:哈佛结构哈佛结构 :冯冯诺诺曼曼结结构构:将将指指令令、数数据据存存储储在在同同一一个个存存储储器器中中,统统一一编编址址,译译稿稿指指令令计计数数器器提提供供的的地地址址来来区区分分是是指指令令还还是是数数据据。取取指指令令和和取取数数据据都都访访问问统统一一存储器,数据吞吐率低。存储器,数据吞吐率低。基本哈佛结构:程序和数据存储在不同的存储空间,程序存储空间和数据基本哈佛结构:程序和数据存储在不同的存储空间,程序存储空间和数据存储空间是两个相互独立的存储空间,每个存储空间独立编址,独立访问。存储空间是两个相互独立的存储空间,每个存储空间独立编址,独立访问。 冯诺曼结构基本哈佛结构改进哈佛结构多总线结构多总线结构对对DSP来说,总线越多,可以完成的功能就越复杂。来说,总线越多,可以完成的功能就越复杂。流水线结构流水线结构如四级流水线的操作图:如四级流水线的操作图:DSP主要特点续多处理单元多处理单元 DSP内内部部一一般般都都包包括括有有多多个个处处理理单单元元,如如算算术术逻逻辑辑运运算算单单元元(ALU)、辅辅助助寄寄存存器器运运算算单单元元(ARAU)、累累加加器器(ACC)以以及及硬硬件件乘乘法法器器(MULT)单元等。它们可以在一个指令周期内同时进行运算。单元等。它们可以在一个指令周期内同时进行运算。利用这种流水线结构,加上执行重复操作,保证了数字信号处利用这种流水线结构,加上执行重复操作,保证了数字信号处理中用得最多的乘法累加运算可以在单个指令周期内完成。理中用得最多的乘法累加运算可以在单个指令周期内完成。DSP主要特点续特殊的特殊的DSP指令指令 在在DSP的的指指令令系系统统中中,设设计计了了一一些些特特殊殊的的DSP指指令令。例例如如TMS320C54x中中的的FIRS和和LMS指指令令,则则专专门门用用于于系系数数对对称称的的FIR滤波器和滤波器和LMS算法。算法。指令周期短指令周期短DSP广广泛泛采采用用亚亚微微米米CMOS制制造造工工艺艺,如如TMS320C54x,其其运运行行速速度度可可达达200MIPS。 TMS320C55x,其其运运行行速速度度可可达达400MIPS。 TMS320C6414T的时钟为的时钟为1GHz,运行速度达到运行速度达到8000 MIPS。运算精度高运算精度高DSP的的字字长长有有16位位、24位位、32位位。为为防防止止运运算算过过程程中中溢溢出出,累累加加器器 达达 到到 40位位 。 此此 外外 , 一一 批批 浮浮 点点 DSP, 例例 如如 TMS320C3x、TMS320C4x、 TMS320C67x、 TMS320F283x、 ADSP21020等等,则提供了更大的动态范围。则提供了更大的动态范围。DSP主要特点续硬件配置强硬件配置强新新一一代代DSP的的接接口口功功能能愈愈来来愈愈强强,片片内内具具有有定定时时器器、串串行行口口、主主机机接接口口(HPI)、DMA控控制制器器、软软件件控控制制的的等等待待状状态态产产生生器器、锁锁相相环环时时钟钟产产生生器器、A/D转转换换以以及及实实现现在在片片仿仿真真符符合合IEEE 1149.1标标准准的的测测试试仿仿真真接接口口,使使系系统统设设计计更更易易于于完完成成。另另外外,许许多多DSP芯芯片片都都可可以以工工作在省电方式,大大降低了系统功耗。作在省电方式,大大降低了系统功耗。2、DSP的分类按按基基础础特特性性分分:DSP芯芯片片的的工工作作时时钟钟(主主频频)和和指令类型指令类型DSPDSP的分类有三种方式:按基础特性分的分类有三种方式:按基础特性分的分类有三种方式:按基础特性分的分类有三种方式:按基础特性分、按数据格式分、按用途分按数据格式分、按用途分按数据格式分、按用途分按数据格式分、按用途分静态DSP芯片:该类型在某时钟频率范围内都能正常工作,除计算速度有变化外,没有性能上的下降。如日本OKI电器公司的DSP和TI公司的TMS320C2XX系列;一致性DSP:两种或更多的DSP芯片,其指令集、机器代码及管脚结构相互兼容。如美国TI公司的TMS320C54X。2、DSP的分类(续) 按按数数据据格格式式分分:DSP对对数数据据的的处处理理有有两两种种格格式式:定定点点数数据据格格式式和浮点数据格式。和浮点数据格式。定点定点定点定点DSPDSP芯片:数据以定点格式参加运算。芯片:数据以定点格式参加运算。芯片:数据以定点格式参加运算。芯片:数据以定点格式参加运算。浮浮浮浮点点点点DSPDSP芯芯芯芯片片片片:数数数数据据据据以以以以浮浮浮浮点点点点格格格格式式式式参参参参加加加加运运运运算算算算。不不不不同同同同浮浮浮浮点点点点DSPDSP所所所所采用的浮点格式可能不同。采用的浮点格式可能不同。采用的浮点格式可能不同。采用的浮点格式可能不同。按用途分:按用途分:按用途分:按用途分: 通用型:适合普通的通用型:适合普通的通用型:适合普通的通用型:适合普通的DSPDSP应用。应用。应用。应用。 专用型:为特定的功能、运算而设计的。如数字滤波、卷专用型:为特定的功能、运算而设计的。如数字滤波、卷专用型:为特定的功能、运算而设计的。如数字滤波、卷专用型:为特定的功能、运算而设计的。如数字滤波、卷积、积、积、积、FFTFFT等。如等。如等。如等。如TMS320C24xTMS320C24x适合自动控制;适合自动控制;适合自动控制;适合自动控制;MOTOLORAMOTOLORA公公公公司的司的司的司的DSP56200DSP56200专用于数字滤波。专用于数字滤波。专用于数字滤波。专用于数字滤波。 3、DSP的选择选择选择DSP芯片时应考虑如下几个因素:芯片时应考虑如下几个因素: DSPDSP芯片的运算速度:运算速度可以用以下几种性能指标来衡量;芯片的运算速度:运算速度可以用以下几种性能指标来衡量;芯片的运算速度:运算速度可以用以下几种性能指标来衡量;芯片的运算速度:运算速度可以用以下几种性能指标来衡量; 指令周期:即执行一条指令所需要的时间,通常以指令周期:即执行一条指令所需要的时间,通常以指令周期:即执行一条指令所需要的时间,通常以指令周期:即执行一条指令所需要的时间,通常以nsns为单位。为单位。为单位。为单位。 MACMAC时间:即完成一次乘法和一次加法时间。时间:即完成一次乘法和一次加法时间。时间:即完成一次乘法和一次加法时间。时间:即完成一次乘法和一次加法时间。 FFTFFT执行时间:即运行一个执行时间:即运行一个执行时间:即运行一个执行时间:即运行一个N N点点点点FFTFFT程序所需时间。程序所需时间。程序所需时间。程序所需时间。 MIPSMIPS:每秒执行百万条指令。每秒执行百万条指令。每秒执行百万条指令。每秒执行百万条指令。 MOPSMOPS:每秒执行百万次操作。每秒执行百万次操作。每秒执行百万次操作。每秒执行百万次操作。 MFLOPSMFLOPS:每秒执行百万次浮点操作。每秒执行百万次浮点操作。每秒执行百万次浮点操作。每秒执行百万次浮点操作。 BOPSBOPS:每秒执行十亿次操作。每秒执行十亿次操作。每秒执行十亿次操作。每秒执行十亿次操作。 DSPDSP芯片的硬件资源;芯片的硬件资源;芯片的硬件资源;芯片的硬件资源; DSPDSP芯片的运算精度:参加运算的数据字长越长精度越高。芯片的运算精度:参加运算的数据字长越长精度越高。芯片的运算精度:参加运算的数据字长越长精度越高。芯片的运算精度:参加运算的数据字长越长精度越高。 DSPDSP芯片的功耗;芯片的功耗;芯片的功耗;芯片的功耗; DSPDSP芯片的开发工具;芯片的开发工具;芯片的开发工具;芯片的开发工具; DSPDSP芯片的价格;芯片的价格;芯片的价格;芯片的价格;DSPDSP芯片发展迅速,价格下降也很快。芯片发展迅速,价格下降也很快。芯片发展迅速,价格下降也很快。芯片发展迅速,价格下降也很快。 其它。封装形式、质量标准、供货情况、生命周期等。其它。封装形式、质量标准、供货情况、生命周期等。其它。封装形式、质量标准、供货情况、生命周期等。其它。封装形式、质量标准、供货情况、生命周期等。1.3 定点DSP的数据格式 在定点处理器中,数据采用定点表示方法,在定点处理器中,数据采用定点表示方法,定点表示并不意味定点表示并不意味着就一定是整数表示。着就一定是整数表示。它有两种基本表示方法:整数表示方法和小数表示方法。它有两种基本表示方法:整数表示方法和小数表示方法。整数表示方法主要用于控制操作、地址计算和其他非信号处理整数表示方法主要用于控制操作、地址计算和其他非信号处理的应用。的应用。小数表示方法则主要用于数字和各种信号处理算法的计算中。小数表示方法则主要用于数字和各种信号处理算法的计算中。01010111S262524232221208 8位定点整数表示方法:位定点整数表示方法:01110000S2-12-22-32-42-52-62-78 8位定点小数表示方法:位定点小数表示方法:结果=2-1+2-2+2-3=0.875结果=26+24+22+21+20=87定点数的表示法 定点数最常用的是定点数最常用的是Q表示法,或表示法,或Qn表示法。;表示法。;n表示数的表示数的2补码补码的小数部分;的小数部分;1位符号位;数的总字长为位符号位;数的总字长为m+n+1位。表示数的整位。表示数的整数范围为数范围为(-2m 2m-1),小数的最小分辨率为小数的最小分辨率为2-n 。几种常用的几种常用的Q表示法的格式:表示法的格式:Q0格式的字长为16位。位数1514131211109.0值SI14I13I12I11I10I9.I0定点数的整数形式。最高位为符号S,接下来的Ix为15位2补码的整数 ,表示数的范围为(-215215-1),最小的分辨率为1。Q12格式的字长为16位。最高位为符号S,接下来的3位为2补码的整数位,高位在前,后面的12位为2补码小数位。Q3.12 格式表示数的大致范围为(-8,7),小数的最小分辨率为2-12 。 位数1514131211109.0值SI3I2I1Q11Q10Q9.Q0Q15格式格式Q15格式的字长为格式的字长为16位,其每位的具体表示如下:位,其每位的具体表示如下:位数1514131211109.0值SQ14Q13Q12Q11Q10Q9.Q0最高位为符号最高位为符号S,接下来的为接下来的为2补码的补码的15位小数位,小数点紧接着位小数位,小数点紧接着符号位,无整数位。符号位,无整数位。Q15格式表示数的范围为(格式表示数的范围为(-1,1),小数的最小分辨率为),小数的最小分辨率为2-15 。 对于对于16位的定点处理器位的定点处理器TMS320C54x来说,来说,Q15是在程序设计中是在程序设计中最常用的格式。最常用的格式。TI公司提供的数字信号处理应用程序库公司提供的数字信号处理应用程序库DSPLIB就主要采用这种数据格式。就主要采用这种数据格式。定点数格式的选择定点数格式的选择定定点点格格式式表表示示数数的的范范围围和和数数据据的的精精度度是是确确定定的的。表表示示数数的的范范围围越越大大,数数据据的的精精度度越越低低,也也就就是是说说,数数的的范范围围与与精精度度是是一一对对矛矛盾盾。对对16位位的的数数据据来来说说,动动态态范范围围最最大大的的格格式式为为整整数数Q0,精精度(或分辨率)最高的格式为度(或分辨率)最高的格式为Q15。 定定点点格格式式的的选选择择实实际际上上就就是是根根据据Qn表表示示方方法法确确定定数数据据的的小小数数点点位置。位置。定点格式数据的转换 有有2种转换的方法:种转换的方法:若若数数已已经经是是某某种种动动态态范范围围较较小小的的QnQn格格式式,为为了了与与动动态态范范围围较较大大的的QnQn格格式式数数进进行行运运算算,则则可可根根据据运运算算结结果果的的动动态态范范围围,直直接接将将数数据据右右移移,将将数数据据转转换换成成结结果果所所需需的的QnQn格格式式,这这时时原原来来格格式式的的最最低低位位将将被被移移出出,高高位位则则进进行行符符号号位扩展。这在某些情况下会损失动态范围较小的格式的数据的精度。位扩展。这在某些情况下会损失动态范围较小的格式的数据的精度。将十进制数没有表示成任何形式的二进制数,则要表示成将十进制数没有表示成任何形式的二进制数,则要表示成QnQn格式。格式。先将数乘以先将数乘以2 2n n变成整数,然后再将整数转换成相应的变成整数,然后再将整数转换成相应的QnQn格式。格式。例例如如设设y=-0.625y=-0.625,若若要要表表示示成成Q15Q15格格式式,先先将将-0.625-0.625乘乘以以2 21515 得得到到-20480-20480,再再将将-20480-20480表表示示成成2 2的的补补码码数数B000HB000H,这这也也就就是是-0.625-0.625的的Q15Q15格格式式表表示示;若若要要将将-0.625-0.625表表示示成成Q12Q12格格式式,则则将将-0.625-0.625乘乘以以2 21212 得得到到-2560-2560,表表示示成成2 2的的补补码数为码数为F600HF600H,这也就是这也就是-0.625-0.625的的Q12Q12格式表示。格式表示。例例如如,若若5.625+0.625=6.255.625+0.625=6.25,5 5和和结结果果6.256.25需需要要采采用用Q12Q12格格式式才才能能保保证证其其动动态态范范围围,若若0.6250.625原原来来用用Q15Q15格格式式表表示示,则则需需要要先先将将他他表表示示成成Q12Q12后后,再再进进行行计计算,自然,最后的结果也为算,自然,最后的结果也为Q12Q12。1.4 DSP芯片的发展及应用 信信号号处处理理系系统统:数数字字滤滤波波(FIRIIRFIRIIR)、自自适适应应滤滤波波器器、快快速速付付立立叶变换、相关运算、谱分析、卷积、加窗、波形产生等。叶变换、相关运算、谱分析、卷积、加窗、波形产生等。通通信信:调调制制解解调调器器、自自适适应应均均衡衡、数数据据加加密密、数数据据压压缩缩、回回波波抵抵消消、多路复用、波形产生等。多路复用、波形产生等。语语音音:语语音音编编码码、语语音音合合成成、语语音音识识别别、语语音音增增强强、语语音音邮邮件件、语语音存储等。音存储等。图图形形/ /图图像像:二二位位/ /三三维维图图形形处处理理、图图像像压压缩缩与与传传输输、图图像像增增强强、动动画、机器人视觉等。画、机器人视觉等。军事:保密通信、雷达处理、声纳处理、导航、导弹制导等。军事:保密通信、雷达处理、声纳处理、导航、导弹制导等。仪器仪表:频谱分析、函数发生、锁相环、地震处理等。仪器仪表:频谱分析、函数发生、锁相环、地震处理等。自动控制:引擎控制、声控、自动驾驶、机器人控制、磁盘控制等。自动控制:引擎控制、声控、自动驾驶、机器人控制、磁盘控制等。医疗:助听、超声设备、诊断工具、病人监护等。医疗:助听、超声设备、诊断工具、病人监护等。 家用电器:高保真音响、音乐合成、音调控制、玩具与游戏、数家用电器:高保真音响、音乐合成、音调控制、玩具与游戏、数字电话字电话/ /电视等。电视等。 DSP/多核处理器主要的生产厂家 TI (德仪):http:/www.ti.com/ ADI: http:/www.analog.com/ Agere: http:/www.agere.com/ Freescale: http:/www.freescale.com/ ST(意法半导体) : http:/www.st.com Lucent(朗讯):http:/www.lucent.com/ Analog Device(模拟器件):www.analog.com Motorola:http:/www.motorola.com/ Samsung:http:/www.samsung.com/Microchip: http:/www.microchip.com/ Intel: http:/www.intel.com/AMD: http:/www.amd.com/ 代码兼容代码兼容代码兼容1.5 TMS320系列系列DSP发展概述(发展概述(TI公司)公司)C2000 DSPTI C55x DSP 核心核心: 世界上最低功耗性能比世界上最低功耗性能比 mW/MIPS的的DSPs 以达到以达到0.05mW/MIPs的最低的最低 功耗性能比而具有最长的电池功耗性能比而具有最长的电池 寿命寿命。 最佳的代码密度最佳的代码密度 兼容兼容C54x DSP软件软件 工作频率将达到工作频率将达到1.1GHz 最好的最好的DSP编译器编译器, 便于便于 使用使用 兼容兼容C62x DSP软件软件 可扩展性能达到可扩展性能达到400MIPs 最佳的最佳的C/C+ 控制代控制代码码效率效率 兼容兼容C24x DSP软件软件C5000 DSPC6000 DSPTI C28x DSP 核心核心: 世界上第一颗针对控制进行世界上第一颗针对控制进行优化的优化的DSPTI C64x DSP 核心核心:世界上具有最高性能的世界上具有最高性能的DSPs德州仪器强大的通用德州仪器强大的通用DSP平台平台MotorControl DSPPersonal DSPBroadbandInfrastruc-ture DSPC2000系列系列DSP产品规划产品规划Up To 40 MIPSControl Performance High-Precision Control C242F241LC2404ALF2401ALC2402AMulti-Function, Appliance & Consumer Control F240F243LC2406ALF2402ALF2403ALF2406ALF2407AF2810128-LQFPF2812176-LQFPF2812179-u*BGA150 MIPS!High-endDerivativesApplicationspecificversionsLowCostversionsCostoptimizedversionsC2812F2801?Long Team?C2810F2806F2808TMS320LF2407DSP与TMS320C28x DSP的方框图TMS320C28x是是到到目目前前为为止止用用于于数数字字控控制制领领域域性性能能最最好好的的DSP芯芯片片。32位位的的定定点点DSP核核,最最高高速速度度可可达达400MIPS,可可以以在在单单个个指指令令周周期期内内完完成成3232位位的的乘乘累累加加运运算算,具具有有增增强强的的电电机机控控制制外外设设、高高性性能能的的模模/数数转转换换能能力力和和改改进进的的通通信信接接口口,具具有有8GB的的线线性性地地址址空空间间,采采用用低低电电压压供供电电(3.3V外外设设/1.8V CPU核核),与,与TMS320C24x源代码兼容。该系列芯片已投放市场。源代码兼容。该系列芯片已投放市场。C5000系列系列DSP产品规划产品规划MulticoreApplicationEnhancedDSP + RISCFeature IntegrationPower Efficiency/System DensityCode CompatibleOMAP5910C55x+ARM9C5509A400 MIPS, USBC5510320-400MIPSC55xTM DSPMulticoreOMAPTMC55x+ARM9C55xTM DSPIn SiliconAnnouncementRoadmapTNET30104800 MIPSC5420200 MIPSC5421200 MIPSC5441532 MIPSC5470C54x+ARM7C5501600 MIPSC5502400-600 MIPSC540980-160 MIPSC5410A100-160MIPSC5416120-160MIPSC540150 MIPSC5402100-160MIPSC5404120 MIPSC5407120 MIPSC54CST120 MIPSC54V90120 MIPSC5503 64KB RAMC5507 128KB RAMLow cost FingerprintC5471C54x+ARM7 TMS320C5000系列特性比较 特特 性性TMS320C54x单单核核DSPTMS320C55xDSP功耗功耗/(mW/MIPS)0.540.05执行速度执行速度/MIPS或或MMACS30160140800代码密度代码密度变指令长度结构变指令长度结构功能功能单元单元MACs ALUs 累加器累加器1 1 22 2 4程序获取程序获取16位位32位位指令长度指令长度固定固定16位位848位可变位可变C6000系列系列DSP产品规划产品规划 Code CompatibleC6416T1 GHzC6411C6416T720 MHzC6415T720 MHzC6414T720 MHzDM642Performance ValueC6412DM641DM640C6415T1 GHzC6414T1 GHzHigh PerformanceApplication SpecificFloating PointC6701C6712C6711C6201C6202C6203C6204C6205C6211 More than 20 code-compatible devices Ranging from sub $9 to 1GHz 30K+ Programmers Millions shipped to dateIncreasing Performance, Memory & PeripheralsC6713C6416C6415C6414C6413C6410 用户接口 先进的操作系统 MPEG 4编解码器 H263 编解码器 AMR 编解码器 MP3 编解码器OMAP平台对数字信息终端的意义 所所针对多媒体应用针对多媒体应用 无线视频和图像处理无线视频和图像处理 无线高级语音应用无线高级语音应用 无线音频处理无线音频处理 图形和视频显示加速处理图形和视频显示加速处理 因特网网页生成接入因特网网页生成接入 无线数据处理无线数据处理 全球卫星定位系统全球卫星定位系统(GPS ) 短距离无线通信应用短距离无线通信应用(SDW) ARM 和和DSP 操作系统操作系统第二章TMS320C54x的结构原理掌握: TMS320C54X的总线结构、存储器系统;CPU存储器映射寄存器状态寄存器熟悉:CPU的组成,TMS320C54X的内部结构 了解:TMS320C54X的主要特性 第二章TMS320C54x的结构原理 2.1TMS320C54x的内部结构及主要特性 2.1.1TMS320C54x的内部结构(1)CPU:包括包括算术逻辑单元、算术逻辑单元、乘法器、累加乘法器、累加器、移位寄存器、移位寄存器、各种专门器、各种专门用途的寄存器、用途的寄存器、地址发生器、地址发生器、比较选择单元、比较选择单元、直属编码器以直属编码器以及内部总线;及内部总线;(3)片片内内的的外外设设:包包括括片片内内的的定定时时器器、各各种种类类型型的的串串口口、主主机机接接口口、片片内内的的锁锁相相环环(PLL)时时钟钟发发生生器器以以及及各各种种控控制制电电路;路;JTAGJTAG接口。接口。 (2)存存储储器器系系统统:包包括括1624位位外外接接存存储储器器接接口口、片片内内的的程程序序ROM、片片内内的的单单访访问问的的数数据据RAM和和双双访访问的数据问的数据RAM;2.1.2 TMS320C54x的主要特性 CPU先进的多总线结构,具有1条程序存储器数据总线、3条数据存储器数据总线和4条地址总线;40位算术逻辑单元(ALU),包括40位的桶形移位寄存器和2个独立的40位的累加器;17位乘17位的并行乘法器与一个40位的专用加法器结合在一起,用于单周期乘累加操作;比较、选择和存储单元(CSSU),用于Viterbi操作(一种通信的编码方式)中的加/比较选择;指数编码器用于在单周期内计算40位累加器的指数值;2个地址生成器,包括8个辅助寄存器和2个辅助寄存器算术单元。 2.1.2 TMS320C54x的主要特性续(2) 存储器系统具有16位192 K的基本可寻址空间:64 K字程序空间,64 K字数据和64 K字的I/O空间;片内的存储器结构及容量根据芯片的型号有所不同(见表2-1)(3) 在片外设和专用电路软件可编程等待状态发生器;可编程的存储器体转换逻辑;片内的锁相环(PLL)时钟发生器,可采用内部振荡器或外部的时钟源;外部总线关断控制电路可用来断开外部数据总线、地址总线和控制信号;数据总线具有数据保持特性;可编程的定时器;直接存储器访问(DMA)控制器;可与主机直接连接的8位并行主机接口(HPI),有些产品(见表2-1)还包括:扩展的8位并行主机接口(HPI8)和16位并行主机接口(HPIl6);片内的串口根据型号不同分以下类型(见表2-1):全双工的标准串口,支持8位和16位数据传送、时分多路(TDM)串口、缓冲串口(BSP)以及多通道缓冲串口(McBSP)。2.1.2 TMS320C54x的主要特性续(4) 片内的引导功能除TMS320C5420外,所有的芯片都具有片内的引导功能,能从片外的存储器将程序引导装入指定的存储器位置。(5) 指令系统单指令重复和块重复操作指令;用于程序和数据管理的存储器块传送指令;32位长操作数指令;同时读入2个或3个操作数的指令;并行存储和装入的算术指令;条件存储指令;快速从中断返回的指令;具有延迟转移和调用指令;指令的执行采用指令预提取、指令提取、指令译码、访问操作数、读取操作数、执行等6级流水线并行结构,大大提高了指令的执行速度。2.1.2 TMS320C54x的主要特性续(6) 执行速度执行速度单指令周期时间分为:单指令周期时间分为:25/20/15/12.5/10 ns;每秒指令数:每秒指令数:40/50/66/80/100/200 MIPS。(7) 电源和功耗电源和功耗可可采采用用5 V,3.3 V,3.3 V和和1.8或或3.3 V和和2.5 V的的超超低低电电压压供供电电 , 在在 型型 号号 中中 分分 别别 用用 C、 LC 、 UC和和 VC指指 明明 , 如如 ,TMS320C54x,TMS320LC54x和和TMS320UC54x;可可采采用用功功耗耗下下降降指指令令IDLE 1,IDLE 2和和IDLE 3控控制制芯芯片片的的功功耗;耗;可控制禁止可控制禁止CLKOUT信号。信号。 (8) 片内的仿真功能片内的仿真功能具具有有符符合合IEEE 1149.1标标准准的的在在片片仿仿真真接接口口,可可与与主主机机连连接接,用于系统芯片开发应用。用于系统芯片开发应用。2.2总线结构 C54x片内有片内有8条条16位总线:位总线:4条程序数据总线和条程序数据总线和4条地址总线。条地址总线。3组组数数据据总总线线(CB、DB和和EB):CB和和DB传传送送读读自自数数据据存存储储器器的的操作数,操作数, EB传送写到数据存储器的数据。传送写到数据存储器的数据。CB:双数据读、长数据读(双数据读、长数据读(32位)读高位)读高16位位DB:单数据读、双数据读、长数据(单数据读、双数据读、长数据(32位)读低位)读低16位、外设读位、外设读4组组地地址址总总线线(PAB、CAB、DAB和和EAB):传传送送执执行行指指令令所所需需的的地址。地址。C54x还还有有一一条条在在片片双双向向总总线线,用用于于寻寻址址片片内内外外围围电电路路。这这条条总总线线通通过过CPU接接口口中中的的总总线线交交换换器器连连到到DB和和EB。利利用用这这个个总总线线读读/写写,需需要要2个个或或2个个以以上上周周期期,具具体体时时间间取取决决于于外外围围电电路路的的结结构。构。程序总线程序总线(PB):传送取自程序存储器的指令代码和立即操作数。传送取自程序存储器的指令代码和立即操作数。2.3存储器系统 C54x总的基本存储空间为总的基本存储空间为192 K字,分成字,分成3个可选择的存储空间:个可选择的存储空间:64K字的程序存储空间:字的程序存储空间:64 K字的数据存储空间:字的数据存储空间:64 K字的字的IO空间:空间:存放要执行的指令和执行中要用到的系存放要执行的指令和执行中要用到的系数表数表存放各种数据存放各种数据用于映射外围设备接口用于映射外围设备接口每每64K字可分为字可分为512页,每页页,每页128字。字。在在C54x中,片内存储器的型式有中,片内存储器的型式有DARAM、SARAM和和ROM三种:三种: 片内片内ROM:片内片内ROM是程序存储器空间的一部分,是程序存储器空间的一部分,有时部分也可用作数据有时部分也可用作数据空间的一部分。空间的一部分。各类器件的片内各类器件的片内ROM容量不同,如表容量不同,如表2-3所列。所列。 片内双操作片内双操作RAM(DARAM):DARAM由几个块组成。由几个块组成。CPU可在一个周期内对同一可在一个周期内对同一DARAM块进行两次读或块进行两次读或写操作。写操作。DARAM通常划分为数据空间,且主要用于存储数据值;通常划分为数据空间,且主要用于存储数据值;有时也可划有时也可划分为程序空间分为程序空间,用于存储程序代码。,用于存储程序代码。 存储器系统续片内单操作片内单操作RAM(SARAM)SARAM也是由几个块组成。一个也是由几个块组成。一个SARAM块在每个机器周期只可被访问一次,块在每个机器周期只可被访问一次,进行读或写操作。进行读或写操作。SARAM通常被划分为数据空间,且主要用于存储数据值;有通常被划分为数据空间,且主要用于存储数据值;有时时也可被划分为程序空间也可被划分为程序空间,用于存储程序代码。,用于存储程序代码。C54x片内存储器映射到程序或数据存储空间通过处理器工作方式状态寄存器片内存储器映射到程序或数据存储空间通过处理器工作方式状态寄存器(PMST)(PMST)的的3个状态位个状态位MP/ MC 、OVLY位、位、DROM位控制:位控制:OVLY位位 若若OVLY=1,则片内则片内RAM安排到程序和数据空间;安排到程序和数据空间; 若若OVLY=0,则片内则片内RAM只安排到数据存储空间。只安排到数据存储空间。DROM位位 当当DROM=1,则部分片内则部分片内ROM安排到数据空间;安排到数据空间; 当当DROM=0,则片内则片内ROM不安排到数据空间。不安排到数据空间。 DROM的用法与的用法与MPMC 的用法无关。的用法无关。MP/MC位位若若MP/ MC =0,则片内则片内ROM安排到程序空间;安排到程序空间; 若若MP/MC =1,则片内则片内ROM不安排到程序空间。不安排到程序空间。C5402的数据和程序存储器映射图,以及的数据和程序存储器映射图,以及MP/ 、OVLY和和DROM 3个状态位的关系:个状态位的关系: 注意:若用户需要运行注意:若用户需要运行BOOT程序应选用微计算机模式程序应选用微计算机模式C5402片内4K 字ROM区间分配C5402片内4K字ROM由TI公司定,不能用来存储用户程序2.3.3数据存储空间存储器映射寄存器有两种:存储器映射寄存器有两种:26个个CPU内部寄存器、片内外设寄存器内部寄存器、片内外设寄存器它们被映射在数据存储器的第它们被映射在数据存储器的第0页:页:0000H005BH地址段地址段寻址存储器映射寻址存储器映射CPU寄存器操作不需要插入等待周期。寄存器操作不需要插入等待周期。片内外设寄存器用于对片内外设片内外设寄存器用于对片内外设 的控制和存放数据,对它们操的控制和存放数据,对它们操作需要作需要2个机器周期。个机器周期。 26个个CPU内部寄存器见表内部寄存器见表2-6所示。暂时不细讲,随遇到随讲所示。暂时不细讲,随遇到随讲3、存储器映射寄存器2.3.4 I/O空间C54x有一个独立编址的有一个独立编址的I/O存储器空间。它是存储器空间。它是一个一个64K字的地址空间字的地址空间(0000hFFFFh),都在片都在片外。外。访问访问I/O是对是对I/O映射的外部器件进行访问映射的外部器件进行访问 只有两条指令可以对其寻址:只有两条指令可以对其寻址:PORTR(读读I/O设备)、设备)、PORTW(向(向I/O设备写)设备写)PORTR 1000H,*AR1PORTW *AR1,1000H2.4中央处理单元CPUCPU有以下几部分组成:有以下几部分组成: 40位算术逻辑运算单元位算术逻辑运算单元(ALU); 2个个40位累加器;位累加器;一个一个1630位的桶形移位寄存器;位的桶形移位寄存器; 乘法器乘法器/加法器单元;加法器单元; 比较、选择和存储单元比较、选择和存储单元(CSSU); 指数编码器;指数编码器; CPU存储器映射寄存器;存储器映射寄存器; 两个地址发生器;两个地址发生器;2.4.1 CPU状态和控制寄存器状态和控制寄存器 C54x有有3个状态和控制寄存器:个状态和控制寄存器:状态寄存器状态寄存器0(ST0);状态寄存器状态寄存器1(STl);处理器工作方式状态寄存器处理器工作方式状态寄存器(PMST)。 1 1、状态寄存器、状态寄存器 ST0和和ST1 : ST0主要反映寻址要求和计算的中间运行状态。其各位定义如主要反映寻址要求和计算的中间运行状态。其各位定义如下下:bit15-1312111098-0位位定义定义ARPTCCOVAOVBDPST0各位的含义ARP:辅辅助助寄寄存存器器指指针针,用用于于间间接接寻寻址址单单操操作作数数的的辅辅助助寄寄存存器器的的选择。当选择。当DSP处于标准运行方式时处于标准运行方式时(CMPT0),ARP0。TC:测测试试控控制制标标志志。用用来来保保存存ALU的的测测试试位位操操作作结结果果。同同时时,可可以以由由TC的的状状态态(0或或1)控控制制条条件件分分支支的的转转移移和和子子程程序序调调用用,并并判判断返回是否执行。断返回是否执行。BC 2000H,TC(NTC);TC=1 或或 TC=0C:进进位位标标志志。加加法法进进位位时时,置置1。减减法法借借位位时时,清清0。当当加加法法无无进进位位或或减减法法无无借借位位的的情情况况下下,完完成成一一次次加加法法此此标标志志位位清清0,完完成成一一次次减减法法此此标标志志位位置置1。带带16位位移移位位操操作作的的加加法法只只能能对对它它置置位位,而减法只能清而减法只能清0。此时,加减操作不影响进位标志。此时,加减操作不影响进位标志。(C 或或NC)OVA:累累加加器器A的的溢溢出出标标志志。当当ALU运运算算结结果果送送入入累累加加器器A且且溢溢出出时时,OVA置置l。运运算算时时一一旦旦发发生生溢溢出出,OVA将将一一直直保保持持置置位位状状态,直到硬件复位或软件复位后方可解除此状态。态,直到硬件复位或软件复位后方可解除此状态。(AOV或或ANOV)OVB:累累加加器器B的的溢溢出出标标志志。当当ALU运运算算结结果果送送入入累累加加器器B且且溢溢出出时时,OVB置置1。运运算算时时一一旦旦发发生生溢溢出出,OVB将将一一直直保保持持置置位位状状态态,直直到到硬硬件件复复位位或或软软件件复复位位后后方方可可解解除除此此状状态态。(BOV或或BNOV)ST0各位含义续DP:数据存储器页指针。DP的9位数作为高位将指令中的低7位作为低位结合,形成16位直接寻址方式下的数据存储器地址。这种寻址方式要求STl中的编译方式位CPL0,DP字段可用LD指令加载一个短立即数或从数据存储器加载。ST1主要反映寻址要求、计算的初始状态设置、主要反映寻址要求、计算的初始状态设置、IO及中断控及中断控制制 。其各位定义如下:其各位定义如下:bit151413121110987654-1含义BRAFCPLXFHMINTM0OVM SXM C16FRCT CMPT ASM例:例:LD #1 , DPST1各位含义 BRAF:块块重重复复操操作作标标志志。此此标标志志置置位位表表示示正正在在执执行行块块重重复复操操作作指指令令。此此位位清清零表示没有进行块操作。零表示没有进行块操作。CPL:直直接接寻寻址址编编辑辑方方式式标标志志位位,标标志志直直接接寻寻址址选选用用何何种种指指针针。此此位位置置位位CPL1表表示示选选用用堆堆栈栈指指针针(SP)的的直直接接寻寻址址方方式式。此此位位清清零零CPL0表表示示选选用用页页指指针针(DP)的直接寻址方式。的直接寻址方式。XF:XF引引脚脚状状态态控控制制位位,控控制制XF通通用用外外部部IO引引脚脚输输出出状状态态。可可通通过过软软件件置位或清零控制置位或清零控制XF引脚输出电平。引脚输出电平。HM:芯芯片片响响应应HOLD信信号号时时,CPU保保持持工工作作方方式式标标志志。此此位位置置位位表表示示CPU暂暂停停内内部部操操作作。此此位位清清零零标标志志CPU从从内内部部存存储储器器取取指指继继续续执执行行内内部部操操作作,外外部部地地址、数据线挂起,呈高阻态。址、数据线挂起,呈高阻态。INTM:中中断断方方式式控控制制位位。此此位位置置位位(1NTM1由由SSBX指指令令)关关闭闭所所有有可可屏屏蔽蔽中中断断。此此位位清清零零(INTM0由由RSBX指指令令)开开放放所所有有可可屏屏蔽蔽中中断断。此此位位不不影影响响不不可可屏蔽中断屏蔽中断RS、NMI。INTM位不能用存储器写操作设置。位不能用存储器写操作设置。 0:保留。:保留。ST1各位含义OVM:溢溢出出方方式式控控制制位位。确确定定溢溢出出时时,累累加加器器内内容容加加载载方方式式。此此位位置置位位(OVM=1)时时,ALU运运算算发发生生正正数数溢溢出出,目目的的累累加加器器置置成成正正的的最最大大值值(007FFFFFFFH);发发生生负负数数溢溢出出置置成成负负的的最最大大值值(FF80000000H)。此此位位清清零零(OVM=0)直直接接加加载载实实际际运运算算结结果果。此位可由指令此位可由指令SSBX和和RSBX置位或清零。置位或清零。SXM:符符号号位位扩扩展展方方式式控控制制位位,确确定定符符号号位位是是否否扩扩展展。SXM1表表明明数数据据进进入入ALU之之前前进进行行符符号号位位扩扩展展。SXM0表表示示数数据据进进入入ALU之之前前符符号号位位禁禁止止扩扩展展。此此位位可可由由指指令令SSBX和和RSBX置置位位或或清清零。零。C16:双双16位位双双精精度度算算术术运运算算方方式式控控制制位位。此此位位置置位位C161表表示示ALU工工作作于于双双16位位算算术术运运算算方方式式。此此位位清清零零C160表表示示ALU工工作于双精度算术运算方式。作于双精度算术运算方式。 FRCT:小小数数方方式式控控制制位位。此此位位置置位位(FRCT1)乘乘法法器器输输出出自自动动左左移移1位,消去多余的符号位。位,消去多余的符号位。ST1各位含义CMPT:间间接接寻寻址址辅辅助助寄寄存存器器修修正正方方式式控控制制位位。此此位位置置位位CMPT1,除除AR0外外,当当间间接接寻寻址址单单个个数数据据存存储储器器操操作作数数时时,可可通通过过修修正正ARP内内容容改改变变辅辅助助寄寄存存器器ARl一一AR7的的选选择择。此此位位清零清零CMPT0,ARP必须清零,且不能修正。必须清零,且不能修正。注意:注意:1、ST0、ST1中某一位若可以复位或置位,均可用指令中某一位若可以复位或置位,均可用指令 RSBX 和和 SSBX。 2、对其中几位赋值均可用对其中几位赋值均可用LD指令,如指令,如 LD #立即数,立即数,DP(ASM,IPTR) ASM:累累加加器器移移位位方方式式控控制制位位。占占5位位,规规定定从从-16至至15的的移移位位数数(2的补码的补码),可以用,可以用LD指令指令(短立即数短立即数)对对ASM加载。加载。微处理器微处理器/微型计算机工作方式位微型计算机工作方式位MP/MCMP/MC0 :微:微计算机模式,计算机模式, 允许使能并寻址片内允许使能并寻址片内ROMMP/MC1:微处理器模式,微处理器模式, 不能利用片内不能利用片内ROM复位时,采样复位时,采样MP/MC引脚上的逻辑电平,并且将引脚上的逻辑电平,并且将MP/MC位置位置成此值。直到下一次复位,不再对成此值。直到下一次复位,不再对MP/MC引脚再采样。引脚再采样。RESET指令不影响此位。指令不影响此位。MP/MC位也可以用软件的办法置位位也可以用软件的办法置位或复位或复位 2. 处理器工作模式状态寄存器处理器工作模式状态寄存器PMSTIPTR:中断向量指针;中断向量指针;指示中断向量所驻留的指示中断向量所驻留的128字程序存储字程序存储器的位置。在自举加载操作情况下,用户可以将中断向量重新器的位置。在自举加载操作情况下,用户可以将中断向量重新映象到映象到RAM。复位值名称位0000MP/MC引脚值1FFHSSTSMULCLKOFFDROMAVISOVLYMP/MCIPTR012345615-7无效无效2、处理器工作模式状态寄存器、处理器工作模式状态寄存器PMST(续)续)OVLY:RAM重复占位位。重复占位位。OVLY可以允许片内双寻址数据可以允许片内双寻址数据RAM块映射到程序空间。块映射到程序空间。OVLY0 只能在数据空间而不能在程序空间寻址在片只能在数据空间而不能在程序空间寻址在片RAMOVLY1 片内片内RAM可以映象到程序空间和数据空间,但是数可以映象到程序空间和数据空间,但是数据页据页0(0h7Fh)不能映象到程序空间不能映象到程序空间 AVSI:地址可见位。地址可见位。AVIS允许允许/禁止在地址引脚上看到内部程序禁止在地址引脚上看到内部程序空间的地址线。空间的地址线。AVIS=0,外部地址线不能随内部程序地址一起变化。控制线和外部地址线不能随内部程序地址一起变化。控制线和数据不受影响,地址总线受总线上的最后一个地址驱动。数据不受影响,地址总线受总线上的最后一个地址驱动。AVIS=1, 让内部程序存储空间地址线出现在让内部程序存储空间地址线出现在C54X的引脚上,的引脚上,从而可以跟踪内部程序地址。而且,当中断向量驻留在片内存储从而可以跟踪内部程序地址。而且,当中断向量驻留在片内存储器时,可以连同器时,可以连同IACK引脚一起对中断向量译码引脚一起对中断向量译码 2、处理器工作模式状态寄存器、处理器工作模式状态寄存器PMST(续)续)DROM:数据数据ROM位。位。DROM可以让片内可以让片内ROM映象到数据空间。映象到数据空间。DROM位的值为:位的值为: DROM=0 片内片内ROM不能映象到数据空间不能映象到数据空间 DROM=1 片内片内ROM的一部分映象到数据空间的一部分映象到数据空间 CLKOFF:CLKOUT时钟输出关断位。时钟输出关断位。 CLKOFF1时,时,CLKOUT的输出被禁止,且保持为高电平的输出被禁止,且保持为高电平SMUL:乘法饱和方式位。SST:存储饱和位仅LP器件有这两个状态位,所有其它器件上此位均为保留位。2.4.2算术逻辑单元ALUX输入端的数据输入端的数据:移移位位器器的的输输出出(32位位或或16位位数数据据存存储储器器操操作作数数以以及及累累加器中的数值,经移位器移位后输出加器中的数值,经移位器移位后输出)。来自数据总线来自数据总线DB的数据存储器操作数。的数据存储器操作数。Y输入端的数据:输入端的数据:累加器累加器A中的数据。中的数据。累加器累加器B中的数据。中的数据。来自数据总线来自数据总线CB的数据存储器操作数。的数据存储器操作数。T寄存器中的数据。寄存器中的数据。ALU控制信号:控制信号:SXM:当状态寄存器当状态寄存器STl的的SXM0时,则不包含数据存时,则不包含数据存储器操作数的位添储器操作数的位添0;当;当SXM1时,则不包含数据存储器时,则不包含数据存储器操作数的位进行符号位扩展。操作数的位进行符号位扩展。C16C16:状态寄存器状态寄存器STl的的C16=1=1,ALU在单个周期内可以进行在单个周期内可以进行特殊的双特殊的双16位算术运算。位算术运算。OVM:OVM:OVM=0OVM=0,则累加器直接加则累加器直接加载载ALUALU的结果。的结果。OVM=1OVM=1,则则根根据据溢溢出出方方向向,用用3232位位最最大大正正数数 00 00 7FFFFFFFh7FFFFFFFh( (正正向向溢溢出出) )或或最最大大负负数数FF FF 80000000h(80000000h(负负向向溢溢出出) )加加载载累累加器。加器。溢出发生后,相应的溢出标志溢出发生后,相应的溢出标志位位(OVA(OVA或或OVB)OVB)置置1 1,直到复位,直到复位或执行溢出条件指令或溢出标或执行溢出条件指令或溢出标志位志位(OVA/OVB)(OVA/OVB)被清除。被清除。 输出结果给输出结果给A或或B累加器累加器2.4.3累加器累加器A和和B累加器累加器A和和B都可以配置成乘法器都可以配置成乘法器/加法器或加法器或ALU的目的寄存器。的目的寄存器。 40位的累加器位的累加器A、B可以分成三部分分别映射在数据存储空间的可以分成三部分分别映射在数据存储空间的0页:页:AL:8H,AH:9H,AG:AHBL:BH,BH:CH,BG:DH1、累加器的作用:、累加器的作用:累加器累加器A和和B都可以配置成乘法器都可以配置成乘法器/加法器或加法器或ALU的目的寄存器。的目的寄存器。提供提供ALUALU的另一个输入的另一个输入可作为乘法器(只有可作为乘法器(只有A A)/ /加法器的输入加法器的输入AGAHAL39-32 31-16 15-0ABGBHBL39-32 31-16 15-0B安全位安全位 高字高字 低字低字2、A、B操作:操作:AL、AH、AG、BL、BH、BG都可以用都可以用PSHM、POPM指令进行堆栈操作。指令进行堆栈操作。A、B装载数据可用装载数据可用LD指令指令A、B数据保存数据保存可以利用可以利用STH、STL、STLM和和SACCD等指令或者用并行存储指等指令或者用并行存储指令。令。在存储前可以对累加器的内容进行在存储前可以对累加器的内容进行移位移位操作。操作。右移时,右移时,AG和和BG中的各数据位中的各数据位分别移至分别移至AH和和BH;左移时,左移时,AL和和BL中的各数据分别移至中的各数据分别移至AH和和BH,低位添低位添0。 2.4.3累加器累加器A和和B续续例如:假设累加器AFF43211234h,执行带移位的STH和STL指令后,数据存储单元TEMP中的结果如下:STH A,8,TEMP ;TEMP=2112hSTH A,-8,TEMP ;TEMP=FF43hSTL A,8,TEMP ; TEMP=3400hSTL A,-8,TEMP ;TEMP=2112hSTLM A,AR1LD #1234,APSHM APOPM A累加器移位和循环移位累加器移位和循环移位累加器移位或循环移位的指令共有如下6条:SFTA(算术移位算术移位)SFTL(逻辑移位逻辑移位)SFTC(条件移位条件移位)ROL(累加器循环左移累加器循环左移)ROR(累加器循环右移累加器循环右移)ROLTC(累加器带累加器带TC位循环左移位循环左移)2.4.4桶形移位器 桶桶形形移移位位器器(40位位)用用来来为为输输入入的的数据进行定标数据进行定标,可以进行以下操作:,可以进行以下操作:ALU运运算算前前,对对来来自自数数据据存存储储器器的的操作数或者累加器的值进行定标;操作数或者累加器的值进行定标;对累加器的值进行算术或逻辑移位;对累加器的值进行算术或逻辑移位;对累加器归一化处理;对累加器归一化处理;对对累累加加器器的的值值存存储储到到数数据据存存储储器器之之前进行定标前进行定标。40位桶形移位器的输入端来自:位桶形移位器的输入端来自:DB,取得取得16位输入数据;位输入数据;DB和和CB,取得取得32位输入数据;位输入数据;40位累加器位累加器A或或B。40位桶形移位器的输出端接至:位桶形移位器的输出端接至:ALU的一个输入端;的一个输入端;经过经过MSW/LSW(最高有效字最高有效字/最低有效最低有效字字)写选择单元至写选择单元至EB总线。总线。 2.4.4桶形移位器续桶形移位寄存器的控制:桶形移位寄存器的控制:1 1、操作数带符号位不带符号位扩展控制、操作数带符号位不带符号位扩展控制:ST1ST1寄存器的寄存器的SXMSXM位位: :当当SXM1时,执行符号位扩展。时,执行符号位扩展。 2、移位位数的控制:、移位位数的控制:指指令令中中的的移移位位数数就就是是移移位位的的位位数数。正正值值表表示示左左移移,负负值值表表示示右右移移。移移位位数数可以用以下方式定义:可以用以下方式定义:指指令令操操作作数数中中给给定定的的一一个个4或或5位位的的立立即即数数值值表表示示一一个个移移位位数数值值,范范围围为为(-1615)。状态寄存器状态寄存器STl的累加器移位方式的累加器移位方式(ASM)位,共位,共5位,表示一个范围为位,表示一个范围为-1615的移位数。的移位数。T寄存器中最低寄存器中最低6位的数值表示一个范围为位的数值表示一个范围为-1631的移位数。的移位数。 例如:ADD A,-4,B ;累加器累加器A右移右移4位后加到累加器位后加到累加器B ADD A,ASM,B ;累加器累加器A按按ASM规定的移位数移位后加到累加器规定的移位数移位后加到累加器B NORM A ;按;按T寄存器中的数值对累加器归一化寄存器中的数值对累加器归一化可移位位数的最大范围是可移位位数的最大范围是-16 312.4.5 乘法器乘法器/加法器单元加法器单元 硬件乘法器是硬件乘法器是17位位*17位,它与一个位,它与一个40位专用加法器相连。乘法器位专用加法器相连。乘法器/加法器加法器单元可以在一个流水线状态周期内完成一次乘法累加单元可以在一个流水线状态周期内完成一次乘法累加(MAC)运算。运算。 乘法器能够实现如下方式乘法运算:乘法器能够实现如下方式乘法运算:有符号数乘法,每个有符号数乘法,每个16位操作数扩展成位操作数扩展成17位有符号数;位有符号数;无符号数乘法,每个无符号数乘法,每个16位操作数前面加一个位操作数前面加一个0;无符号数与有符号数,一个无符号数与有符号数,一个16位操作数前面加一个位操作数前面加一个0,另一,另一个个16位操作数符号扩展成位操作数符号扩展成17位有符号数。相乘运算。位有符号数。相乘运算。2.4.5 乘法器/加法器单元乘法器的输入信号:乘法器的输入信号:乘乘法法器器的的输输入入端端包包括括输输入入端端XM和和输输入端入端YM。输入端输入端XM数据来自:数据来自: T寄存器。寄存器。 累加器累加器A的的3216位位。 DB总总线线传传送送过过来来的的数数据据存存储储器器操操 作数。作数。输入端输入端YM的数据来自:的数据来自: 累加器累加器A的的3216位位 由由DB总总线线和和CB总总线线传传送送过过来来的的数据存储器操作数数据存储器操作数 由由PB总总线线传传送送过过来来的的程程序序存存储储器器操作数。操作数。 乘法器的输出:乘法器的输出:乘乘法法器器的的输输出出加加到到加加法法器器的的输输入入端端XA,累累加加器器A或或B则则是是加加法法器器的的另另一一个个输输入入。最最后后结结果果送送往往目目的的累累加加器器A或或B。2.4.5 乘法器/加法器单元乘法器乘法器/加法器的控制:加法器的控制:1 1、乘法器工作控制:、乘法器工作控制:状态寄存器状态寄存器STlSTl中的中的FRCTFRCT位位1 1时,小数相乘方式,乘法时,小数相乘方式,乘法结果左移结果左移1 1位,以消去多余的符号位。位,以消去多余的符号位。FRCT=0FRCT=0时,整数相乘方式。时,整数相乘方式。2 2、乘法运算的饱和处理、乘法运算的饱和处理 :当当SMULSMUL1 1时,在用时,在用MACMAC或或MASMAS指令进行累加或减以前,对乘法结果作饱和处理。指令进行累加或减以前,对乘法结果作饱和处理。仅当仅当OVM=1OVM=1和和FRCTFRCT1 1时,时,SMULSMUL位才起作用位才起作用 3 3、加法运算的饱和处理、加法运算的饱和处理 :当当OVMOVM1 1时,在用时,在用MACMAC或或MASMAS指令进行累加或减以后,对加法减法结果作饱和处指令进行累加或减以后,对加法减法结果作饱和处理,然后保存到累加器理,然后保存到累加器A A或或B B。ALU运算发生正数溢出,目的累加器置成正的最大值运算发生正数溢出,目的累加器置成正的最大值(007FFFFFFFH);发生负发生负数溢出置成负的最小值数溢出置成负的最小值(FF80000000H)如果发生溢出则如果发生溢出则ST1的的OVA位或位或OVB位置位置1。4 4、乘加结果的舍入、乘加结果的舍入( (圆整)处理:圆整)处理:如如MACMAC、MASMAS等指令,如果带后缀等指令,如果带后缀R R,就对结果进行舍入处理,即加就对结果进行舍入处理,即加2 21515至结果,至结果,并将目的累加器的低并将目的累加器的低1616位清位清0 0。2.4.6 比较、选择和存储单元 CSSU可可对对累累加加器器的的高高位位字字和和低低位位字字进进行行比比较较,使使状状态态寄寄存存器器ST0中中的的测测试试位位/控控制制标标志志位位(TC)和和暂暂存存寄寄存存器器TRN保保持持传传送送纪纪录录状状态态,并并选选取取累累加加器器中最大的数送至数据存储器中。加速中最大的数送至数据存储器中。加速Viterbi蝶形运算。蝶形运算。从左图可见从左图可见CMPS指令只能对指令只能对A或或B累累加器操作。加器操作。例如:例如:CMPS A ,*AR1;if(A(31-16)A(15-0) then;A(3116)(*AR1);TRN1;0TRN(0);0TC;Else A(150)(*AR1);TRN1;1TRN(0);1TC2.4.7 指数编码器指数编码器 指数编码器是一个专用硬件,专门用于在单个周期内执行指数编码器是一个专用硬件,专门用于在单个周期内执行EXP指令,并将累加指令,并将累加器中数的指数值以器中数的指数值以2的补码形式的补码形式(-1631)存放到存放到T寄存器中。寄存器中。 例如:例如:LD #5H,AEXP A ;(冗余符号位冗余符号位 - 8)T寄存器寄存器, ;冗余符号位;冗余符号位=40 - 包含一位符号位的有效位数包含一位符号位的有效位数, ;T=001CH(28)NORM A ;对累加器归一化对累加器归一化(A按按T中值移位中值移位,左移左移28位位) ;A=00 5000 0000HEXP指令:指令:将将累加器的内容取指数值,也就是为消累加器的内容取指数值,也就是为消去多余符号位而将累加器中的数值左移的位数。结去多余符号位而将累加器中的数值左移的位数。结果以补码形式存入果以补码形式存入T T寄存器(寄存器(bit0-bit5bit0-bit5),),其值的其值的范围为范围为-16-16到到3131) 针对编码器有两条指令:针对编码器有两条指令:EXP指令和指令和NORM指令指令NORM指令:指令:对累加器归一化对累加器归一化(累加器按累加器按T中值移位)中值移位)2.4.8地址发生器地址发生器 C54X有有两个地址发生器:程序地址发生器、数据地址发生器。两个地址发生器:程序地址发生器、数据地址发生器。 1、数据地址发生器、数据地址发生器:数据地址发生器为存入数据存储器的信息操作产生地址。数据地址发生器为存入数据存储器的信息操作产生地址。组成:组成: AR0到到AR7 八个辅助寄存器八个辅助寄存器 ARAU0和和ARAU1辅助寄存器算术单元辅助寄存器算术单元 (可在每个周期产生两个数据存储器地址)(可在每个周期产生两个数据存储器地址) BK循环缓冲寄存器循环缓冲寄存器 ST1的的bit(15-13)ARP用于选择辅助寄存器用于选择辅助寄存器AR0-AR7 DP数据存储器页指针数据存储器页指针 SP堆栈指针寄存器堆栈指针寄存器用于直接寻址方式用于直接寻址方式用于用于间接间接寻址寻址方式方式2.4.8地址发生器续地址发生器续程序地址发生器程序地址发生器 :为程序存储器的信息操作产生地址。为程序存储器的信息操作产生地址。组成:共有组成:共有6个寄存器:个寄存器:程程序序计计数数器器(PC):PC中中保保存存的的某某个个内内部部或或外外部部程程序序存存储储器器的的地地址址,就就是是即将取指的某条指令、某个即将取指的某条指令、某个16位立即操作数或系数表在程序存储器中的地址。位立即操作数或系数表在程序存储器中的地址。重复计数器重复计数器(RC):内容为重复指令内容为重复指令RPT后边的操作数(自动装载)。后边的操作数(自动装载)。 RPT #n块重复计数器块重复计数器(BRC):设置程序代码块重复执行的次数。设置程序代码块重复执行的次数。 STM #立即数,立即数,BRC块重复起始地址寄存器块重复起始地址寄存器(RSA): 块重复指令块重复指令RPTB后边第一条指令的地址(自动装载)后边第一条指令的地址(自动装载)块重复结束地址寄存器块重复结束地址寄存器(REA): 内容为块重复指令内容为块重复指令RPTB的操作数(自动装载)的操作数(自动装载) REA装入的同时,装入的同时,ST1(BIT15)BRAF=1 。RPTB pmad扩扩展展程程序序计计数数器器(XPC):用用以以寻寻址址扩扩展展的的程程序序存存储储空空间间。 C548以以上上的的芯芯片有,有片有,有6条专用扩展程序空间寻址指令条专用扩展程序空间寻址指令FB extpmad; extpmad (15-0)PC, extpmad (19-16)XPC 用于块重用于块重复操作复操作加载加载PC的几种途径的几种途径 操操 作作加载到加载到PC的地址的地址复位复位PCFF80h顺序执行指令顺序执行指令PCPC+1分支转移分支转移用紧跟在分支转移指令后面的用紧跟在分支转移指令后面的16位立即数加载位立即数加载PC由累加器分支由累加器分支转移转移用累加器用累加器A或或B的低的低16位加载位加载PC块重复循环块重复循环假如假如BRAF1(块重复有效块重复有效),当,当PC+1等于块重复结等于块重复结束地址束地址(REA)+1时,将块重复起始地址时,将块重复起始地址(RSA)加载加载PC子程序调用子程序调用将将PC+2压压入堆栈,并用紧跟在调用指令后面的入堆栈,并用紧跟在调用指令后面的16位位立即数加载立即数加载PC。返回指令将栈顶弹出至返回指令将栈顶弹出至PC,回到原回到原先的程序处继续执行先的程序处继续执行从累加器调用从累加器调用子程序子程序将将PC+1压入堆栈,用累加器压入堆栈,用累加器A或或B的低的低16位加载位加载PC。返回返回指令将栈顶弹出至指令将栈顶弹出至PC,回到原先的程序处继续执行回到原先的程序处继续执行2.5片内外设 C54xC54x 片内外设包含如下几部分:片内外设包含如下几部分:外部总线操作;外部总线操作;通用通用I/OI/O口口( (引脚引脚) );定时器;定时器;时钟发生器;时钟发生器;主机接口;主机接口;同步串行接口;同步串行接口;时分复用串行接口时分复用串行接口(TDM)(TDM); 软件可编程等待状态发生器;软件可编程等待状态发生器;可编程存储器组切换模块。可编程存储器组切换模块。(10)JTAG接口接口2.5.1 通用I/O口 通用通用I/O口有两个:跳转控制输入引脚口有两个:跳转控制输入引脚BIO和外部标志输出引脚和外部标志输出引脚XF 跳转控制输入引脚跳转控制输入引脚BIO :该该引脚可用于监视外部接口器件的状态引脚可用于监视外部接口器件的状态 。程程序可以根据引脚序可以根据引脚BIO输入状态有条件地跳转输入状态有条件地跳转 用于对时间要求严格的循环中,用于对时间要求严格的循环中, 在其执行时不能够被外部中断打断的时候在其执行时不能够被外部中断打断的时候 。执行指令:执行指令: XC n,BIO;如果引脚如果引脚BIO为低电平(条件满足),则执行后面的一条单为低电平(条件满足),则执行后面的一条单字指令或一条双字指令或字指令或一条双字指令或2条单字指令。条单字指令。(n=1 or 2)(n=1 or 2) 外部标志输出引脚外部标志输出引脚XFXF外部标志输出引脚外部标志输出引脚XF可以用于向外部接口器件发出信号。可以用于向外部接口器件发出信号。XF信号可以由软件控制。通过对信号可以由软件控制。通过对STl(bit13)中的中的XF位置位置1或清或清0 0, XF引脚输引脚输出为高电平和低电平,亦即出为高电平和低电平,亦即CPU向外部发出向外部发出1和和0信号。信号。 执行指令:执行指令: SSBX XF ;对对XF置位置位 RSBX XF ;对;对XF复位复位2.5.2 2.5.2 定时器定时器 片片内内硬硬件件定定时时器器是是软软件件可可编编程程的的,可可用用于于周周期期性性的的产产生生中中断断。定定时时器器可可以以用用来产生外部接口电路的采样时钟。来产生外部接口电路的采样时钟。 它包含三个存储器映射寄存器:它包含三个存储器映射寄存器: TIM定时寄存器(定时寄存器(0024H):):加载定时值,加载定时值,减减1计数器计数器 ; 30H PRD定时周期寄存器(定时周期寄存器(0025H):):存放定时时间常数存放定时时间常数 ; 31H TCR定时器控制寄存器(定时器控制寄存器(0026H):):存储定时器的控制及状态位存储定时器的控制及状态位; 32H15-1211109-6543-0保留softfreePSCTRBTSSTDDR预定标定时器重新加载1定时器停止状态1定时器分频系数TCR定时器控制寄存器各位含义:定时器控制寄存器各位含义:54x的的定定时时器器有有一一个个4位位预预定定标标器器PSC(等等于于TCR中中的的TDDR bit0-3)。)。预预定定标标器器PSC:定定时时分分频频系系数数,对对片片内内定定时时器器的的输输入入时时钟钟(CLKOUT)分频,由分频,由TCR中的中的TDDR (bit0-3)加载。加载。2.5.2 2.5.2 定时器定时器定时器的工作过程:定时器的工作过程:定时器的基准工作脉冲由定时器的基准工作脉冲由CLKOUT提供,每来一个脉冲,预定标提供,每来一个脉冲,预定标计数器计数器PSC减减1,当,当PSC减至减至0,下一个脉冲到来时,下一个脉冲到来时,PSC产生借位。产生借位。借位信号借位信号分别控制定时计数器分别控制定时计数器TIM减减1和重新将和重新将TDDR的内容加载的内容加载预定标计数器预定标计数器PSC,每次定时计数器每次定时计数器TIM 减为减为0 0时产生定时中断时产生定时中断TINT, 给给TOUT管脚一个输出,同时管脚一个输出,同时重新用重新用PRD值装载值装载TIM 。 定时器的基本定时时间可由下式计算:定时器的基本定时时间可由下式计算: 定时周期定时周期CLKOUT(TDDR+1)(PRD+1) 当系统复位时,当系统复位时,TIMTIM和和PRDPRD都为都为FFFFHFFFFH,TCR TCR 中的中的TDDRTDDR全部清零。全部清零。当使用定时器时,必须对其进行初始化当使用定时器时,必须对其进行初始化 。定时器的使用初始化定时器的步骤如下:初始化定时器的步骤如下: 对寄存器对寄存器TCR中的中的TSS位置位置1,停止定时器工作;,停止定时器工作; 装入装入TIM初值;初值; 装入装入PRD初值;初值; 装装入入TCR初初始始化化TDDR和和启启动动定定时时器器;使使TSS清清0使使能能定定时时器器,使使TRB置位,重新装入定时初值。置位,重新装入定时初值。 对对IFR中的中的TINT位置位置1,可以清除挂起,可以清除挂起(尚未处理完的尚未处理完的)定时中断;定时中断; 对对IMR中的中的TINT位置位置1,使能定时器中断;,使能定时器中断; 使使ST1状态寄存器状态寄存器INTM位清位清0,开放所有的中断。,开放所有的中断。 定时器的使用用定时器可以实现方波发生器、脉冲频率监测器、周期信号周期监测等功能。用定时器可以实现方波发生器、脉冲频率监测器、周期信号周期监测等功能。定时器初始化程序片段:定时器初始化程序片段:ORM #0010h,TCR0 ;停止定时器停止定时器0 STM #799,TIM0 STM #799,PRD0 STM #K_TCR0,TCR0 ;启动定时器启动定时器0中断中断;TCR0=0269H ST #0FFFFh,IFR ;初始化中断初始化中断 ORM #0008h,IMR RSBX INTM例如:用定时器设计一个周期为例如:用定时器设计一个周期为4ms的方波信号发生器。的方波信号发生器。假假设设DSP主主频频为为4MHZ(TCLKOUT=250ns), 方方波波信信号号周周期期为为4ms,那那么么定定时时中中断断周期应为周期应为T=2ms,每中断一次,输出端电平取反一次。每中断一次,输出端电平取反一次。定定 时时 中中 断断 周周 期期 T=TCLKOUT*(TDDR+1)*(PRD+1), 假假 设设 TDDR=9,那那 么么PRD=799(031FH).15-1211109-6543-0保留保留softfreePSCTRBTSSTDDR预定标预定标定时器重新加载定时器重新加载1定时器停止状态定时器停止状态1定时器分频系数定时器分频系数;K_TCR0设置定时器设置定时器0控制寄存器的内容控制寄存器的内容K_TCR0_SOFT .set 0b11K_TCR0_FREE .set 0b10K_TCT0_PSC .set 1001b6K_TCT0_TRB .set 1b5K_TCT0_TSS .set 0b4K_TCT0_TDDR .set 1001b录音b play;已结束-放音record ld #0d000h,bsub ar2,bbc load,bneq;录制数据放完,再从头放起stm #4000h,ar2load ld *ar2+,a;加载录制数据play and #0fffeh,a;放音stlm A,DXR10retetransrsbx XFrete中断矢量段 .sect “vector”RESETb _c_int00 nop nop.space 25*4*16BRINT1b recvnopnopBXINT1b transnopnop4、TDM时分复用串口时分复用串口TDM时分复用串口功能允许TMS320C54x器件可与最多8个其它器件进行时分串行通信。利用TDM串口控制寄存器TSPC的TDM位,串口可以被配置为多处理模式(TDM=1),或独立模式(TDM=0)。 时分操作是将与不同器件的通信按时间依次划分为时间段,周期性的按时间顺序与不同的器件通信的工作方式。每个器件占用各自的通信时段(通道),循环往复传送数据。图2-35所示是一个8通道的TDM系统,各通道的发送或接受相互独立。 TDM串口寄存器TDM串口包含6个存储器映射寄存器和两个专用寄存器(TRSR和TXSR,这两个寄存器不直接对程序存取,只用于双向缓冲)完成。TDM数数据据接接收收寄寄存存器器(TRCV):16位,保存接收的串行数据,功能与DDR相同。TDM数数据据发发送送寄寄存存器器(TDXR):16位,保存发送的串行数据,功能与DXR相同。TDM串串口口控控制制寄寄存存器器(TSPC):16位,包含TDM的模式控制或状态控制位。第0位是TDM模式控制位:TDM=1,多路通信方式;TDM=0,普通串口通信方式。其它各位的定义与SPC相同。TDM通道选择寄存器(通道选择寄存器(TCSR):):16位,规定所有与其通信器件的发送时间段。TDM发发 送送 /接接 收收 地地 址址 寄寄 存存 器器 ( TRTA) : 16位 , 低 8位 ( RA0RA7) 为TMS320C54x的接收地址,高8位(TA0TA7)为发送地址。TDM接收地址寄存器(接收地址寄存器(TRAD):):16位,存留TDM地址线的各种状态信息。TDM数数据据接接收收移移位位寄寄存存器器(TRSR):16位,控制数据的接收保存过程,从信号的输入引脚到接收寄存器TRCV,与RSR功能类似。TDM数数据据发发送送移移位位寄寄存存器器(TXSR):控制从TDXR来的数据到输出引脚TDX发送出去,与XSR功能相同。5、外部总线接口(第三章再细讲第三章再细讲P120)54x访问外部存储器及I/O可通过外部接口进行。可通过独立的空间选择信号DS、PS、IS、MSTRB和IOSTRB选择物理上相分离的这3个空间。描述地址总线位数数据总线位数外部存储器选通控制信号外部程序存储器选通信号外部数据存储器选通信号I/O接口选通控制信号I/O接口选通信号读/写信号数据准备完成保持请求保持应答微状态完成指令地址获取中断响应READYR/D0D15 A0A15 信号名称 接口的外部就绪信号和软件可编程等待状态使微处理器与不同速度的存储器和I/O器件进行接口。接口的保持模式使外部器件可控制54x总线。外部存储器大部分可被54x指令 访 问 , 但 访 问 I/O口 需 用PORTR和PORTW专用指令。6、JTAG接口:IEEE标准11491扫描逻辑电路仅用于仿真和测试。IEEE标准11491扫描逻辑电路与能访问所有片内资源的片内扫描逻辑电路接口。因此,54x器件的串行扫描引脚和仿真引脚允许在线仿真。 2.6中断系统 C54x DSP既支持软件中断,也支持硬件中断:既支持软件中断,也支持硬件中断: 1、软件中断:软件中断:由程序指令(由程序指令(INTR、TRAP或或RESET)请求的。请求的。 2、硬件中断硬件中断:由物理设备信号请求的,他有两种形式:由物理设备信号请求的,他有两种形式:受外部中断口信号触发的外部硬件中断。受外部中断口信号触发的外部硬件中断。 受片内外设信号触发的内部硬件中断。受片内外设信号触发的内部硬件中断。1.1.中断分类中断分类 :分成如下两大类:分成如下两大类:可屏蔽中断和不可屏蔽中断。可屏蔽中断和不可屏蔽中断。 1 1、可屏蔽中断:可屏蔽中断:可以用软件来屏蔽或使能的硬件和软件中断可以用软件来屏蔽或使能的硬件和软件中断 C54x DSPC54x DSP最多可以支持最多可以支持1616个用户可屏蔽中断,例如个用户可屏蔽中断,例如C5402C5402可屏蔽中断:可屏蔽中断: INT3-INT0INT3-INT0 RINT0 RINT0、XINT0XINT0、RINT1RINT1和和XINT1XINT1(串行口中断)串行口中断) TINT0TINT0、TINT1TINT1(定时器中断)定时器中断) HPINTHPINT、DMAC0DMAC5DMAC0DMAC5 2 2、非屏蔽中断:这些中断是不能够屏蔽的。包括所有的软件中断,以及两个非屏蔽中断:这些中断是不能够屏蔽的。包括所有的软件中断,以及两个外部硬件中断(外部硬件中断(RSRS复位和复位和NMINMI)。)。 2处理中断的步骤处理中断的步骤 C54x DSP处理中断分如下三个步骤:处理中断分如下三个步骤: 1、接接收收中中断断请请求求。通通过过软软件件(程程序序代代码码)或或硬硬件件(引引脚脚或或片片内内外外设设)请请求求挂起主程序。挂起主程序。 如如果果中中断断源源正正在在请请求求一一个个可可屏屏蔽蔽中中断断,则则当当中中断断被被接接收收到到时时中中断断标标志志寄寄存存器器(IFR)的相应位被置的相应位被置1。 2、应答中断。、应答中断。C54x DSP必须应答中断请求。必须应答中断请求。 如果中断是可屏蔽的,则根据屏蔽条件决定如果中断是可屏蔽的,则根据屏蔽条件决定C54x DSP如何应答该中断。如何应答该中断。 如果是非屏蔽硬件中断和软件中断,中断应答是立即的。如果是非屏蔽硬件中断和软件中断,中断应答是立即的。 3 3、执行中断服务程序(、执行中断服务程序(ISR)。)。一旦中断被应答,一旦中断被应答,C54x DSP执行中断向量执行中断向量地址所指向的分支转移指令,并执行中断服务程序(地址所指向的分支转移指令,并执行中断服务程序(ISR)。)。2.6.22.6.2中断标志寄存器(中断标志寄存器(IFR)及中断屏蔽寄存器(及中断屏蔽寄存器(IMRIMR) 中断标志寄存器中断标志寄存器: :是一个存储器映射的是一个存储器映射的CPU寄存器,可以识别和清除有效的中断。寄存器,可以识别和清除有效的中断。当一个中断出现时,当一个中断出现时,IFR中的相应的中断标志位置中的相应的中断标志位置1,直到,直到CPU识别该中断为止。识别该中断为止。 resvdDMAC5DMAC4 BXINT1DMAC3BRINT1DMAC2HPINT INT3 TINT1DMAC1DMAC0 BXINT0 BRINT0 TINT0 INT2 INT1 INT015-1413 12 11 1098 765432 1 0中断标志清除:中断标志清除:C54x DSP复位(复位(RS引脚为低电平)。引脚为低电平)。中断得到处理。中断得到处理。将将1写到写到IFR中的适当位,相应的尚未处理完的中断被清除。中的适当位,相应的尚未处理完的中断被清除。利用合适的中断号执行利用合适的中断号执行INTR指令。指令。中断标志寄存器(中断标志寄存器(IFR)中断屏蔽寄存器中断屏蔽寄存器(IMR) 中断屏蔽寄存器(中断屏蔽寄存器(IMR): :是一个存储器映射的是一个存储器映射的CPU寄存器,主要用来屏蔽外寄存器,主要用来屏蔽外部和内部硬件中断。部和内部硬件中断。 如果状态寄存器如果状态寄存器ST1中的中的INTM位位=1,IMR无效。无效。当当ST1中的中的INTM位位=0时,时, IMR寄存器中的某一位为寄存器中的某一位为1,就使能相应的中断。,就使能相应的中断。用户可以对用户可以对IMR寄存器进行读写操作。寄存器进行读写操作。 resvdDMAC5DMAC4 BXINT1或或DMAC3BRINT1或或DMAC2HPINT INT3 TINT1或或DMAC1DMAC0 BXINT0 BRINT0 TINT0 INT2 INT1 INT015-1413 12 11 1098 765432 1 02.6.3接收应答中断请求及中断处理 1.1.中断请求:中断请求:当产生一个中断请求时,当产生一个中断请求时,IFR寄存器中相应的中断寄存器中相应的中断标志位被置位。不管中断是否被处理器应答,该标志位都会被置标志位被置位。不管中断是否被处理器应答,该标志位都会被置位。当相应的中断被响应后,该标志位自动被清除。位。当相应的中断被响应后,该标志位自动被清除。 软件中断请求:软件中断请求:由如下程序指令发出中断请求:由如下程序指令发出中断请求: INTR K:该该指指令令允允许许执执行行任任何何一一个个中中断断服服务务程程序序。指指令令操操作作数数(K中中断断号号)表表示示CPU分分支支转转移移到到哪哪个个中中断断向向量量地地址址。表表2-39列列出出了了用用于于指指向向每每个个中中断断向向量量位位置置的的操操作作数数K。当当应应答答INTR中中断断时时,ST1寄寄存存器器的的中中断断模模式式位位(INTM)被设置为被设置为1用以禁止可屏蔽中断。用以禁止可屏蔽中断。 TRAP K:该指令执行的功能与该指令执行的功能与INTR指令一致,但不设置指令一致,但不设置INTM位。位。 RESET:该该指令执行一个非屏蔽软件复位,可以在任何时候被使用并将指令执行一个非屏蔽软件复位,可以在任何时候被使用并将DSP置于已知状态。置于已知状态。RESET指令影响指令影响ST0和和ST1寄存器,但是不会影响寄存器,但是不会影响PMST寄存器。当应答寄存器。当应答RESET指令时,指令时,INTM位被设置为位被设置为1用以禁止可屏蔽中断。用以禁止可屏蔽中断。 硬件中断可以由如下信号发出请求:硬件中断可以由如下信号发出请求: INT3INT0引脚。引脚。RS和和NMI引脚。引脚。RINT0、XINT0、RINT1和和XINT1(串行口中断)。串行口中断)。TINT(定时器中断)、定时器中断)、HPINTHPINT、DMAC0DMAC5DMAC0DMAC5 。应答中断 软件中断和非屏蔽硬件中断会立刻被应答,可屏蔽中断仅仅在如下条件满软件中断和非屏蔽硬件中断会立刻被应答,可屏蔽中断仅仅在如下条件满足后才被应答:足后才被应答: 1、最最高高优优先先级级:当当超超过过一一个个硬硬件件中中断断同同时时被被请请求求时时,DSP按按照照中中断断优优先先级级响响应中断请求。应中断请求。2、INTM位清位清0:当当INTM=0,所有非屏蔽中断被使能。所有非屏蔽中断被使能。当当INTM=1,所有非屏蔽中断被禁止。所有非屏蔽中断被禁止。当当响响应应一一个个中中断断后后,INTM位位被被置置1。如如果果程程序序使使用用RETE指指令令退退出出中中断断服服务程序务程序(ISR)后,从中断返回后后,从中断返回后INTM重新使能。重新使能。使使用用硬硬件件复复位位(RS)或或执执行行SSBX INTM语语句句(禁禁止止中中断断)会会将将INTM位位置置1。通通过过执执行行RSBX INTM语语句句(使使能能中中断断),可可以以复复位位INTM位位。INTM不会自动修改不会自动修改IMR或或IFR寄存器。寄存器。3 3、IMR屏蔽位为屏蔽位为1:每个可屏蔽中断在每个可屏蔽中断在IMR寄存器中都有自己的屏蔽位。寄存器中都有自己的屏蔽位。为了使能一个中断,可以将其屏蔽位置为了使能一个中断,可以将其屏蔽位置1。 执行中断服务程序(ISR) 当应答中断后,当应答中断后,CPU会采取如下的操作:会采取如下的操作:1、保存程序计数器(、保存程序计数器(PC)值(返回地址)到数据存储器的堆栈顶部;值(返回地址)到数据存储器的堆栈顶部;注注意意:程程序序计计数数器器扩扩展展寄寄存存器器(XPC)不不会会自自动动保保存存在在堆堆栈栈中中。因因此此,如如果果ISR位位于于和和中中断断向向量量表表不不同同的的页页面面,用用户户必必须须在在分分支支转转移移到到ISR之之前压入前压入XPC到堆栈中。到堆栈中。FRETE指令可以用于从指令可以用于从ISR返回。返回。2、将中断向量的地址加载到、将中断向量的地址加载到PC;3、获获取取位位于于向向量量地地址址的的指指令令(分分支支转转移移被被延延时时时时,并并且且用用户户也也存存储储了了一个一个2字指令或两个字指令或两个1字指令,则字指令,则CPU也会获取这两个字);也会获取这两个字);4、执执行行分分支支转转移移,转转到到中中断断服服务务程程序序(ISR)地地址址(如如果果分分支支转转移移被被延时,则在分支转移之前会执行额外的指令);延时,则在分支转移之前会执行额外的指令);5、执行、执行ISR;6、从从堆堆栈栈中中弹弹出出返返回回地地址址到到PC中中。(注注意意XPC若若被被保保护护,必必须须人人为为恢恢复)复)7、直到一个返回指令中止、直到一个返回指令中止ISR8、继续执行主程序;继续执行主程序; 保存中断上下文保存中断上下文当当执执行行一一个个中中断断服服务务程程序序时时,有有些些寄寄存存器器必必须须保保存存在在堆堆栈栈中中。当当程程序序从从ISR返返回回时时(使使用用RCD、RETED或或RETFD 指指令令),用用户户软软件件代代码码必必须须恢恢复复这这些些寄寄存存器器的的上上下下文文。只只要要堆堆栈栈不不超超出存储器空间,那么用户就可以管理堆栈。出存储器空间,那么用户就可以管理堆栈。当保存和恢复上下文时,应该考虑如下几点:当保存和恢复上下文时,应该考虑如下几点:当使用堆栈保存上下文时,必须按相反的方向执行恢复。当使用堆栈保存上下文时,必须按相反的方向执行恢复。在在恢恢复复ST1寄寄存存器器的的BRAF位位之之前前,应应该该恢恢复复BRC值值。如如果果没有按照这个顺序操作,那么若没有按照这个顺序操作,那么若BRC=0,则,则BRAF位被清除。位被清除。中断等待时间中断等待时间执行一个中断之前,执行一个中断之前,C54x DSP要完成流水线中除了处于预取指要完成流水线中除了处于预取指和取指阶段指令的所有指令。和取指阶段指令的所有指令。 中断操作流程 例例 如如 , 如如 果果 INT0的的 中中 断断 向向 量量 号号 为为 16或或 10h, 左左 移移 2位位 后后 变变 成成 40h, 若若IPTR=0001h,则中断向量的地址为则中断向量的地址为00C0h,中断向量地址产生过程如下:中断向量地址产生过程如下:2.6.4重新映射中断向量地址 中中断断向向量量可可以以映映射射到到除除保保留留区区域域外外程程序序存存储储器器的的任任何何128字字页页面面的的起起始始位位置置。中中断断向向量量地地址址是是由由PMST寄寄存存器器中中的的IPTR(9位位中中断断向向量量指指针针)和和左左移移2位位后后的中断向量序号(中断向量序号为的中断向量序号(中断向量序号为031,左移,左移2后变成后变成7位)所组成。位)所组成。IPTR=0 0000 0001INT=40h(INT0)注意:注意:复位时,IPTR的所有位被置1(IPTR=1FFh),并按此值将复位向量映射到程序存储器的511页空间。所以,硬件复位(RS)向量不能被重新映射,总是指向程序空间的FF80h位置。当加载除1FFh之外的值到IPTR后,中断向量可以映射到其它地址。例如,用0001h加载IPTR,那么中断向量就被移到从0080h单元开始的程序存储器空间。向向量量0000000011000000位位15141312111098765432102.7流水线结构 C54x的CPU有一条指令流水线加速了指令执行。流水线共分为6级。这6级流水线是相互独立的,允许指令执行的不同周期重叠执行。在任何一个给定的周期内,流水线各级上都会有一到6条指令的不同操作在运行。将下一条要执行的指令地址提供给程序地址总线PAB从程序总线PB上取程序指令,并放入指令寄存器IR中指令寄存器IR的内容被译码,并决定在CPU和数据地址产生单元DAGEN中,产生什么样的操作类型和控制顺序数据地址产生单元输出要取数据的地址到数据地址总线DAB和CAB上从数据总线DB和CB上读数据同时把将要写的数据地址提供给写地址总线EAB指令被执行同时通过数据写总线EB完成写操作6级流水线并行结构第3章 TMS320C54x硬件系统设计 3.1 TMS320C54x硬件系统组成部分 时钟电路设计时钟电路设计 复位电路设计复位电路设计 供电系统设计供电系统设计 外扩数据存储器电路设计外扩数据存储器电路设计 外扩程序存储器电路设计外扩程序存储器电路设计 I/O(输入输出接口输入输出接口)扩展电路设计扩展电路设计 A/D和和D/A接口设计接口设计 JTAG 在线仿真调试接口电路设计在线仿真调试接口电路设计3.2.1时钟电路设计 一般C54x芯片的时钟电路有两种。第一种:利用芯片内部的振荡电路与X1、X2/CLK引脚之间连接的一只晶体和两个电容组成并联谐振电路。第二种:采用封装好的的晶体振荡器,将外部时钟源直接输入X2/CLK引脚,而将X1引脚悬空。3.2.2 复位电路设计 C54x DSP可以通过复位引脚可以通过复位引脚RS使使C54x复位到一个已知状态。为保证复位到一个已知状态。为保证DSP可靠复位,可靠复位,RS引脚必须为低电平,且保持足够的时间。引脚必须为低电平,且保持足够的时间。设设计计复复位位电电路路一一般般要要考考虑虑两两种种复复位位需需要要:一一种种是是上上电电复复位位;另另一一种种是是工工作作中的复位。中的复位。复位电路实现方式有两种:复位电路实现方式有两种:RC复位电路复位电路 2. .带有监控功能的复位电路带有监控功能的复位电路 工工作作中中复复位位则则要要求求复复位位的的低低电电平平至至少少保保持持6个个时时钟钟周周期期,以以使使芯芯片片的的初初始始化能够正确的完成。化能够正确的完成。在在系系统统刚刚接接通通电电源源时时(上上电电复复位位),复复位位引引脚脚RS 应应为为低低电电平平且且维维持持时时间间应应该该大大于于系系统统的的晶晶体体振振荡荡器器起起振振时时间间。通通常常,晶晶振振需需要要100200ms的的稳稳定定时间,则上电复位时间应该时间,则上电复位时间应该200ms。RC复位电路 RC复位电路成本较低,但其功耗较大,可靠性差;可靠性差的原因:可靠性差的原因:1.1.当电源出现瞬态降落时,由于当电源出现瞬态降落时,由于RC的响应速度较慢,无法产生符合要求的的响应速度较慢,无法产生符合要求的复位脉冲。复位脉冲。2.2.另外电阻、电容受工作环境特别是温度的影响较大,会给复位门限值的设另外电阻、电容受工作环境特别是温度的影响较大,会给复位门限值的设计带来困难。计带来困难。3. DSP系统的时钟频率较高,在运行中极易产生干扰和被干扰,甚至出现掉系统的时钟频率较高,在运行中极易产生干扰和被干扰,甚至出现掉电和死机现象。电和死机现象。 2带有监控功能的复位电路 1.1.三只管脚三只管脚的监控复位芯片仅提供复位功能,其复位输出方式和复位门限均可选择。2.2.四只管脚四只管脚的监控复位芯片除了提供上述功能外,还提供手动复位功能,该功能可通过一个按键开关来实现。3.3.五只以上管脚五只以上管脚的监控复位芯片不仅提供看门狗功能,还提供电源监视、双复位输出或双复位输入等功能。复位芯片有多种:3.3 供电系统设计 TMS320VC5402DSP的CPU工作电压是1.8V,片内I/O设备工作电压是3.3V。TPS76318是将5V直流电压转换为1.8V的电压调整器,TPS76333是将5V直流电压转换为3.3V的电压调整器3.4 外部存储器和I/O扩展设计 C54x DSP的外部接口包括数据总线、地址总线和一组用于访问片外存储器与I/O端口的控制信号。 C54x DSP的外部程序或数据存储器以及I/O扩展的地址和数据总线复用; 完全依靠片选和读写选通配合时序控制完成外部程序存储器、数据存储器和扩展I/O的操作。C54x DSPC54x DSP的主要扩展接口控制信号:的主要扩展接口控制信号: 描述地址总线位数数据总线位数外部存储器选通控制信号外部程序存储器选通信号外部数据存储器选通信号I/O接口选通控制信号I/O接口选通信号读/写信号数据准备完成保持请求保持应答微状态完成指令地址获取中断响应READYR/D0D15 A0A15 信号名称 3.4.1 外扩数据存储器电路设计 采用高速数据存储器ICSI64LVl6。其电源电压为3.3V,与C54x外设电压相同,有64K字、128K字容量的芯片型号可供选择。ICSI64LVl6分别有16条地址和数据线,控制线包括片选CE,读选OE通,写允许WE,高位字节选通UB和低位字节选通LB。该数据存储器占用64K字的地址(0000H-FFFFh)假如该数据存储器占用的地址为(2000H-FFFFh),应该如何设计?1A15A14A131MSTRBDSCE3.4.2 外扩程序存储器电路设计 以C5402和AT公司生产的AT29LVl024FlashROM为例,C5402有20条地址线,最多可以扩展到1M字的程序存储空间。AT29LVl024是1M位的FLASH ROM,有16条地址和数据线,有三条控制线,分别是片选CE、编程写入线WE和读允许线OE。 假如需要扩展两片AT29LVl024,他们的地址分别是:00000h0ffffh和100001ffffh,应如何设计该接口电路?3.4.3 I/O(输入输出接口)扩展电路设计 以常用I/O输入设备键盘和I/O输出设备显示器为例,介绍如何实现TMS320C54x的I/O口扩展设计。引脚符号引脚符号I/O方向方向功能说明功能说明VddI电源电源+VssI电源地电源地RESETI复位复位I片选片选RDI读信号线读信号线I写信号线写信号线A0I寄存器选择寄存器选择DB0D DB7I数据线数据线液晶显示电路设计液晶显示电路设计 TMS320C5402芯片和EPSON的液晶模块TCM-A0902的接口设计液晶模块的A0引脚为数据寄存器和命引脚为数据寄存器和命令寄存器选择引脚令寄存器选择引脚。A0=1时,对液晶的数据寄存器操作;时,对液晶的数据寄存器操作;A0=0时,对液晶的命令寄存器操作时,对液晶的命令寄存器操作。扩展的液晶模块占用两个I/O口地址,数据端口地址为0BFFFH,命令端口地址为3FFFHTMS320C5402芯片和液晶模块TCM-A0902的接口设计A0=1时,对液晶的数据寄时,对液晶的数据寄存器操作;存器操作;A0=0时,对液晶的命令寄时,对液晶的命令寄存器操作存器操作。扩展的液晶模块占用两个I/O口地址,数据端口地址为0BFFFH,命令端口地址为3FFFH 键盘接口电路设计 介介绍绍通通过过锁锁存存器器74HC573扩扩展展一一个个35的的矩矩阵阵式式键键盘盘。74HC573是是一一个个带带有有输输出使能和锁存控制端的锁存缓冲器,出使能和锁存控制端的锁存缓冲器,序号符号功能1输出使能11LE锁存控制291D8D数据输入12191Q8Q数据输出输入输出LEDLLHHHHLXHLXXHLQ0Z键盘扩展占用两个键盘扩展占用两个I/O端口地址端口地址:读键盘读键盘端口端口地址为地址为0EFFFH写键盘端口地址为写键盘端口地址为0DFFFH引脚说明引脚说明 74HC573的真值表的真值表 键盘接口电路设计3.5 A/D和D/A接口设计 TMS320C54x有多个McBSP(多通道缓冲串口),通常用于A/D转换器和D/A转换器的数据传递接口。以TI公司的音频编解码器(TLC320AD50)的接口设计为例说明A/D和D/A接口电路设计。3.6 3.3V和5V混合逻辑设计 逻辑电压5VCMOS/V5VTTL/V3.3V逻辑电平/VVOH4.42.42.4VOL0.50.40.4VIH3.52.02.0VIL1.50.80.8Vt2.51.51.5电平转换的芯片有SN74LVTH245和QS3245等。3.7 JTAG 在线仿真调试接口电路设计 仿真电缆和DSPJTAG测试口的连接是通过一个14脚的插头座(仿真头)来实现的。仿真头上信号连接关系如图3-12所示:其中主要引脚TDI测试数据的输入TDO测试数据的输出TMS是测试模式选择TCK和TCK_RET是测试时钟的输出和返回。EMU1、EMU1仿真中断0和1TRST测试复位当仿真座与DSP距离大于6英寸或小于6英寸时,DSP芯片JTAG逻辑测试口和14脚的仿真座之间的连接关系不同。大于6英寸时,它们之间可以不加缓冲驱动器小于6英寸时,它们之间必须加缓冲驱动器距离大于6inch的连接图距离小于6inch的连接图第4章 TMS320C54x指令系统 汇编指令系统包含汇编指令系统包含:汇编语言指令、汇编伪指令、宏指令和链接指令汇编语言指令、汇编伪指令、宏指令和链接指令。它的书写形式有两种:助记符形式和代数式形式。它的书写形式有两种:助记符形式和代数式形式。4.2 汇编源程序格式汇编源程序格式 :汇编源程序由汇编伪指令、汇编语言指令、宏汇编指令和注释组成汇编源程序由汇编伪指令、汇编语言指令、宏汇编指令和注释组成 C54x汇编源程序语句格式含有汇编源程序语句格式含有4个域,一般格式如下:个域,一般格式如下:助记符指令格式:助记符指令格式:最多不能超过最多不能超过200个字符个字符 标号标号: 助记符助记符 操作数列表操作数列表 ;注释;注释例如:例如: begin: STM #40, AR1 ;将立即数将立即数40给辅助寄存器给辅助寄存器AR1标号域标号域指令域指令域 操作数域操作数域注释域注释域代数指令格式:代数指令格式: 标号标号: 代数指令代数指令 ;注释;注释例如:例如:begin: AR1 =#40 ;将立即数将立即数40给辅助寄存器给辅助寄存器AR1 标号域标号域 :标号都是可选项,但伪指令标号都是可选项,但伪指令.set和和.equ必需要标号。必需要标号。使用标号时,必须从源语句的第一列开始。使用标号时,必须从源语句的第一列开始。一一个个标标号号允允许许最最多多有有32个个字字符符:AZ、az、09、_和和$。第第一一个个字字符符不不能是数字。能是数字。标标号号对对大大小小写写敏敏感感,如如果果在在启启动动汇汇编编器器时时,用用到到了了-c选选项项,则则标标号号对对大大小小写不敏感。写不敏感。标号后可跟一个冒号标号后可跟一个冒号“:”,也可不跟。,也可不跟。如果不用标号,则第一列上必须是空格、分号或星号。如果不用标号,则第一列上必须是空格、分号或星号。标号值等于它所指向的语句所在单元的地址。标号值等于它所指向的语句所在单元的地址。 指令域指令域指令域:指令域:不能从第一列开始,一旦从第一列开始,它将被认作标号。不能从第一列开始,一旦从第一列开始,它将被认作标号。指令域包括以下指令码之一:指令域包括以下指令码之一: 汇编语言指令、汇编伪指令、宏指令。汇编语言指令、汇编伪指令、宏指令。 操作数域操作数域1)操操作作数数域域是是操操作作数数列列表表。操操作作数数可可以以是是常常量量、符符号号、或或是是常常量量和和符符号号的的混混合表达式合表达式。操作数之间用逗号分开。操作数之间用逗号分开。2)操操作作数数前前可可以以使使用用前前缀缀来来指指定定操操作作数数(常常数数、符符号号或或表表达达式式)是是地地址址还还是是立立即即数数或或间接地址间接地址。#前缀:前缀:表示其后操作数是立即数。表示其后操作数是立即数。例如:例如:ADD #123,B 立立即即数数符符号号#,一一般般用用在在汇汇编编语语言言指指令令中中,也也可可使使用用在在伪伪指指令令中中,表表示示伪伪指指令后的立即数,但一般很少用。令后的立即数,但一般很少用。 如:如: A=A+#10 ;#是必需的是必需的 .byte #10 ;#号一般可省略号一般可省略*前缀:前缀:表示其后操作数是间接地址。表示其后操作数是间接地址。例例如如指指令令:LD *AR4,A。汇汇编编器器将将AR4中中的的内内容容作作为为地地址址,将将此此地地址址单单元元的的内容传送给内容传送给A累加器。累加器。前缀:前缀:表示其后操作数是采用直接寻址或绝对地址寻址的地址。直接寻址产表示其后操作数是采用直接寻址或绝对地址寻址的地址。直接寻址产生的地址是生的地址是后操作数后操作数(地址地址)和数据页指针或堆栈指针的组合。和数据页指针或堆栈指针的组合。例如:例如:ADD #10,XYZ完成的功能:完成的功能:在状态寄存器在状态寄存器STl中中CPL=0时,数据页指针时,数据页指针DP所指页内,偏移量为所指页内,偏移量为XYZ变变量地址低量地址低7位数值大小的地址单元内容和位数值大小的地址单元内容和10相加并存回到该地址单元中相加并存回到该地址单元中(XYZ所指单元所指单元)。CPL=1CPL=1时,时,SPSP堆栈指针寄存器的值加堆栈指针寄存器的值加XYZXYZ的值所指向的地的值所指向的地址单元的内容和址单元的内容和1010相加并存回到该地址单元中。相加并存回到该地址单元中。注:注:助记符指令中使用直接寻址方式时助记符指令中使用直接寻址方式时号可以省略,但代数指令中不能号可以省略,但代数指令中不能省略。省略。 在编写汇编语句时,应遵循下列规则:在编写汇编语句时,应遵循下列规则:语句的语句的开头开头只能是只能是标号、空格、星号或分号标号、空格、星号或分号。标号是可选项,如果使用,必须从标号是可选项,如果使用,必须从第一列第一列开始。开始。每每个个域域之之间间必必须须由由一一个个或或多多个个空空格格来来分分开开。制制表表符符等等同同于于空空格格的作用。的作用。注注释释是是可可选选项项。开开始始于于第第一一列列的的注注释释用用星星号号或或分分号号(*或或;)来来标明,开始于标明,开始于其它列其它列的注释必须由的注释必须由分号开头分号开头。 源语句的字符数每行不能超过源语句的字符数每行不能超过200个个。4.2.2 汇编语言常量汇编语言常量C54x汇编器支持汇编器支持7种类型的常量:种类型的常量:二二进进制制整整数数、八八进进制制整整数数、十十进进制制整整数数、十十六六进进制制整整数数、字字符符常常量量、汇汇编编时时常量、浮点数常量。常量、浮点数常量。汇编器在内部把常量作为汇编器在内部把常量作为32bit量。常量不能进行符号扩展。量。常量不能进行符号扩展。例如:常量例如:常量FFH等同于等同于00FFH(16进制进制)或或255(10进制进制),但不是,但不是-1。 4. 十六进制整数常量十六进制整数常量 最最多多由由4个个十十六六进进制制数数字字组组成成,其其后后缀缀为为H(或或h)。数数字字包包括括十十进进制制数数09和和字符字符AF及及af。 它它必必须须由由十十进进制制值值0-9开开始始,也也可可以以由由前前缀缀(0x)标标明明十十六六进进制制。如如果果少少于于4位,汇编器将把数位右对齐。位,汇编器将把数位右对齐。例如:例如: 78h、 0FH、 37Ach、 0x37AC 汇编时常量汇编时常量用用.set伪伪指指令令给给一一个个符符号号赋赋值值,则则这这个个符符号号等等效效于于一一个个常常量量。在在表表达达式式中中,被被赋的值固定不变。例如:赋的值固定不变。例如: shift .set 3 A=#shift ; 将将3赋给赋给A累加器累加器4.3 汇编语言指令系统 4.3.1指令系统中的符号和缩写4.3.2指令系统中的记号和运算符4.3.2 指令系统分类指令系统分类C54x指令系统有2种分类方法:按指令的功能分类。按指令的功能分类。按执行指令所要求的周期分类。按执行指令所要求的周期分类。按指令的功能,按指令的功能,C54x指令系统可以分成指令系统可以分成4大类:大类:算术运算指令。算术运算指令。逻辑运算指令。逻辑运算指令。程序控制指令。程序控制指令。加载和存储指令。加载和存储指令。4.4寻址方式 指令的寻址方式是指当硬件执行指令时,寻找指令所指定的参与运算的操作数的方法。C54X提供七种基本的数据寻址方式:提供七种基本的数据寻址方式:立即数寻址立即数寻址:指令中嵌有一个固定的数;指令中嵌有一个固定的数;绝对地址寻址:绝对地址寻址:指令中有一个固定的地址;指令中有一个固定的地址;累加器寻址:累加器寻址:按累加器内的地址去访问程序存储空间中的一个单元;按累加器内的地址去访问程序存储空间中的一个单元;直直接接寻寻址址:指指令令中中的的低低7bits7bits是是一一个个数数据据页页内内的的偏偏移移地地址址,而而所所在在的的数数据据页页由由数数据据页页指指针针DPDP或或SPSP决决定定,该该偏偏移移地地址址加加上上DPDP和和SPSP的的值值决决定定了了在在数数据据存存储储空空间间中中的的实际地址;实际地址;间接寻址:间接寻址:按照辅助寄存器中的地址访问数据存储空间;按照辅助寄存器中的地址访问数据存储空间;存存储储器器映映射射寄寄存存器器寻寻址址:修修改改存存储储器器映映射射存存储储器器中中的的值值,不不影影响响当当前前DPDP或或SPSP的的值;值;堆栈寻址:堆栈寻址:把数据压入和弹出系统堆栈;把数据压入和弹出系统堆栈;4.4.1 立即数寻址立即数寻址立即数寻址:立即数寻址:指令里包括了立即操作数。指令里包括了立即操作数。在一条指令中可对两种立即数编码。一种是短立即数(在一条指令中可对两种立即数编码。一种是短立即数(3 3、5 5、8 8或或9bits9bits),),另一种是另一种是16bits16bits的长立即数。的长立即数。立即数的长度由所使用的指令类型决定。立即数的长度由所使用的指令类型决定。 3bits,5bits,8bits或或9bits立即数包含在单字指令(指令代码只有一立即数包含在单字指令(指令代码只有一个字)中,个字)中,16-bit立即数包含在双字指令中。立即数包含在双字指令中。 3bits和和5bits立即数立即数8bits立即数立即数9bist立即数立即数16bits立即数立即数LDFRAMELDRPTLDADD ADDMAND ANDMOR ORMST STMXOR XORMRPT RPTZMAC SUBBITF CMPTLD立即数寻址例如例如: :RPT #99;将紧跟在此条语句后面的语句重复执行;将紧跟在此条语句后面的语句重复执行99次。次。 LD #1000H,A;LD #1000H,A;把立即数把立即数1000H1000H装入累加器装入累加器A A。操作码(8bit)操作数操作数(8bit) 73h(8bit) 73hBIT: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0操作码 (16bit)操作数(16bit)1000hBIT: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0指令代码格式:指令代码格式:4.4.2 绝对地址寻址 绝对地址寻址方式:绝对地址寻址方式:指令中包含的是所寻找操作数的指令中包含的是所寻找操作数的1616位单元地址。可以位单元地址。可以是是16位位单元地址单元地址或或1616位符号常数位符号常数。绝对地址寻址指令的指令代码至少是绝对地址寻址指令的指令代码至少是两个字两个字。 绝对地址寻址有以下四种类型:绝对地址寻址有以下四种类型:数据存储器地址(数据存储器地址(dmad)寻址、程序存寻址、程序存储器地址(储器地址(pmadpmad)寻址、寻址、 端口地址(端口地址(PAPA)寻址、寻址、* *(lklk)寻址寻址 数据存储器地址(数据存储器地址(dmad)寻址寻址 :用一个符号或一个数来确定用一个符号或一个数来确定数据空间数据空间中中的一个地址。的一个地址。 MVDK MVDK SmemSmem,dmaddmad; ; (寻找目的地址)寻找目的地址) MVDM MVDM dmaddmad,MMR ;MMR ; ( (寻源址寻源址) ) MVKD MVKD dmaddmad,SmemSmem; ; ( (寻源址寻源址) ) MVMD MMRMVMD MMR,dmaddmad ; ; (寻找目的地址)寻找目的地址)例如:例如:MVKD SAMPLEMVKD SAMPLE,* *AR5AR5 ;把数据空间中把数据空间中SAMPLESAMPLE标注的地址里标注的地址里的数复制到由的数复制到由AR5AR5辅助寄存器指向的数据存储单元中去辅助寄存器指向的数据存储单元中去 程序存储器地址(pmad)寻址程序存储器地址(程序存储器地址(pmadpmad)寻址是用寻址是用一个符号一个符号或或一个具体的数一个具体的数来确定来确定程序存程序存储器储器中的一个地址中的一个地址 FIRS FIRS XmemXmem,YmemYmem,pmadpmad y(n)=h(0)x(n)+x(n-7)+ h(1)x(n-1)+x(n-6)+ h(2)x(n-2)+x(n-5)+ h(3)x(n-3)+x(n-4) -8点对称点对称FIR滤波滤波h(n)=h(N-1-n) MACD MACD SmemSmem,pmadpmad,srcsrc一个数据存一个数据存储器器单元元Smem值与一个程序存与一个程序存储器器单元元pmadpmad的的值相乘和相乘和srcsrc相相加加结果存在果存在SrcSrc中。另外中。另外SmemSmem值装入到装入到T T寄存器中和寄存器中和紧接接SmemSmem地址的数据地址的数据单元中。元中。 实现一个对称的有限冲击响应滤波器实现一个对称的有限冲击响应滤波器B=B+A*B=B+A*(pmadpmad), , A=(A=(Xmem+YmemXmem+Ymem)16)R2 RN循环缓冲器大小寄存器循环缓冲器大小寄存器(BK)内容装载及循环缓冲器的内容装载及循环缓冲器的有效基地址有效基地址设定设定举举例:例:例例1:1:假设开辟一个有假设开辟一个有3131个字的循环缓冲器:个字的循环缓冲器:例例2:2:假设开辟一个含有假设开辟一个含有3232个字的循环缓冲区:个字的循环缓冲区:那么:那么: 循环缓冲器大小寄存器循环缓冲器大小寄存器(BK)内容:必须装入内容:必须装入31 循环缓冲器的循环缓冲器的有效基地址有效基地址(EFB):最低最低5位为位为0的地址的地址 (即(即xxxx xxxx xxx0 00002)那么:那么: 循环缓冲器大小寄存器循环缓冲器大小寄存器(BK)内容:必须装入内容:必须装入32 循环缓冲器的循环缓冲器的有效基地址有效基地址(EFB):最低最低6位为位为0的地址的地址 (即(即xxxx xxxx xx00 00002)例例4-14-1:在循环模式下,使用:在循环模式下,使用MACMAC指令实现指令实现1616阶阶256256点点FIRFIR滤波器滤波器, ,代数式为代数式为 fir_filterfir_filter第一次执行前:第一次执行前: 系数寄存器系数寄存器AR5AR5指向系数缓冲器的首地址。指向系数缓冲器的首地址。 采样数据寄存器采样数据寄存器AR4AR4指向数据缓冲器的尾地址。指向数据缓冲器的尾地址。 BKBK要赋值要赋值=FIR=FIR阶数(块循环内或外赋值)阶数(块循环内或外赋值) BRCBRC要赋值要赋值=FIR=FIR点数(块循环外赋值)点数(块循环外赋值)-1-1 a(0)a(15)a(14):a(1)高地址高地址系数缓冲器系数缓冲器AR5FIR_COFF-BUFFIR_DATA_BUF:AR7输出缓冲器输出缓冲器OUTBUFINPUT读入数据缓冲器读入数据缓冲器AR6AR4X(n)X(n-15)X(n-14)X(n-13):X(n-1)数据缓冲器数据缓冲器每个新的采样值表达式每个新的采样值表达式执行完成,执行完成,AR5都都指向系数缓冲器指向系数缓冲器的首地址;的首地址; AR4指向数据缓冲器中指向数据缓冲器中存放最旧采样值的地址存放最旧采样值的地址例例4-14-1续续Fir_task:STM #255,BRC ;执行执行256次次 RPTBD fir_filter_loop-1 STM #K_FIR_BFFR,BK ;FIR缓冲器大小缓冲器大小 PORTR PA1,*AR6 ;从端口从端口PA1读入新数据入新数据; LD *AR6, A ;装入输入样值装入输入样值 Fir_filter:STL A, *AR4+% ;用最新的样值代替最旧的样值,该语句执用最新的样值代替最旧的样值,该语句执 ;行完,行完, AR4指向采样缓冲器首地址指向采样缓冲器首地址 RPTZ A,(K_FIR_BFFR-1) MAC *AR4+0%,*AR5+0%,A ;滤波波 STH A,*AR7+ ;存储存储FIR滤波输出滤波输出值到输出缓冲器到输出缓冲器Fir_filter_loop: RET fir_initfir_init : ;设置循环寻址步长和地址指针设置循环寻址步长和地址指针STM #1, AR0 #1, AR0 ; ;赋赋STEPSTEP值为值为1 1 STM #INPUT,AR6#INPUT,AR6 STM #FIR_COFF_BUF, AR5 #FIR_COFF_BUF, AR5 ;AR5;AR5指向系数指向系数缓冲冲器器首地址首地址 STM #(FIR_DATA_BUF+K_FIR_BFFR-1),AR4 ;AR4 #(FIR_DATA_BUF+K_FIR_BFFR-1),AR4 ;AR4指向采指向采样缓冲冲器器尾尾地址地址 STM #OUTBUF,AR7OUTBUF,AR7程序片断如下:程序片断如下:使用循环寻址一定要遵循以下三条规则:使用循环寻址一定要遵循以下三条规则:循环缓冲器基地址的最低循环缓冲器基地址的最低N位必须为位必须为0,且,且 应大于循环应大于循环缓冲器大小缓冲器大小R,R必须装入必须装入BK寄存器中。寄存器中。 循环寻址的步长必须小于循环缓冲器的大小;循环寻址的步长必须小于循环缓冲器的大小; 循环缓冲器第一次被寻址时,辅助寄存器循环缓冲器第一次被寻址时,辅助寄存器ARx必须指向必须指向循环缓冲器。循环缓冲器。2、位倒序寻址、位倒序寻址位倒序寻址类型位倒序寻址类型ARx-0BARx-0B和和ARx+0BARx+0B。将将ARxARx中的内容与中的内容与AR0AR0中内容以中内容以位倒序位倒序的方式相减或相加产生的方式相减或相加产生ARxARx中的新内容,即中的新内容,即借位或进位是从左向右,而不是从右向左。借位或进位是从左向右,而不是从右向左。 例如:例如:01100110与与11001100以位倒序的方式相加。以位倒序的方式相加。 0110 + 1100 1001FFTFFT要求采样点(假设为要求采样点(假设为8 8点)的输入顺序是点)的输入顺序是 X(0) X(4) X(2) X(6) X(1) X(5) X(0) X(4) X(2) X(6) X(1) X(5) X(3) X(7),X(3) X(7), 输出顺序才是输出顺序才是 X(0) X(1) X(2) X(3) X(4) X(5) X(6) X(7)X(0) X(1) X(2) X(3) X(4) X(5) X(6) X(7)。采用采用位倒序寻址的方式正好符合位倒序寻址的方式正好符合FFTFFT算法的要求。算法的要求。 假设辅助寄存器是假设辅助寄存器是8bit8bit的,的,AR2AR2表示了在存储器中数据的基地址(表示了在存储器中数据的基地址(0110 00000110 0000)b b,AR0AR0的值为的值为(0000 1000)(0000 1000)b b。则表则表4-104-10给出了操作数为给出了操作数为* *AR2+0BAR2+0B的位模式和的位模式和AR2AR2的低的低4 4位的关系:位的关系:8 8点点点点的的的的FFTFFT蝶蝶蝶蝶型型型型结结结结运运运运算算算算原序位模式位倒序位倒序模式0000000000100018100020010401003001112110040100200105010110101060110601107011114111081000100019100191001101010501011110111311011211003001113110111101114111070111151111151111位倒序寻址的方式:位倒序寻址的方式: 两种:两种:输入数据为实数和复数。输入数据为实数和复数。 输入数据为实数时,输入数据为实数时,AR0AR0存放的整数存放的整数N N是是FFTFFT点数的一半点数的一半;输入数据为复数时,输入数据为复数时,AR0AR0存放的整数存放的整数N N是是FFTFFT点数点数。 位倒序寻址方式可以实现在位倒序寻址方式可以实现在同一个缓冲区内需要交换的两个单元内容互换,同一个缓冲区内需要交换的两个单元内容互换,不需要再开辟缓冲区不需要再开辟缓冲区。亦可以。亦可以输入数据和位倒序后的数据分别存放在两块不输入数据和位倒序后的数据分别存放在两块不同的缓冲区中。同的缓冲区中。 例例4-24-2:实现:实现1616点实数的点实数的FFTFFT位倒序;位倒序前后数据放在同一缓冲区中。位倒序;位倒序前后数据放在同一缓冲区中。AR2:0-8-4-12-2-10-6-14-1-9-513- 311- 7- 15AR3:0-1-23-4-5- 6- 7- 8-910-11-1213-14-15.data .align 0x1000m_n: .word 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15N .set 16 .textM_start: AR0=#(N/2) ;AR0存放存放FFT变换点数的一半值变换点数的一半值 AR2=#m_n ;AR2,AR3指向存放数据的缓冲区的第一个单元指向存放数据的缓冲区的第一个单元 AR3=#m_n BRC=#(N/2) ;循环循环N/2次次 Blockrepeat(m_end)M_begin: mar(*AR2+0B) ;位倒序寻址位倒序寻址 mar(*AR3+) A=AR2 B=AR3 A-=B If(ALT)goto M_begin A=*AR2 B=*AR3 *AR2=B *AR3=Am_end: nop.endAR2:0-8-4-12-2-10-6-14-1-9-513- 311- 7- 15AR3:0-1-23-4-5- 6- 7- 8-910-11-1213-14-15例例4-34-3:实现8点复数FFT位倒序寻址;(8点复数实际输入16个数据,8个实部,8个虚部)位倒序前后数据放在两个不同的缓冲区R0 I0R1 I1R2 I2R3 I3R4 I4R5 I5R6 I6R7 I7AR3 AR3 0C10H 0C12H 0C14H OC16H 0C18H 0C1AH OC1CH OC1EH0C10H 0C12H 0C14H OC16H 0C18H 0C1AH OC1CH OC1EH AR2AR2 OC30H OC30H R0 I0R4 I4R2 I2R6 I6R1 I1R5 I5R3 I3R7 I7 0C10H 0C18H 0C14H OC1CH 0C12H 0C1AH OC16H OC1EH0C10H 0C18H 0C14H OC1CH 0C12H 0C1AH OC16H OC1EH 原序:原序:位倒序后:位倒序后: .title “FFT_BITRR.ASM”.title “FFT_BITRR.ASM” . .mmregsmmregs .def start .def startinputinput . .usectusect “d_input”,20 “d_input”,20 ;采样数据输入缓冲区Output .Output .usectusect “d_output”,20 “d_output”,20 ;位倒序后数据缓冲区k_fir_size .set 8k_fir_size .set 8 ;FFT点数bit_rev:bit_rev:start: start: stmstm #input ,AR1 #input ,AR1 ;采样数据输入缓冲区首地址给AR1 RPT #2*K_FFT_SIZE-1 RPT #2*K_FFT_SIZE-1 ;将2N个采样数据装入采样数据缓冲区 PORTR PA1,*AR1+PORTR PA1,*AR1+ STM #input,AR3 STM #input,AR3 ;采样数据输入缓冲区首地址给AR3 STM #output,AR2 STM #output,AR2 ;位倒序后数据缓冲区首地址给AR2 STM #K_FFT_SIZE-1,BRC STM #K_FFT_SIZE-1,BRC ;FFT点数-1装入BRC RPTBD BIT_R_END-1 RPTBD BIT_R_END-1 STM #K_FFT_SIZE,AR0 STM #K_FFT_SIZE,AR0 ;FFT点数装入AR0,准备位倒序 MVDD AR3+,AR2+MVDD AR3+,AR2+ MVDD *AR3-, *AR2+ MVDD *AR3-, *AR2+ MAR MAR (* *AR3+0BAR3+0B) ;0为零BIT_R_END: .ENDBIT_R_END: .ENDR0 I0R1 I1R2 I2R3 I3R4 I4R5 I5R6 I6R7 I7AR3 0C10H 0C12H 0C14H OC16H 0C18H 0C1AH OC1CH OC1EHAR3 0C10H 0C12H 0C14H OC16H 0C18H 0C1AH OC1CH OC1EH AR2 OC30HAR2 OC30H R0 I0R4 I4R2 I2R6 I6R1 I1R5 I5R3 I3R7 I7双操作数寻址方式 双数据存储器操作数寻址用在完成双数据存储器操作数寻址用在完成两个读或一个读并行一个存储两个读或一个读并行一个存储的指令中。这些的指令中。这些指令只有指令只有一个字长一个字长且只能以间接寻址的方式工作。且只能以间接寻址的方式工作。 Xmem和和Ymem代代表表两两个个数数据据存存储储器器操操作作数数。Xmem表表示示读读操操作作数数;Ymem在在读两个操作数时表示读操作数,在一个读并行一个写的指令中表示写操作数。读两个操作数时表示读操作数,在一个读并行一个写的指令中表示写操作数。如如果果源源操操作作数数和和目目的的操操作作数数指指向向了了同同一一个个单单元元,在在并并行行存存储储指指令令中中(例例如如STLD),),读在写之前执行。读在写之前执行。ST src,Ymem LD Xmem,dst如如果果一一个个双双操操作作数数指指令令( 如如ADD)指指向向了了同同一一辅辅助助寄寄存存器器,而而这这两两个个操操作作数数的寻址方式不同。那么就用的寻址方式不同。那么就用Xmod域所确定的方式来寻址。域所确定的方式来寻址。ADD Xmem,Ymem,dst例如:MVDD Xmem,Ymem双操作数寻址双操作数寻址指令格式指令格式 Opcode XmodXarYmodYarBit: 15-8 7 6 5 4 3 2 1 0Bit: 15-8 7 6 5 4 3 2 1 0 Xar or Yar 域域 辅助寄存器辅助寄存器 00AR201AR310AR411AR5确定包含确定包含Ymem地址地址的辅助寄存的辅助寄存器器确定包含确定包含Xmem地地址的辅助址的辅助寄存器寄存器定义用于访问定义用于访问Ymem操作数操作数的间接寻址方的间接寻址方式的类型式的类型定义用于访问定义用于访问Xmem操作数的操作数的间接寻址方式的间接寻址方式的类型类型指令的指令的操作码操作码Xmod or Ymod 域域 操作码语法操作码语法 00*ARx01*ARx-10*ARx+11*ARx+0%注意注意:只有只有AR2、AR3、AR4、AR5四个辅助寄存器可以用于双操作数寻址四个辅助寄存器可以用于双操作数寻址 双操作数寻址操作数的类型只能是双操作数寻址操作数的类型只能是*ARx、*ARx-、*ARx+、*ARx+0%4.4.6存储器映射寄存器寻址存储器映射寄存器寻址 存储器映射寄存器寻址用来修改存储器映射寄存器而不受当前数据页指针存储器映射寄存器寻址用来修改存储器映射寄存器而不受当前数据页指针(DPDP)或堆栈指针(或堆栈指针(SPSP)值值的影响的影响。存储器映射寄存器寻址既可以在存储器映射寄存器寻址既可以在直接寻址直接寻址中使用,也可以在中使用,也可以在间接寻址间接寻址中使用。中使用。在直接寻址方式下,让数据存储器地址的高在直接寻址方式下,让数据存储器地址的高9bits9bits置置0 0,而不管,而不管DP DP 或或SPSP的值;的值;在间接寻址方式下只使用当前辅助寄存器的低在间接寻址方式下只使用当前辅助寄存器的低7bits7bits。 STM #0FF25h,AR1 STLM A,*AR1 STLM A,25h STLM A,PRD RSBX CPL LD #0,DP STL A,25h RSBX CPL LD #1,DP STLM A,25h 采用存储器映射寄存器寻址的指令:采用存储器映射寄存器寻址的指令: LDM MMR,dst MVDM dmad, MMR MVMD MMR,dmad MVMM MMRx,MMRy ;MMRx,MMRy只能是AR0AR7 POPM MMR PSHM MMR STLM src,MMR STM #1k,MMR4.4.7堆栈寻址 系统堆栈用来在中断和子程序响应期间自动存入程序计数器。它也用来保护现系统堆栈用来在中断和子程序响应期间自动存入程序计数器。它也用来保护现场或传递参数。场或传递参数。处理器使用堆栈指针寄存器处理器使用堆栈指针寄存器SPSP( 16-bit16-bit的存储器映射寄存器)来对堆栈寻址,的存储器映射寄存器)来对堆栈寻址,它总是指向存放在堆栈中的最后一个数据。它总是指向存放在堆栈中的最后一个数据。堆栈的操作:堆栈的操作:压栈压栈-由高地址到低地址由高地址到低地址 弹出堆栈弹出堆栈-由低地址到高地址由低地址到高地址先进后出原则共有四条使用堆栈寻址方式访问堆栈的指令:PSHD PSHD 把一个数据存储器的值压入堆栈;把一个数据存储器的值压入堆栈;PSHM PSHM 把一个存储器映射寄存器的值压入堆栈;把一个存储器映射寄存器的值压入堆栈;POPDPOPD 把一个数据存储器的值弹出堆栈;把一个数据存储器的值弹出堆栈;POPMPOPM 把一个存储器映射寄存器的值弹出堆栈。把一个存储器映射寄存器的值弹出堆栈。 寻址方式主要内容回顾寻寻址址方方式式立即数寻址立即数寻址绝对地址寻址绝对地址寻址直接寻址(直接寻址(Smem)间接寻址间接寻址累加器寻址累加器寻址*(1K)寻址寻址(Smem)Dmad寻址寻址端口寻址端口寻址Pmad寻址寻址双操作数寻址双操作数寻址(Xmem,Ymem)单操作数寻址单操作数寻址(Smem)(循环寻址循环寻址和位倒序寻址)和位倒序寻址)寻址程序存储寻址程序存储空间空间寻址数据存寻址数据存储空间储空间-寻址寻址I/O空间空间存储器映射寄存器寻址存储器映射寄存器寻址堆栈寻址堆栈寻址4.5 DSP汇编伪指令功能:给程序提供数据并控制汇编过程将代码和数据汇编进特定的段为未初始化的变量保留存储器空间控制展开列表的形式存储器初始化汇编条件块定义全局变量指定汇编器可以获得宏的特定库检查符号调试信息汇编器汇编器完成完成服务于汇编器,服务于汇编器,不产生机器代码不产生机器代码重点:段定义伪指令常数初始化伪指令.word引用其它文件的伪指令汇编时符号定义伪指令.set.end.mmregs伪指令4.5.1. 段定义伪指令 汇编语言程序中的各部分代码以段的形式存在,同一伪汇编语言程序中的各部分代码以段的形式存在,同一伪指令在汇编语言程序中可以多次出现。指令在汇编语言程序中可以多次出现。段是通过一种叠加的过程来建立的段是通过一种叠加的过程来建立的-由汇编器完成由汇编器完成五条指令五条指令: .bss 、 .usect 、 .data 、 .text、 .sect .bss 为未初始化的变量保留空间。为未初始化的变量保留空间。 .usect 在一个未初始化的有命名的段中为变量保留在一个未初始化的有命名的段中为变量保留空间。空间。.sect 定义已初始化的带命名段,并将紧接着的代码定义已初始化的带命名段,并将紧接着的代码或数据存入该段。或数据存入该段。 .data 通常包含了初始化的数据。通常包含了初始化的数据。 .text 该段包含了可执行的代码。该段包含了可执行的代码。未初未初始化始化段段已初已初始化始化段段1、未初始化段的段定义伪指令、未初始化段的段定义伪指令.bss symbol ,size in words ,blocking flag, alignment flagsymbo1 .usect “section name”, size in words ,blocking flag, alignment flag符号符号(symbo1):指向使用指向使用.bss和和.usect伪指令所保留的第一伪指令所保留的第一个数据存储单元,并与所储存的变量相对应。别的段可以个数据存储单元,并与所储存的变量相对应。别的段可以使用它,也可以使用使用它,也可以使用.global或或.def伪指令将其定义为全局符伪指令将其定义为全局符号。号。 模块标志模块标志(blocking flag):是可选择的参数。如果它的值大是可选择的参数。如果它的值大于于0,汇编器将连续保留同样大小的空间。,汇编器将连续保留同样大小的空间。 定位标志定位标志(alignment flag):是一个可选参数。如果它的值是一个可选参数。如果它的值大于大于0,这个段将从一个长字边界开始。,这个段将从一个长字边界开始。例如:例如: .bss to_flag,1 sinx: .usect “sinx”, 360 2、已初始化段的段定义伪指令、已初始化段的段定义伪指令.data value.text value.sect “section name” ,value,value是指段程序计数器的开始值,一般省略。是指段程序计数器的开始值,一般省略。例如:例如: .sect “vector”Reset B _c_int003、已命名的段定义伪指令已命名的段定义伪指令.sect 和和 .usect 4、段定义伪指令举例P158 .data coffe .word 1,2,3 .bss buffer,10 .word 4,5,6 .data iva .word 7,8,9汇编器汇编后的结果 12 000000 .data 13 000000 0001 coffe .word 1,2,3 000001 0002 000002 0003 21 000003 0004 .word 4,5,6 000004 0005 000005 0006 36 000006 .data 37 000006 0007 iva .word 7,8,9 000007 0008 000008 0009 4.5.2. 常数初始化伪指令 .bes和和.space伪指令伪指令在当前段保留确定数目的位在当前段保留确定数目的位在在.bes段中的标号指向保留位的第一个字段中的标号指向保留位的第一个字在在.space段中的标号指向保留位的最后一个字段中的标号指向保留位的最后一个字例如:例如:RES_1 .bes 20 RES_2 .space 17 .byte:把一个或多个把一个或多个8bits的值放入当前段中连续的字中的值放入当前段中连续的字中.BYTE 0B8H,23H.int和和.word把一个或多个把一个或多个16bits数存放到当前段的连续字中数存放到当前段的连续字中 .float和和 .xfloat以以IEEE格式表示的单精度(格式表示的单精度(32bits)浮点数存放在当前段浮点数存放在当前段的连续字中,高位先存。的连续字中,高位先存。.float能自动按域的边界排列能自动按域的边界排列 4.5.2. 常数初始化伪指令.long和.xlong把32bits数存放到当前段的连续字中。.long能够自动按长字边界排列,.xlong不能.string和.pstring把8bits的字符从一个或多个字符串中传送到当前段中.string类似于.byte。.pstring也是8bits宽度,但它是把两个字符打包成一个字,如果字符串没有占满最后一个字,剩下的加填零。以上伪指令是.struct/.endstruct序列的一部分时,它们不会对存储器进行初始化,只是定义各个成员的空间大小。 4.5.2. 常数初始化伪指令.field伪指令:伪指令:把一个数放入当前字的特定数目的位域中。使用.field可以把多个域打包成一个字。汇编器不会增加SPC(段程序计数器)的值直至填满一个字。 每个字都从高位填起。如果当前字所剩位数不足以满足下一数的位宽,则重起一个字。4.5.3. 段程序计数器定位指令.align 使段程序计数器SPC对准1字(16bit)到128字的边界.align的操作数必须为 之间的一个2的幂值1字边界;2长字(偶地址)边界;128页边界(缺省值)其他即为具体地址例:1 0000 4000.field 2,32 0000 4160.field 11,83 .align 24 0002 0045.string “ERT” 0003 0072 0004 00745 .align6 0080 0004.byte 44.5.4. 输出列表格式指令.drlist/.drnolist:汇编指令加入不加入列表文件fclist/.fcnolist:允许/禁止假条件块出现在列表文件中.length:用来控制列表文件的页长度.list.nolist:打开关闭列表文件。 .mlist.mnolist : 打开关闭程序中宏扩展和循环块部分的源代码出现在列表文件中。.page 在输出列表中产生新的一页。.tab 定义制表键(tab)的大小。.title 为汇编器提供一个打印在每一页顶部的标题。.width 控制列表文件的页宽度.option控制列表文件中的某些特性。 4.5.5. 引用其它文件的伪指令引用其它文件的伪指令 .copy/.include:告诉汇编器开始从其它文件中读源语句从.copy文件中读的语句会打印在列表中从.include文件中读的语句不会打印在列表中。例如: .include “tables.inc” .copy “filename.asm”.def :确认一个在当前模块中定义的且能被其它模块使用的符号.global:声明一个外部符号,使其它模块在连接时可以使用。.ref:确认一个在当前模块中使用但在其它段中定义的符号。.mlib向汇编器提供一个包含了宏定义的文档库的名称。可以包含路径,该语句可以放在需要的位置“File1.asm” .global x,y,z .global init .end“File2.asm” .def x,y,z .ref init .end4.5.6. 条件汇编指令.if/.elseif/.else/.endif告诉汇编器按照表达式值的条件汇编一块代码。告诉汇编器按照表达式值的条件汇编一块代码。.loop/.break/.endloop告诉汇编器按照表达式值的循环汇编一块代码。告诉汇编器按照表达式值的循环汇编一块代码。.loop标注一块循环代码的开始标注一块循环代码的开始.break告诉汇编当表达式为假时,继续循环汇编;告诉汇编当表达式为假时,继续循环汇编;当表达式为真时,立刻转到当表达式为真时,立刻转到.endloop后的代码。后的代码。.endloop标注一个可循环块的末尾。标注一个可循环块的末尾。4.5.7. 汇编时的符号定义伪指令使有意义的符号名与常数值或字符等相等同。使有意义的符号名与常数值或字符等相等同。.asg规定一个字符串与一个替代符号相等,替代符号可规定一个字符串与一个替代符号相等,替代符号可以重新定义以重新定义.asg AR4,FIR_DATA_P.eval计算一个表达式的值并把结果传送到与一个替代符计算一个表达式的值并把结果传送到与一个替代符号等同的字符串中号等同的字符串中例如:例如:.asg 1,X.loop.byteX,10H.break X=4.evalX+1,X.endloop4.5.7. 汇编时的符号定义伪指令(续).label定义一个专门的符号以表示当前段内装入时的地址,而不定义一个专门的符号以表示当前段内装入时的地址,而不是运行时的地址是运行时的地址 .label symbol.set/.equ把一个常数值等效成一个符号存放在符号表中,且不能被把一个常数值等效成一个符号存放在符号表中,且不能被清除清除例如:例如:BVAL.set0100H.byte BVAL ,BVAL*2,BYAL+12B BVAL.set和和.equ不产生目标代码;不产生目标代码;这两条指令是一样的这两条指令是一样的,可交换使用。可交换使用。4.5.7. 汇编时的符号定义伪指令(续).struct/.endstruct用来建立一个类似于C的结构定义.tag给类似于C的结构特性分配给一个标号。例如:TYPE.struct;定义结构定义结构X.intY.int .endstructT_LEN.tagTYPECOORD.tagTYPE ; COORD为为TYPE类型类型 addCOORD.Y,A.bssCOORD,T_LEN;实际存储器地址实际存储器地址4.5.8. 其它方面的汇编伪指令.algebraic:告诉汇编器输入文件是代数指令源代码。如果在汇编时没有使用-mg汇编选项,该指令必须出现在程序文件的第一行。.end:结束汇编。.mmregs:定义存储器映射寄存器的替代符号。.version:确定所用指令系统的DSP处理器名。.mmsg (.emsg/ .wmsg)把汇编信息(用户定义的错误/警告信息)发送到标准的输出设备中。4.6 宏语言若编译器支持,宏语言能让用户创建自己的指令。若编译器支持,宏语言能让用户创建自己的指令。在某程序多次执行一个特殊任务时相当有用。在某程序多次执行一个特殊任务时相当有用。宏语言的功能包括:宏语言的功能包括:定义自己的宏和重新定义已存在的宏;定义自己的宏和重新定义已存在的宏;简化较长的或复杂的汇编代码;简化较长的或复杂的汇编代码;访问归档器创建的宏库;访问归档器创建的宏库; 处理一个宏中的字符串;处理一个宏中的字符串; 控制宏扩展列表;控制宏扩展列表;使用宏分三个过程使用宏分三个过程定义宏调用宏和展开宏定义宏调用宏和展开宏 定义宏其格式为:其格式为:宏名宏名 .macro参数参数1,参数参数n 汇编语句或宏指令汇编语句或宏指令 .mexit .endm每次调用宏时执行的汇编语言指令或汇每次调用宏时执行的汇编语言指令或汇编伪指令。编伪指令。宏指令用来控制展开宏。宏指令用来控制展开宏。mexit的功能类似于的功能类似于goto endm语句,在编程中语句,在编程中mexit可有可无可有可无。.endm结束宏定义。结束宏定义。注意:注意:定义的宏名如果与某条指令或以前的宏定义重名,定义的宏名如果与某条指令或以前的宏定义重名,重名代替。重名代替。 为了把注释包括在宏定义中,而又不会出现在宏展开中,可以在注释前加感为了把注释包括在宏定义中,而又不会出现在宏展开中,可以在注释前加感叹号。叹号。标标号号位位置置宏定义有两种形式:宏定义有两种形式:(1)在源文件起始处或者在在源文件起始处或者在.include/.copy文件中定义。文件中定义。(2) 在宏库中定义:在宏库中定义:一个宏库是由归档器建立的,采用归档格式的文件集合。一个宏库是由归档器建立的,采用归档格式的文件集合。宏库的每一个文件都包含着一个与文件名相对应的宏定宏库的每一个文件都包含着一个与文件名相对应的宏定义。义。宏名和文件名必须是相同的,其扩展名为宏名和文件名必须是相同的,其扩展名为.asm。注意:在宏库中的文件必须是未被编译过的源文件。注意:在宏库中的文件必须是未被编译过的源文件。可以使用可以使用.mlib指令访问一个宏库。其语法为:指令访问一个宏库。其语法为:.mlib 宏库文件名宏库文件名 调用宏宏调用:定义了宏之后,就可以在源程序中通过把宏名用作操作指令来调用宏。其格式为:宏名 参数1,参数n指令位置扩展宏当源程序调用宏时,编译器会将宏展开。当源程序调用宏时,编译器会将宏展开。汇编器通过变量把用户的参数传递给宏。汇编器通过变量把用户的参数传递给宏。用宏定义来代替宏调用语句以及对源代用宏定义来代替宏调用语句以及对源代码进行汇编。码进行汇编。在缺省状态下,在缺省状态下,宏展开会在列表文件中宏展开会在列表文件中列出。可以使用列出。可以使用.mnolist指令关掉宏展指令关掉宏展开列表。开列表。 例如:三个数加法的宏定义宏调用及宏展开例如:三个数加法的宏定义宏调用及宏展开Add3 .macro P1,P2,P3,ADDRP LDP1,A ADDP2,A ADD P3,A STLA,ADDRP .endm .global abc, def, ghi, adr add3 abc, def, ghi, adr1 0000001000! LD abc, A1 0000010000! ADD def, A1 0000020000! ADD hgi, A1 0000038000! STL A, adr 宏调用宏调用宏展开宏展开宏定义宏定义例如:用宏定义及宏调用的方式实现多缓冲串口子地址寄存器的例如:用宏定义及宏调用的方式实现多缓冲串口子地址寄存器的初始化,使初始化,使SPCR10,SPCR20,RCR10,RCR20,XCR10,XCR20的的值为值为0010h。WR_SUB_REG.macro val,addr stm addr,SPSA nop stm val,SPSD nop .endm WR_SUB_REG #0010H, #SPCR10 WR_SUB_REG #0010H, #SPCR20 4.7 链接伪指令 链接链接链接器的主要作用链接器的主要作用根据链接命令或链接命令文件(根据链接命令或链接命令文件(.cmd文件),将一个文件),将一个或多个或多个COFF目标文件链接起来,生成存储器映射文件目标文件链接起来,生成存储器映射文件(.map文件)和可执行的输出文件(文件)和可执行的输出文件(.out文件)。文件)。链接器提供命令语言来控制存储器结构、输出段链接器提供命令语言来控制存储器结构、输出段的定义以及将变量和符号地址建立联系:的定义以及将变量和符号地址建立联系:MEMORY伪指令伪指令定义和产生存储器模型来构成系统存定义和产生存储器模型来构成系统存储器储器SECTIONS伪指令伪指令确定输出各段放在存储器的什么位确定输出各段放在存储器的什么位置置 MEMORY指令 用来规定目标存储器模型,可以进行各式各样的存储器配置用来规定目标存储器模型,可以进行各式各样的存储器配置MEMORY指令的一般句法如下指令的一般句法如下(MEMORY必须大写必须大写)MEMORYPAGE0:name 1(attr): orign=constant, length=constant,fill=constant;PAGE1:name n(attr): orign=constant, length=constant ,fill=constant ; PAGE: 对一个存储空间加以标记对一个存储空间加以标记每一个每一个PAGE代表一个完全独立的地址空间。代表一个完全独立的地址空间。页号页号n最多可规定最多可规定255,取决于目标存储器的配置。,取决于目标存储器的配置。通常通常PAGE0定为程序存储器,定为程序存储器,PAGE1及其他定为数据存储器。及其他定为数据存储器。如果没有规定如果没有规定PAGE,则链接器就当作则链接器就当作PAGE0。Attr:是一个任选项,为命名区规定是一个任选项,为命名区规定14个属性。个属性。如果有选项,应写在括号内。如果有选项,应写在括号内。当输出段定位到存储器时,可利用属性加以限制。当输出段定位到存储器时,可利用属性加以限制。属性选项一共有属性选项一共有4项:项:R 规定可以对存储器执行的读操作。规定可以对存储器执行的读操作。W 规定可以对存储器执行的写操作。规定可以对存储器执行的写操作。X 规定存储器可以装入可执行的程序代码。规定存储器可以装入可执行的程序代码。I 规定可以对存储器进行初始化。规定可以对存储器进行初始化。该项缺省则包含全部该项缺省则包含全部4项属性项属性。Name: 对一个存储区间取名。对一个存储区间取名。不同不同PAGE上的存储器区间可以取相同的名字,但在同一上的存储器区间可以取相同的名字,但在同一PAGE内内的名字不能相同,且不许重叠配置。的名字不能相同,且不许重叠配置。Origin: 规定一个存储区的起始地址。规定一个存储区的起始地址。Length:规定一个存储区的长度规定一个存储区的长度Fill:任选项,任选项,不常用。不常用。为没有定为输出段的存储器空单元充填一个数。为没有定为输出段的存储器空单元充填一个数。例:例:MEMORY PAGE0: ROM: origin=0C00h,length=1000h PAGE1: SCRATCH: origin=60h, length=1Fh ONCHIP: origin=80h, length=200h程序存储器程序存储器:4K字字ROM,起始地址为起始地址为0C00h,取名为取名为ROM数据存储器数据存储器:20字字RAM,起始地址为起始地址为60h, 取名为取名为SCRATCH 512字字RAM,起始地址为起始地址为80h, 取名为取名为ONCHIP SECTIONS 指令指令 SECTIONS 指令的任务如下:指令的任务如下:说明如何将输入段组合成输出段。说明如何将输入段组合成输出段。在可执行程序中定义输出段。在可执行程序中定义输出段。规定输出段在存储器中的存放位置。规定输出段在存储器中的存放位置。允许重新命名输出段。允许重新命名输出段。SECTIONS 命令的一般句法如下命令的一般句法如下(SECTIONS必须大写必须大写)SECTIONS name:property,property,property, name:property,property,property, name:property,property,property, 每一个输出段的说明都从段名开始。每一个输出段的说明都从段名开始。 段名后面是一行说明段的内容和如何给段分配存储单元的性能参数。段名后面是一行说明段的内容和如何给段分配存储单元的性能参数。一个段可能的性能参数有:一个段可能的性能参数有: Load allocationLoad allocation:定义将输出段加载到存定义将输出段加载到存储器中的什么位置。储器中的什么位置。 Run allocationRun allocation:定义输出段在存储器的什定义输出段在存储器的什么位置上开始运行么位置上开始运行 Input sectionsInput sections:定义由哪些输入段组成输定义由哪些输入段组成输出段出段 Section typeSection type:为输出段定义特殊形式的标为输出段定义特殊形式的标记记 Fill valueFill value:对未初始化空单元定义一个数对未初始化空单元定义一个数值值Load allocation定义将输出段加载到存储器中的什么位置。定义将输出段加载到存储器中的什么位置。句法:句法:load=allocation,可用大于号代替可用大于号代替“=”或者省掉或者省掉“load=”.text: load=0x1000 将输出段将输出段.text定位到一个特定的地址。定位到一个特定的地址。.text: loadROM 将输出段将输出段.text定位到命名为定位到命名为ROM的存储区的存储区.bss: load(RW) 将输出段将输出段.bss定位到属性为定位到属性为R、W的存储区的存储区.text: align=0x80 将输出段将输出段.text定位到从地址定位到从地址0x80开始开始.bss: load=block(0x80) 将输出将输出段段.bss定位到一个定位到一个n字储存器块的任何一个位置字储存器块的任何一个位置.text: PAGE0 将输出段将输出段text定位到定位到PAGE0。如果要用一个以上参数,可以将它们排成一行,例如:如果要用一个以上参数,可以将它们排成一行,例如:.text: ROM align 16 PAGE2.text: load=(ROM align (16) PAGE(2)Run allocation定义输出段在存储器的什么位置上开始运行。句法: run=allocation 或者用大于号代替等号 runallocation 加载地址和执行程序地址通常是相同的,但可以把加载地址和执行程序地址通常是相同的,但可以把程序加载区和运行区分开程序加载区和运行区分开先将程序加载到ROM,然后在RAM中以较快的速度运行用SECTIONS命令让链接器对这个段定位两次一次是设置加载地址,另一次是设置运行地址。如:fir: load=ROM,run=RAM Input sections定义由哪些输入段组成输出段。句法:input _setions大多数情况下,在SECTIONS命令中是不列出每个输入文件的输入段的段名的:SECTIONS .text:*(.text) .data:*(.data) .bss: *(.bss)链接时,链接器就将所有输入文件的链接时,链接器就将所有输入文件的.text段链接段链接成成.text输出段,等同于输出段,等同于 。(其它段也一样)。(其它段也一样)也可以用明确的文件名和段名来规定输入段:也可以用明确的文件名和段名来规定输入段:SECTIONS text: /*创建创建 .text 输出段输出段 */ f1.obj(.text) /*链接来自链接来自f1.obj的的.text 段段*/ f2.obj(sec1) /*链接来自链接来自f2.obj的的sec1 段段*/ f3.obj /*链接来自链接来自 f3.obj 的所有段的所有段 */ f4.obj(.text,sec2) /*链接来自链接来自f4.obj的的.text 段和段和sec2 段段 */ Section type为输出段定义特殊形式的标记。句法:type=COPY 或者 type=DSECT 或者 type=NOLOADFill value对未初始化空单元定义一个数值。句法: fill=value 或者 name : .=value 缺省算法缺省算法 MEMORYPAGE0: PROG: orign=0x0080, length=0xFF00;PAGE1: DATA: orign=0x0080, length= 0xFF80 ; SECTIONS.text: PAGE=0.data : PAGE=0.cinit: PAGE=0.bss: PAGE=1将所有的将所有的.text输入段,链接成一个输入段,链接成一个.text输出段,可执输出段,可执行的输出文件;行的输出文件;所有的所有的.data输入段组合成输入段组合成.data输出段。输出段。将将.text和和.data段定位到配置为段定位到配置为PAGE0上的存储器,即上的存储器,即程序存储空间。程序存储空间。所有的所有的.bss输入段则组合成一个输入段则组合成一个.bss输出段,并由链接输出段,并由链接器定位到配置为器定位到配置为PAGE1上的存储器,即数据存储空间。上的存储器,即数据存储空间。如果输入文件中包含有自定义已初始化段(如上面的如果输入文件中包含有自定义已初始化段(如上面的.cinit段),则链接器将它们定位到程序存储器,紧随段),则链接器将它们定位到程序存储器,紧随.data段后。段后。如果输入文件中包括有自定义未初始段,则链接器将它如果输入文件中包括有自定义未初始段,则链接器将它们定位到数据存储器,并紧随们定位到数据存储器,并紧随.bss段之后。段之后。 例如:MEMORYPAGE 0:VECS:origin = 0xff80, length = 0x80 PROG:origin = 0x1000,length = 0x1000PAGE 1:DATA:origin = 0x2000,length = 0x1000 STACK:origin = 0x3000,length = 0x1000SECTIONS.vectors: VECS PAGE 0.text: PROG PAGE 0.data: DATA PAGE 1.stack: STACK PAGE 1第五章DSP软件开发与设计主要内容:主要内容:TMS320C54x软件开发过程软件开发过程汇编语言编程汇编语言编程C语言编程语言编程用用C语言和汇编语言混合编程语言和汇编语言混合编程引导方式设计引导方式设计C54X的三种编程方法5.1 TMS320C54x的软件开发过程的软件开发过程 5.2 汇编语言编程汇编语言编程的开发过程:建立一个项目*.mak(或*.pjt)。用编辑器编辑一个或多个源文件,如:file1.asm、file2.asm,并添加到*.mak (或*.pjt)中。根据实际应用编辑一个命令文件 file1.cmd并添加到*.mak (或*.pjt)中。汇编链接(7)调试:软件仿真、硬件仿真可用工具:软件仿真器(Simulator)、可扩展的开发系统仿真器(XDS510)、评价模板(EVM) 例例5-1:汇编语言编程:汇编语言编程y =a1*x1+a2*x2+a3*x3+a4*x4* * *example.asm* .title example.asm .mmregsSTACK .usect STACK,10h .bss a,4 .bss x,4 .bss y,1 .def start .datatable: .word 1,2,3,4 .word 8,6,4,2 .text start: STM #0,SWWSR STM #STACK+10h,SP n STM #a,AR1 n RPT #7n MVPD table,*AR1+ n CALL SUMnend: B endnSUM: STM #a,AR3 n STM #x,AR4n RPTZ A,#3n MAC *AR3+,*AR4+,An STL A,yn RETn .end复位向量文件:vectors.asm .title “vector.asm” .ref start .sect “.vectors”reset: B start .end5.2.2 汇编语言编程编辑、汇编和链接过程汇编语言编程编辑、汇编和链接过程 编辑编辑汇编汇编链接链接调试调试固化用户程序固化用户程序调试工具:软件仿真器、硬件仿真器、评价模板调试工具:软件仿真器、硬件仿真器、评价模板1.公用目标文件格式(COFF)汇编源程序经汇编器运行后创建的目标文件汇编源程序经汇编器运行后创建的目标文件将程序划分为若干段,每段含有特定的代码和数据将程序划分为若干段,每段含有特定的代码和数据便于模块化编程便于模块化编程 COFF文件中的段文件中的段段就是一段代码或数据或是保留的空间段就是一段代码或数据或是保留的空间三个缺省段:三个缺省段:.text、.data和和.bss段段重定位重定位链接器把这些段再放到目标存储器中链接器把这些段再放到目标存储器中 段程序计数器段程序计数器SPC表示一个代码或数据段中的当前计数值表示一个代码或数据段中的当前计数值(地址地址)。 COFF文件中的符号文件中的符号 内部符号与外部符号内部符号与外部符号有关于程序中符号的信息有关于程序中符号的信息2.汇编汇编将汇编语言源程序转换成机器语言目标文件。将汇编语言源程序转换成机器语言目标文件。 运行汇编程序运行汇编程序asm500 input fileobject filelisting file-options 列表文件列表文件源程序语句的行号、段程序计数器(源程序语句的行号、段程序计数器(SPC)、用十六)、用十六进制表示的目标代码、源程序语句进制表示的目标代码、源程序语句交叉引用清单交叉引用清单清单列出了交叉引用的符号、定义和引用的位置。清单列出了交叉引用的符号、定义和引用的位置。列表文件列表文件TMS320C54x COFF Assembler Version 3.50 Wed Jul 28 14:56:34 2004Copyright (c) 1996-1999 Texas Instruments Incorporatedexample.asm PAGE 1 1 3 .mmregs 4 000000 STACK .usect STACK,10h ;allocate space for stack 5 000000 .bss a,4 ;allocate9 word for variates 6 000004 .bss x,4 7 000008 .bss y,1 8 .def start 9 000000 .data 10 000000 0001 table: .word 1,2,3,4 ;data follow. 000001 0002 000002 0003 000003 0004 11000004 0008 .word 8,6,4,2 000005 0006 000006 0004 000007 0002 12 000000 .text ;code follow. 13 000000 7728 start: STM #0,SWWSR ;adds no wait states 000001 0000 14 000002 7718 STM #STACK+10h,SP ;set stack pointer 000003 0010- 15 000004 EC07 RPT #7 ;move 8 values 16 000005 7C91 MVPD table,*AR1+ ;from program memory 000006 0000 17 ; into data memory 18 000007 F074 CALL SUM ;call SUM subrotine 000008 000B 19 000009 F073 end: B end 00000a 0009 20 00000b 7713 SUM: STM #a,AR3 ;the subrotine Implement 00000c 0000- 21 00000d 7714 STM #x,AR4 ;multiply-accumulate 00000e 0004- 22 00000f F071 RPTZ A,#3 000010 0003 23 000011 B09A MAC *AR3+,*AR4+,A 24 000012 8008- STL A,y 25 000013 FC00 RET 26 .endField 1:源程序语句的行号:源程序语句的行号Field 2:段程序计数器(:段程序计数器(SPC)Field 3:目标代码:目标代码! 未定义的外部引用。未定义的外部引用。, .text段重新定位。段重新定位。” .data段重新定位。段重新定位。+ .sect段重新定位。段重新定位。- .bss和和.usect段重新定位。段重新定位。Field 4:源程序语句:源程序语句。交叉引用清单交叉引用清单TMS320C54x COFF Assembler Version 3.50 Wed Jul 28 14:56:34 2004Copyright (c) 1996-1999 Texas Instruments Incorporatedexample.asm PAGE 2LABEL VALUE DEFN REF.TMS320C540 000001 0 .TMS320C541 000000 0 .TMS320C541A 000000 0 .TMS320C542 000000 0 .TMS320C543 000000 0 .TMS320C544 000000 0 .TMS320C545 000000 0 .TMS320C545LP 000000 0 .TMS320C546 000000 0 .TMS320C546LP 000000 0 .TMS320C548 000000 0 .TMS320C549 000000 0STACK 000000- 4 14 SUM 00000b 20 18 _far_mode 000000 0 _lflags 000000 0 _no_fret 000000 0 _stores_bug 000000 0a 000000- 5 20 end 000009 19 19 start 000000 13 8 table 000000 10 16 x 000004- 6 21 y 000008- 7 24Lable:符号:符号Value:值或者属性:值或者属性DEFN:定义语句编号。:定义语句编号。REF:引用语句行号。空位被引用:引用语句行号。空位被引用字符或字符或名称名称含义含义REF外部引用(外部引用(.DEF.DEF或或.global符符号)号)UNDF未曾定义过未曾定义过,在在.text段定义的符号段定义的符号”在在.data段定义的符号段定义的符号+在在.sect段定义的符号段定义的符号-在在.bss或或.usect段定义的符段定义的符号号3. 链接根据链接命令或链接命令文件(根据链接命令或链接命令文件(.cmd文件),将一个或多个文件),将一个或多个COFF目标文件链接起来,生成存储器映像文件(目标文件链接起来,生成存储器映像文件(.map)和可和可执行的输出文件(执行的输出文件(.out)(COFF目标模块目标模块),完成的主要工作如完成的主要工作如下:下:对目标系统的存储器进行配置对目标系统的存储器进行配置将各个段配置到目标系统的存储器;将各个段配置到目标系统的存储器;将各个符号和段进行重新定位,并给它们指定一个最终的地址;将各个符号和段进行重新定位,并给它们指定一个最终的地址;解决输入文件之间未定义的外部引用。解决输入文件之间未定义的外部引用。涉及的内容:涉及的内容:运行链接程序(或链接器)运行链接程序(或链接器)链接器选项链接器选项控制链接操作控制链接操作链接器命令文件链接器命令文件运行链接器有三种方法运行链接器有三种方法:(1)键入命令:键入命令:lnk500 然后链接器会给出其他的需要提示然后链接器会给出其他的需要提示(2)键入命令:键入命令:lnk500 a.obj b.obj -m prog.map -o prog.out可以将上述命令行中的内容写成一个链接器命令文件可以将上述命令行中的内容写成一个链接器命令文件link.cmd(扩展名扩展名为为.cmd文件名自定文件名自定)其内容如下:其内容如下:a.obj b.obj -m prog.map-o prog.out(3)链接器命令变为链接器命令变为:lnk500 link.cmd链接器对命令文件名的链接器对命令文件名的大小写敏感大小写敏感。空格和空行没有意义,但可以用作定界符空格和空行没有意义,但可以用作定界符 4.链接器命令文件:链接器命令文件包含如下内容链接器命令文件包含如下内容:输入文件名输入文件名就是要链接的目标文件和文档库文件,或者是其它的命令文就是要链接的目标文件和文档库文件,或者是其它的命令文件。(如果要调用另一个命令文件作为输入文件,此句一定件。(如果要调用另一个命令文件作为输入文件,此句一定要放在本命令文件的最后,因为链接器不能从新调用的命令要放在本命令文件的最后,因为链接器不能从新调用的命令文件返回。)文件返回。)链接器选项链接器选项既可以用在链接器命令行,也可以编在命令文件中。既可以用在链接器命令行,也可以编在命令文件中。链接伪指令链接伪指令MEMORY命令定义目标存储器的配置命令定义目标存储器的配置SECTIONS命令规定各个段放在存储器的位置。命令规定各个段放在存储器的位置。 y =a1*x1+a2*x2+a3*x3+a4 * x4由多个源文件完由多个源文件完成的编辑与链接成的编辑与链接目标存储器的配置如下:程序存储器:EPROM E000hEFFFh VES FF80HFF83H数据存储器:SPRAM 0060h007Fh DARAM 0080h017Fh例例5-5 链接命令文件链接命令文件example.cmd*原文件中包含的段:原文件中包含的段:.text .data .bss stack .vectorsvectors.objexample.obj-o example.out-m example.map-e startMEMORYPAGE 0:EPROM: org=0E000h, len=0FFFh VECS: org=0FF80h, len=04hPAGE 1:SPRAM org=0060h, len=20h DARAM org=0080h, len=100hSECTIONS .vectors : VECS PAGE 0 .text : EPROM PAGE 0 .data : EPROM PAGE 0 .bss : SPRAM PAGE 1 STACK : DARAM PAGE 1CCS5000集成开发环境编译链接主界面CCS5000集成开发环境编译链接主界面5.2.3 汇编语言程序设计举例例例1:计算:计算 ,其中,其中,xi=10,20,30,40,50,该组数据以,该组数据以.data段配置在程序存储空间;开辟段配置在程序存储空间;开辟16个地址单元的堆栈缓冲区,该个地址单元的堆栈缓冲区,该表达式的计算在子程序中完成,然后在主程序中进行调用。表达式的计算在子程序中完成,然后在主程序中进行调用。该项目包含两个源文件,一个完成表达式运算;一个完成中断失量该项目包含两个源文件,一个完成表达式运算;一个完成中断失量段的定义,只包含复位中断。段的定义,只包含复位中断。存储器模型要求:存储器模型要求:程序存储空间分为两个区间分别为:程序存储空间分为两个区间分别为:EPROM:起始地址为:起始地址为:E000H,长度:,长度:100H;VECS:起始地址为:起始地址为:FF80H,长度:,长度:4H;数据存储空间分为两个区间分别为:数据存储空间分为两个区间分别为:SPRAM:起始地址为:起始地址为:0060H,长度:,长度:20H;DARAM:起始地址为:起始地址为:0080H,长度:,长度:100H;输出段的配置:输出段的配置:.text、.data段配置到段配置到EPROM区间,区间,.vectors段配段配置在置在VECS区间;区间;.bss段配置到段配置到SPRAM区间,堆栈段配置到区间,堆栈段配置到DARAM区间。区间。链接生成存储器映像文件和最终可执行文件;链接生成存储器映像文件和最终可执行文件;程序入口地址为程序入口地址为start . title example1asm . mmregs STACK . usect “STK”,10H ;堆栈的设置 . bss x , 5 ;为变量分配个字的存储空间 . bss y , 1 . def start . datatable: . word 10,20,30,40,50 ;x1,x2,x3,x4,x5 . text start: STM #0 , SWWSR ;插入个等待状态 LD #1, DP STM # STACK+10H,SP ;设置堆栈指针 STM # x,AR1 ;AR1指向x RPT # 4 MVPD table,*AR1+ ;数据由程序空间向数据存储空间复制 CALL SUMend: B endSUM: STM # x,AR3 RPTZ A, # 4Loop: ADD *AR3+, STL A, y RET . endSUM:LD #0,A STM # x,AR3 RPT # 4Loop: ADD *AR3+, STL A, y RETSUM:LD #0,A STM # x,AR3 STM # 4,AR4Loop: ADD *AR3+, BANZ loop,*AR4- STL A, y RET复位向量文件及命令文件:命令文件命令文件:vectors . objexample1 . obj-o example1 . out-m example1. map-e startMEMORYPAGE 0: EPROM :org=0E000H len=0100HVECS: org=0FF80H len=0004HPAGE 1: SPRAM: org=0060H len=0020H DARAM: org=0080H len=0100HSECTIONStext :EPROM PAGE 0data :EPROM PAGE 0bss :SPRAM PAGE 1STK :DARAM PAGE 1vectors :VECS PAGE 0复位向量文件:复位向量文件:vectors.asm .title “vectors.asm” .ref start .sect “.vectors”reset: B start .end堆栈的使用例例2:开辟一段堆栈缓冲区,包含:开辟一段堆栈缓冲区,包含100个地址单元,将堆栈缓冲个地址单元,将堆栈缓冲区的所有单元值全部设为区的所有单元值全部设为1234H。使用。使用BANZ指令)指令) title example2asm mmregssize set 100stack usect STK,size ;堆栈的设置 def start textstart: STM # 0 SWWSR ;插入0个等待状态 STM # stack + size,SP ;设置堆栈指针 LD # 1234h,A STM #100,AR1 MVMM SP,AR7loop: STL A,*AR7 BANZ loop,*AR1 end例例3:计算:计算y=mx+b=3*15+20;其中其中3,15,20以以.data段形式段形式存在程序存储空间;该表达式的计算在子程序中完成,然后存在程序存储空间;该表达式的计算在子程序中完成,然后在主程序中进行调用。在主程序中进行调用。 title example3asm mmregsSTACK usect STACK,10H ;堆栈的设置 bss x,1 ;为变量分配4个字的存储空间 bss m,1 bss b,1 bss y,1 def start datatable : word 3,15,20 ;m,x,b textStart: STM # 0,SWWSR ;插入0个等待状态 STM # STACK + 10H,SP 设置堆栈指针 STM # x,AR1 ;AR1指向x RPT # 2 MVPD table,*AR1+ CALL SUend: B end例例3中子程序的两种编成方法:中子程序的两种编成方法:SU: LD x,T MPY m,A ADD b, A STL A, y RET endSU: LD b,A STM # m,AR2 STM #X,AR3 MAC *AR2,*AR3, A STL A, y RET end例例4:计算:计算y=x1*a1+x2*a2=3*5+15*20,其中其中3、5、15、20以以.data段形段形式存在程序存储空间。该表达式的计算在子程序中完成,然后在主程序式存在程序存储空间。该表达式的计算在子程序中完成,然后在主程序中进行调用。中进行调用。 title example4asm mmregsSTACK usect STACK,10H ;堆栈的设置 bss x1,1 ;为变量分配5个字的存储空间 bss a1,1 bss x2,1 bss a2,1 bss y,1 def start .data table : word 3,5, 4,6 ;x1,x3,x2,x4 textStart: STM # 0,SWWSR ;插入0个等待状态 STM # 0,STACK + 10H,SP ;设置堆栈指针 STM # x1,AR2 RPT # 3 MVPD table,*AR1+ CALL SUM end: B endSUM: STM #X1,AR2 STM #X2,AR3 RPTZ A, #1 MAC *AR2+,*AR3+,A STL A, y RET .endSUM: LD X1,T MPY a1,B LD X2,T MAC a2,B STL B, y RET .end例例4续:用循环寻址实现该表达式的运算:续:用循环寻址实现该表达式的运算: textStart: STM # 0,SWWSR ;插入0个等待状态 STM # 0,STACK + 10H,SP ;设置堆栈指针 STM # x1,AR2 STM #4,BK RPT # 3 MVPD table,*AR2+% CALL SUM end: B endSUM: STM #X2,AR3 RPTZ #1 MAC *AR2+,*AR3+,A STL A, y RET end命令文件:example6 . obj-o example6 . out-m example6. map-e startMEMORYPAGE 0: EPROM :org=0E000H len=0100HVECS: org=0FF80H len=0004HPAGE 1: SPRAM: org=0060H len=0020H DARAM: org=0080H len=0100HSECTIONStext :EPROM PAGE 0data :EPROM PAGE 0bss :SPRAM PAGE 1STACK :DARAM PAGE 1例例5: 对数组对数组x5中的每个元素加中的每个元素加1。 .bss x, 5 .textbegin:LD #1, 16, B STM #4,BRC ;BRC赋值为赋值为4 STM #x,AR4 RPTB next-1 ;next-1为循环结束地址为循环结束地址 ADD *AR4,16,B,A STH A,*AR4+next: LD #0, B .end 循环的嵌套(循环的嵌套(三重循环嵌套、开销)三重循环嵌套、开销)数据块传送程序数据块传送程序共有共有4种类型(种类型(10条指令):条指令): (1) 程序存储器程序存储器数据存储器数据存储器(MVPD,MVDP)。 (2) 数据存储器数据存储器数据存储器数据存储器(MVDK,MVKD,MVDD)。(3) 数据存储器数据存储器MMR(MVMD、MVDM,MVMM)(4) 程序存储器程序存储器(由由ACC寻址寻址)数据存储器数据存储器(READA,WRITA)这些指令的特点如下:这些指令的特点如下:传送速度比加载和存储指令要快;传送速度比加载和存储指令要快;传送数据不需要累加器;传送数据不需要累加器;可以寻址程序存储空间;可以寻址程序存储空间;与与RPT相结合时,都变成单周期指令,可以实现数据块传送。相结合时,都变成单周期指令,可以实现数据块传送。 例例6: 编写一段程序,首先对数组编写一段程序,首先对数组x20赋值,再将数据存储赋值,再将数据存储器中的数组器中的数组x20复制到数组复制到数组y20。 .title“example6.asm” .mmregs STACK .usect “STACK”, 30h .bss x, 20 .bss y, 20 .data table: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 .defstart .textStart: STM #x, AR1 RPT #19 MVPD table, *AR1+; 程序存储器传送到数据存储器程序存储器传送到数据存储器 STM #x, AR2 STM #y, AR3 RPT #19 MVDD *AR2+, *AR3+ ; 数据存储器传送到数据存储器数据存储器传送到数据存储器end: Bend .end链接命令链接命令vectors.obj example6.obj -o example6.out -m example6.map -e startMEMORY PAGE 0: EPROM: org=0E000h, len=01F80h VECS : org=0FF80h, len=00080h PAGE 1:SPRAM : org=00060h , len=00030h DARAM : org=00090h , len=01380hSECTIONS .vectors :VECSPAGE 0 .text :EPROMPAGE 0 .data :EPROMPAGE 0 .bss :SPRAMPAGE 1 STACK: DARAMPAGE 1运行结果算术运算类程序算术运算类程序浮点运算浮点运算单字运算(单字运算(16位)位)小数运算小数运算长字算(长字算(32位)位)双操作数乘法双操作数乘法浮点运算浮点运算1) 浮点数的表示方法浮点数的表示方法 浮点数由尾数和指数两部分组成浮点数由尾数和指数两部分组成. 浮点数浮点数=尾数尾数2(指数指数) 浮点数的尾数和指数可正可负,均用补码表示。浮点数的尾数和指数可正可负,均用补码表示。 指数的范围从指数的范围从831。例如,定点数例如,定点数0x2000(0.25)用浮点数表示时,用浮点数表示时, 尾数为尾数为0x4000(0.5),指数为,指数为1,即即 0.25=0.5212) 定点数转换为浮点数(定点数转换为浮点数(3条指令)条指令) EXP src功能:功能:提取指数。计算提取指数。计算src的指数值并存放于的指数值并存放于T寄存器中。寄存器中。 指数值通过计算指数值通过计算src的冗余符号位数并减的冗余符号位数并减8得到,冗余得到,冗余符号位数等于去掉符号位数等于去掉40位位src中除符号位以外的有效位所需中除符号位以外的有效位所需左移的位数。累加器左移的位数。累加器src中的内容不变。指数的数值范围中的内容不变。指数的数值范围是是831。例如:例如: EXP A ST T,EXPONENT 将保存在将保存在T寄存器中的指数存放到数据存储器的指定单元中。寄存器中的指数存放到数据存储器的指定单元中。 NORM src ,dst 将将src中有符号数左移中有符号数左移TS位,结果存放在位,结果存放在dst中。中。 该指令常与该指令常与EXP指令结合使用,完成归一化处理。指令结合使用,完成归一化处理。 例如:例如: NORM A3) 浮点数转换为定点数:浮点数转换为定点数: 按指数值将尾数右移按指数值将尾数右移(指数为负时是左移指数为负时是左移,为正时右移为正时右移) 使用使用NORM指令实现指令实现浮点数转换为定点数浮点数转换为定点数,而,而NORM指令是指令是T寄存器值为正寄存器值为正左移;因此实现浮点数转换为定点数之前先将指数值变号。左移;因此实现浮点数转换为定点数之前先将指数值变号。例例7: 编写浮点乘法程序,完成编写浮点乘法程序,完成x1x20.3(0.8)的运算。要求包括将定点数转换成浮点数、浮点乘的运算。要求包括将定点数转换成浮点数、浮点乘法,最后再将浮点数转换成定点数。法,最后再将浮点数转换成定点数。X1*X2=(尾数(尾数1 2(指数指数1) )(尾数(尾数2 2(指数指数2))=(尾数(尾数1 尾数尾数2) 2(指数(指数1) +(指数指数2)) 程序中保留程序中保留10个数据存储单元:个数据存储单元:x1(被乘数被乘数) el(被乘数的指数被乘数的指数) m1(被乘数的尾数被乘数的尾数)x2(乘数乘数) e2(乘数的指数乘数的指数) m2(乘数的尾数乘数的尾数)product(乘积乘积) ep(乘积的指数乘积的指数) mp(乘积的尾数乘积的尾数)temp(暂存单元暂存单元) .title“example7.asm” .defstartSTACK: .usect “STACK”,100 .bssx1,1 .bssx2,1 .bssel,1 .bssm1,1 .bsse2,1 .bssm2,1 .bssep,1 .bssmp,1 .bssproduct,1 .bsstemp,1 .datatable:.word 3*3276810 .wotd -8*3276810 .textStart:STM#STACK+100,SP;设置堆栈指针SP MVPD table,x1 ;将x1和x2传送至数据存储器 MVPD table+1,x2 LD x1,16,A ;将;将xl规格化为浮点数(先移到最高有效位再取指数)规格化为浮点数(先移到最高有效位再取指数) EXP A ST T,el ;保存x1的指数 NORM A STH A,ml ;保存x1的尾数 LD x2,16,A ;将x2规格化为浮点数 EXP A ST T,e2 ;保存x2的指数 NORM A STH A,m2 ;保存x2的尾数 CALL MULT ;调用浮点乘法子程序done:B doneMULT:SSBX FRCT SSBX SXM LD e1,A ;指数相加 ADD e2,A STL A,ep ;乘积指数ep LD ml,T ;尾数相乘 MPY m2,A ;乘积尾数存放在累加器A中 EXP A ;对尾数乘积规格化 ST T,temp ;规格化时产生的指数temp NORM A STH A,mp ;保存乘积尾数mp LD temp,A ;修正乘积指数 ADD ep,A ;(ep)+(temp)A STL A,ep ;保存乘积指数ep;将浮点乘积转换成定点数 NEG A ;乘积指数反号, STL A,temp ;并加载到T寄存器 LD temp,T LD mp,16,A ;再将尾数按T移位 NORM A STH A,product ;保存定点乘积 RET .end最后得到0.3(0.8)乘积浮点数为:尾数0x8520; 指数0x0002。乘积的定点数为0xEl48,对应的十进制数等于0.23999。5.3 C语言编程C54x DSP C优化编译器 分析器(parser)中间文件优化器(optimizer)高级版本的文件代码产生器(code generator) 汇编语言源文件 内部列表公用程序(inter list utility)扩展的汇编源文件汇编器(assembler) COFF目标文件 链接器(linker)可执行的目标文件 C优化编译器操作分步操作:用命令的方式实现集成环境:在CCS中设置Parser 分析器Optimizer 优化器Code Gen代码产生器Assembly汇编源文件选项 5.3.2 C语言编程链接命令文件的设计 C程序的开发过程:建立一个项目*.mak或*.pjt。用编辑器编辑一个或多个C程序源文件,如:file1.c、file2.c添加到*.mak或*.pjt中。对C程序进行编译形成汇编语言源文件file1.asm、file2.asm。根据实际应用编辑一个命令文件, file1.cmd添加到项目中。汇编-链接 如何编写.cmd文件 C编译器生成的段 :生成七个可以重定位的代码和数据段(已初始化段和未初始化段)。已初始化段:有四个,包含数据和可执行代码.text段:包括可执行代码、字符串和常量。.cinit段:包括初始化常量和常数表。.const段:字符串常量和以const关键字定义的常量。.switch段:用于开关(switch)语句的数据表。通常.text、.cinit和.switch段可以链接到程序存储空间(page0)的ROM或RAM中去。.const段可以链接到系统ROM或RAM中去,但必须放在数据存储器(page 1) 未初始化段:有三个段,用于保留存储空间(通常为RAM)三个段链接数据存储器(page 1)系统RAM中.bss段:保留全局和静态变量空间。在程序开始运行时,C的引导(boot)程序将数据从cinit段拷贝到.bss段。.Stack段:为C的系统堆栈分配存储空间,用于传递变量。.Sysmem段:为动态存储器函数malloc,calloc,realloc分配存储器空间,若C程序未用到这些函数,则C编译器不产生该段。 .stack 与.sysmem段的空间大小定义:.stack 与.sysmem段的大小由链接器决定。命令文件(*.CMD)中定义格式:-stack 数值-heap 数值缺省为1K字例例5-7 独立C/C+编程命令文件 -c-m file.map-o file.outmain.objfile1.objfile2.obj-l rts.lib-stack 100h-heep 100hMEMORYPAGE0:PROG:origin80h,1ength0EFDOhn PAGE 1:DATA:origin80h, 1ength03F80hnSECTIONSnn.text PROG PAGE 0n .cinit PROG PAGE 0n .switch PROG PAGE 0n .bss DATA PAGE 1n .const DATA PAGE 1n .sysmem DATA PAGE 1n .stack DATA PAGE 1n5.4 用C语言和汇编语言混合编程 用用C语言开发语言开发DSP程序不仅使程序不仅使DSP开发的速度大开发的速度大大加快,而且开发出来的大加快,而且开发出来的DSP程序可读性和可移程序可读性和可移植性都大大增强,程序修改也极为方便。植性都大大增强,程序修改也极为方便。 一般情况下,一般情况下,C代码的效率无法与手工编写的汇代码的效率无法与手工编写的汇编代码的效率相比编代码的效率相比如如FFT程序:即使是最佳的程序:即使是最佳的C编译器,也无法在任何情编译器,也无法在任何情况下都能最佳地利用况下都能最佳地利用DSP芯片所提供的各种资源,如芯片所提供的各种资源,如循环寻址、用于循环寻址、用于FFT的位倒序寻址等的位倒序寻址等只要进入中断程序(不管程序中是否用到),中断程只要进入中断程序(不管程序中是否用到),中断程序就会对寄存器进行保护,从而降低中断程序的效率。序就会对寄存器进行保护,从而降低中断程序的效率。解决方法:用解决方法:用C语言和汇编语言的混合编程语言和汇编语言的混合编程用C语言和汇编语言的混合编程方法主要有3种:独立编写独立编写C程序和汇编程序,分开编译或汇编程序和汇编程序,分开编译或汇编形成各自的目标代码模块,然后用链接器将形成各自的目标代码模块,然后用链接器将C模模块和汇编模块链接起来。块和汇编模块链接起来。例如,例如,FFT程序一般采用汇编语言编写,对程序一般采用汇编语言编写,对FFT程序用汇编器进行汇编形成目标代码模块,程序用汇编器进行汇编形成目标代码模块,与与C模块链接就可以在模块链接就可以在C程序中调用程序中调用FFT程序。程序。直接在直接在C程序的相应位置嵌入汇编语句。程序的相应位置嵌入汇编语句。对对C程序进行编译生成相应的汇编程序,然后程序进行编译生成相应的汇编程序,然后对汇编程序进行手工优化和修改。对汇编程序进行手工优化和修改。独立的C模块和汇编模块接口规则必须遵守定点必须遵守定点C编译器所定义的函数调用规则和寄存器使编译器所定义的函数调用规则和寄存器使用规则。用规则。不破坏不破坏C模块的运行环境。模块的运行环境。C模块和汇编模块可以相互访问各自定义的函数或变量。模块和汇编模块可以相互访问各自定义的函数或变量。不论是用不论是用C语言编写的函数还是用汇编语言编写的函数,语言编写的函数还是用汇编语言编写的函数,都必须遵循寄存器使用和函数调用规则。都必须遵循寄存器使用和函数调用规则。必须保护正在运行的函数要用到的几个特定寄存器必须保护正在运行的函数要用到的几个特定寄存器包括:包括:AR1,AR6,AR7和和SP。其中,如果其中,如果SP正常使用的话,则不必明确加以保护,正常使用的话,则不必明确加以保护, 中断程序必须保护所有用到的寄存器。中断程序必须保护所有用到的寄存器。接口规则从汇编程序调用从汇编程序调用C函数时,以逆序方式将参数函数时,以逆序方式将参数压入堆栈,第一个参数被放入累加器中。压入堆栈,第一个参数被放入累加器中。最高地址(堆栈最深处)存放最右面的变量最高地址(堆栈最深处)存放最右面的变量调用调用C函数时只保护了几个特定的寄存器,而函数时只保护了几个特定的寄存器,而其它寄存器其它寄存器C函数是可以自由使用的。函数是可以自由使用的。长整型和浮点数在存储器中存放的顺序是低位长整型和浮点数在存储器中存放的顺序是低位字在低地址,高位字在高地址。字在低地址,高位字在高地址。如果函数有返回值,则返回值存放在累加器如果函数有返回值,则返回值存放在累加器ACC中。结构或指针也是同样。中。结构或指针也是同样。对于结构或指针累加器中是存储块的地址对于结构或指针累加器中是存储块的地址汇编模块不能改变由汇编模块不能改变由C模块产生的模块产生的.cinit块,块,如果改变其内容则会引起不可预测的后果。如果改变其内容则会引起不可预测的后果。在在boot.asm启动子程序中,已假设启动子程序中,已假设.cinit段由完整的段由完整的初始化表达式构成。初始化表达式构成。所有在所有在DSP C中定义的变量、数组等标示符,在中定义的变量、数组等标示符,在汇编程序引用时,都要在标示符的前面加下划线汇编程序引用时,都要在标示符的前面加下划线“_”。任何在汇编程序中定义的对象或函数,如果需任何在汇编程序中定义的对象或函数,如果需要在要在C程序中访问或调用,则必须用汇编指令程序中访问或调用,则必须用汇编指令.global或或.def定义。同样,如果在定义。同样,如果在C程序中定义程序中定义的对象或函数需要在汇编程序中访问或调用,在的对象或函数需要在汇编程序中访问或调用,在汇编程序中也必须用汇编程序中也必须用.global指令定义。指令定义。由于由于C编译器使编译器使CPL=1,寻址直接地址数,寻址直接地址数据单元的方法只能采用间接绝对寻址模式据单元的方法只能采用间接绝对寻址模式例如,汇编程序将例如,汇编程序将C中定义的全局变量中定义的全局变量global_var的值放入累加器,可写为如下形式的值放入累加器,可写为如下形式LD *(global_var), A;由于编译器编译时由于编译器编译时CPL=1,因此如果在汇编函,因此如果在汇编函数中设置数中设置CPL=0,那么在汇编程序返回前必须,那么在汇编程序返回前必须将其重新设置为将其重新设置为1。例5-8 在 C程序中调用汇编程序C程序如下:程序如下:extern int asmfunc(); /*定义外部汇编函数定义外部汇编函数*/int gvar; /*定义全局变量定义全局变量*/main() int i;i=asmfunc(i); /*调用函数调用函数*/汇编程序如下:汇编程序如下:_asmfunc:ADD *(_gvar),A ; A+D(gvar)-A; 参数参数i在调用时被传递到在调用时被传递到 STL A,*(_gvar) ;返回值在返回值在A中中 RETD ;返回返回在C程序中访问汇编程序变量变量或常数定义的方式变量或常数定义的方式变量在变量在.bss或或.usect段中定义;段中定义;变量不在变量不在.bss或或.usect段中定义;段中定义;常数。常数。访问访问.bss或或.usect伪指令定义变量的方法:伪指令定义变量的方法:采用采用.bss或或.usect伪指令定义变量;伪指令定义变量;用用.global伪指令定义为外部变量;伪指令定义为外部变量;在变量名前加一下划线在变量名前加一下划线“_”;在在C程序中将变量说明为外部变量。程序中将变量说明为外部变量。例例5-9 C程序中访问程序中访问.bss定义的汇编变量定义的汇编变量汇编程序如下:汇编程序如下: .bss _var, 1 ;定义变量定义变量 .global _var ;说明为外部变量说明为外部变量C程序如下:程序如下: extern int var ; /*外部变量外部变量*/ var=1; /*访问变量访问变量*/C程序中访问不在程序中访问不在.bss或或.usect段中定义的变量段中定义的变量不在不在.bss或或.usect段中定义的变量段中定义的变量在汇编程序中定义的常数表在汇编程序中定义的常数表方法:定义一个指向该变量的指针,然后在方法:定义一个指向该变量的指针,然后在C程程序中间接访问这个变量。序中间接访问这个变量。在汇编程序中定义常数表时,可以为这个表定义一个在汇编程序中定义常数表时,可以为这个表定义一个独立的段,也可以在现有的段中定义。独立的段,也可以在现有的段中定义。之后,说明指向该表起始的全局标号。之后,说明指向该表起始的全局标号。如果定义为独立段,则可以在链接时将它分配至任意如果定义为独立段,则可以在链接时将它分配至任意可用的存储空间中。可用的存储空间中。在在C程序中访问该表时,必须另外说明一个指向该表的程序中访问该表时,必须另外说明一个指向该表的指针,如例指针,如例5-10所示。所示。 例5-10 在C程序中访问汇编常数表汇编程序如下:汇编程序如下: .global _sine ;定义外部变量定义外部变量 .sect sine_tab ;定义一个独立块定义一个独立块_sine: ;常数表起始地址常数表起始地址 .word 0 .word 50 .word 100 .word 200C程序如下:程序如下:extern int sine ; /*定义外部变量定义外部变量*/int *sine_pointer=sine; /*定义一个定义一个C指针指针*/f=sine_pointer2; /*访问访问sine_pointer*/在C程序中访问全局常数全局常数:在汇编程序中用全局常数:在汇编程序中用.set和和.global或或.def定定义义方法:方法:在在C程序中访问汇编程序中的常数不能直接用常数程序中访问汇编程序中的常数不能直接用常数的符号名,而应在常数名之前加一个地址操作符的符号名,而应在常数名之前加一个地址操作符“&”。如在汇编程序中的常数名为。如在汇编程序中的常数名为_x,则在,则在C程程序中的值应为序中的值应为&x。例5-11 在C程序中访问汇编常数汇编程序如下:_table_size .set 10000 ;常数定义 .global _table_size ;定义为全局C程序如下:extern int table_size;#define TABLE_SIZE (int)(&table_size) for(i=0;iTABLE_SIZE;+i)在汇编程序中访问C程序变量C程序如下:int i,j;main()汇编程序如下: .global _i; /*定义i为全局变量*/ .global _j; /*定义j为全局变量*/ LD *(_i),A STL A,*(_j)访问在C程序中定义的全局数组C程序如下:程序如下:int speech_in160,speech_out160;main()汇编程序如下:汇编程序如下:.global _speech_in;定义;定义_speech_in 为全局变为全局变量量.global _speech_out;定义;定义_speech_out为全局为全局变量变量 .text LD#_speech_in,B STLM B,AR2 ;*AR2=数组数组speech_in 的起始地址的起始地址LD#_speech_out,A ;*AR3=数组数组speech_out的起始地址的起始地址 STLM A,AR3 LD #160-1,A STLM A,BRCNOP RPTB exchange-1 MVDD *AR2+,*AR3+ ;* for(i=0;i160;i+)speech_outi=speech_ini;exchange:在C程序中直接嵌入汇编语句优点:优点:可以在可以在C程序中实现用程序中实现用C语言难以实现的一些硬件控制功能,如修语言难以实现的一些硬件控制功能,如修改中断控制寄存器、中断使能、读取状态寄存器和中断标志寄存改中断控制寄存器、中断使能、读取状态寄存器和中断标志寄存器等。器等。在在C程序中的关键部分用汇编语句代替程序中的关键部分用汇编语句代替C语句以优化程序语句以优化程序 缺点缺点是容易破坏是容易破坏C环境,因为环境,因为C编译器在编译嵌入了汇编语句的编译器在编译嵌入了汇编语句的C程序程序时并不检查或分析所嵌入的汇编语句。时并不检查或分析所嵌入的汇编语句。对程序进行编译时不能使用优化功能对程序进行编译时不能使用优化功能方法方法只需在汇编语句的左、右加上双引号,汇编语句与双引号间加空只需在汇编语句的左、右加上双引号,汇编语句与双引号间加空格,用小括弧将汇编语句括住,在括弧前加上格,用小括弧将汇编语句括住,在括弧前加上asm标识符即可标识符即可 在C程序中直接嵌入汇编语句asm(“ RSBX INTM ”); /*开中断开中断*/asm(“ SSBX XF ”); /*置置XF为高电平为高电平*/asm(“ NOP ”); asm(“ RSBX OVM”); /*设置溢出保护模式设置溢出保护模式*/asm(“ SSBX SXM”); /*设置符号扩展模式设置符号扩展模式*/asm(“ SSBX CPL ”); /*设置编译模式设置编译模式CPL=1*/在C程序中直接嵌入汇编语句int add_sub(int,int);main() int i,k; int a,b3,result; a=1; for(i=0;i3i+) bi=i+1; result=add_sub(a,b);add_sub(int a,int b )int i;int sum;asm( LD *AR5,B);asm( STLM B,*AR1 ); /*AR1=&b*/asm( STL A,*AR2); /*sum=a,a传递到累加器中传递到累加器中*/asm( RPT #2 );asm( ADD *AR1+,A);asm( STL A,*AR2);return(sum);5.6 TMS320C54x的引导方式及设计的引导方式及设计 在在CCS开发环境下,开发环境下,PC机通过不同类型的机通过不同类型的JTAG电缆与用户目标系统中的电缆与用户目标系统中的DSP通信,帮助用户完通信,帮助用户完成调试工作。成调试工作。 Bootloader技术技术:当用户在:当用户在CCS环境下完成开环境下完成开发任务,编写完成用户软件之后,需要脱离依赖发任务,编写完成用户软件之后,需要脱离依赖PC机的机的CCS环境,并要求目标系统上电后可自行环境,并要求目标系统上电后可自行启动并执行用户软件代码,这就需要用到启动并执行用户软件代码,这就需要用到Bootloader技术。技术。同时同时Bootloader也指由也指由TI在生产芯片时预先烧制在生产芯片时预先烧制在在TMS320VC5402片内片内ROM中,完成该功能段中,完成该功能段的一般代码名称。的一般代码名称。1. Bootloader技术技术 C5402是是RAM型器件,掉电后不能保持任型器件,掉电后不能保持任何用户信息,所以需要用户把执行代码存放在外何用户信息,所以需要用户把执行代码存放在外部的非易失存储器内,在系统上电时,通过部的非易失存储器内,在系统上电时,通过Bootloader将存储在外部媒介中的代码搬移到将存储在外部媒介中的代码搬移到C5402高速的片内存储器或系统中的扩展存储器高速的片内存储器或系统中的扩展存储器内,搬移成功后自动去执行代码,完成自启动过内,搬移成功后自动去执行代码,完成自启动过程。程。 Bootloader技术提供很多种不同的启动技术提供很多种不同的启动模式,包括并行模式,包括并行8bit/16bit的总线型启动、串口型的总线型启动、串口型启动和启动和HPI口启动等模式,兼容多种不同系统需求。口启动等模式,兼容多种不同系统需求。2. C5402的启动模式:的启动模式: (1)HPI启动模式启动模式:由外部处理器:由外部处理器(即主机即主机)将执行代码通将执行代码通过过C5402的的HPI口搬移到口搬移到C5402片内片内RAM。当主机搬移完。当主机搬移完所有程序代码后,还要将程序入口地址写入所有程序代码后,还要将程序入口地址写入C5402数据空数据空间间007Fh内。这样,内。这样,C5402一旦检测到一旦检测到007Fh处不再为处不再为0值,即判断为代码转移完毕,并跳转到值,即判断为代码转移完毕,并跳转到007Fh里存放的地里存放的地址去执行,从而完成启动。址去执行,从而完成启动。 (2)8bit/16bit并行启动模式并行启动模式:在这种模式下,:在这种模式下,C5402通过其数据和地址总线从数据空间读取自举启动表通过其数据和地址总线从数据空间读取自举启动表(Boot Table)。自举启动表内容包括:需要搬移的代码段,每个。自举启动表内容包括:需要搬移的代码段,每个段的目的地址,代码长度、程序入口地址和其他配置信息。段的目的地址,代码长度、程序入口地址和其他配置信息。C5402的启动模式(续)的启动模式(续): (3)8bit/16bit标准串口启动模式标准串口启动模式:在这种模式下,:在这种模式下,C5402通过工作在标准模式的多通道缓冲串口通过工作在标准模式的多通道缓冲串口(McBSP)接接收自举启动表,并根据自举启动表中的信息装载代码。收自举启动表,并根据自举启动表中的信息装载代码。McBSP0支持支持8bit模式,模式,MCBSP1支持支持16bit模式。模式。 (4)8bit串行串行EEPROM启动模式启动模式:在这种模式下,:在这种模式下,C5402通过工作在通过工作在SPI模式的模式的McBSP1接收来自外部串行接收来自外部串行的的EEPROM中的自举启动表,并根据自举启动表中的信中的自举启动表,并根据自举启动表中的信息装载代码。息装载代码。 (5)8bit/16bitI/O启动模式启动模式:在这种模式下,:在这种模式下,C5402使用使用XF和和BIO引脚,与外部设备达成异步握手协议,从地引脚,与外部设备达成异步握手协议,从地址址0h处的处的I/O端口读取自举启动表。端口读取自举启动表。3. C5402启动模式检测的顺序:启动模式检测的顺序: (1) HPI启动模式(第一次检测):通过检测启动模式(第一次检测):通过检测INT2引脚引脚是否有中断发生来判断是否进入是否有中断发生来判断是否进入HPI启动模式。启动模式。 (2) 串行串行EEPROM启动模式。启动模式。 (3) 并行启动模式。并行启动模式。 (4) 通过通过McBSP1的标准的标准(8bit)串口启动。串口启动。 (5) 通过通过McBSP0的标准的标准(16bit)串口启动。串口启动。 (6) I/O启动模式。启动模式。 (7) HPI启动模式第二次检测:通过检测数据空间启动模式第二次检测:通过检测数据空间007Fh是否为非是否为非0值来决定程序入口点。值来决定程序入口点。 注意:注意:注意:注意:当当Bootloader检测完所有可能的启动模式后,而没检测完所有可能的启动模式后,而没有发现一种有效的启动模式,则有发现一种有效的启动模式,则Bootloader仅会从标准串仅会从标准串口启动模式开始重新检测启动模式。口启动模式开始重新检测启动模式。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号