




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第第7章章 汇编语言程序设计汇编语言程序设计n7.1 程序流程控制程序流程控制n7.2 数据块传送数据块传送n7.3 定点数的基本算术运算定点数的基本算术运算n7.4 长字运算和并行运算长字运算和并行运算n7.5 FIR滤波器的滤波器的DSP实现实现n7.6 IIR数字滤波器的数字滤波器的DSP实现实现n7.7 FFT运算的运算的DSP实现实现27.1 程序流程控制程序流程控制n7.1.1 程序存储器地址生成程序存储器地址生成n7.1.2 条件操作条件操作n7.1.3 分支转移分支转移n7.1.4 调用与返回调用与返回n7.1.5 重复操作重复操作n7.1.6 TMS320C54x中断系统中
2、断系统n7.1.7 堆栈的使用堆栈的使用返回首页37.1.1 程序存储器地址生成程序存储器地址生成 程序存储器程序存储器中存放指令代码、参数表中存放指令代码、参数表和立即数。和立即数。程序地址产生逻辑程序地址产生逻辑(PAGEN),),为寻址存放在程序存储器为寻址存放在程序存储器中的指令代码、参数表、中的指令代码、参数表、16位立即数或位立即数或其它信息产生的地址,并加到其它信息产生的地址,并加到PAB上。上。 包括包括5个寄存器:个寄存器:n程序计数器(程序计数器(PC););n重复计数器(重复计数器(RC););n块重复计数器(块重复计数器(BRC););n块重复起始地址寄存器(块重复起始
3、地址寄存器(RSA););n块重复结束地址寄存器(块重复结束地址寄存器(REA)。)。图图7-1 程序地址产生逻程序地址产生逻辑(辑(PAGEN)寄存器寄存器4n扩展程序计数器(扩展程序计数器(XPC)用于寻址扩展程序存)用于寻址扩展程序存储器储器nC54x程序地址总线程序地址总线(PAB)可寻址空间可寻址空间64KnC548,C549还有还有7根地址线可寻址根地址线可寻址128(27)64K=8M 字的程序空间字的程序空间nC5402还有还有4根地址线可寻址根地址线可寻址16(24)64K=1M字字的程序空间的程序空间5返回本节n程序计数器(程序计数器(PC)是一个是一个16位的寄存器,存放
4、即位的寄存器,存放即将取指的某条指令、立即数或系数表在程序存储器将取指的某条指令、立即数或系数表在程序存储器中的地址。中的地址。nC54x通过把通过把PC值放到值放到PAB上,从程序存储器中取上,从程序存储器中取指,指,PC值自动增加,指向下一条指令的地址。如值自动增加,指向下一条指令的地址。如果出现跳转指令,则装入具体新地址。果出现跳转指令,则装入具体新地址。67.1.2 条件操作条件操作7表7-1 条件指令中的各种条件条 件 算 符操作符号条 件说 明操作符号条 件说 明AEQA=0累加器A等于0 AOVAOV=1 累加器A溢出 BEQB=0累加器B等于0 BOVBOV=1 累加器B溢出
5、ANEQA 0累加器A不等于0 ANOVAOV=0 累加器A不溢出 BNEQB 0累加器B不等于0 BNOVBOV=0 累加器B不溢出 ALTA0累加器A小于0 CC=1ALU进位位置1 BLTB0累加器A大于0 BIOBIO低BIO信号电平为低 BGTB0累加器B大于0 NBIOBIO高BIO信号电平为高 AGEQA 0累加器A大于等于0 UNC无无条件操作 BGEQB 0累加器B大于等于0 8表7-2 多条件指令中的条件组合第1组第2组A类B类A类B类C类 EQ NEQ LEQ GEQ LT GTOVNOVTCNTCCNCBIONBIO9表7-2 多条件指令中的条件组合第1组第2组A类B类
6、A类B类C类 EQ NEQ LEQ GEQ LT GTOVNOVTCNTCCNCBIONBIO10表7-2 多条件指令中的条件组合第1组第2组A类B类A类B类C类 EQ NEQ LEQ GEQ LT GTOVNOVTCNTCCNCBIONBIO11表7-2 多条件指令中的条件组合第1组第2组A类B类A类B类C类 EQ NEQ LEQ GEQ LT GTOVNOVTCNTCCNCBIONBIO1213返回本节147.1.3 分支转移分支转移n分支转移指令打断了程序执行的次序,转移到程序分支转移指令打断了程序执行的次序,转移到程序存储器的另外一个位置去执行,存储器的另外一个位置去执行,n分支转移影
7、响程序地址产生的存储在分支转移影响程序地址产生的存储在PCPC中的值。中的值。n包括条件分支转移包括条件分支转移n无条件分支转移,延迟和非延迟。无条件分支转移,延迟和非延迟。15表7-3 无条件分支转移指令指令指令说明说明周期数周期数(非延迟(非延迟/延迟)延迟)BD用指令中给出的地址加载用指令中给出的地址加载PC4/2BACCD用指定累加器(用指定累加器(A或或B)的低的低16位作位作为地址加载为地址加载PC6/4n非延迟分支转移:在指令流水线中先清除分支指令后面已读非延迟分支转移:在指令流水线中先清除分支指令后面已读入的两指令,后再进行分支转移入的两指令,后再进行分支转移n延迟分支转移:在
8、分支指令后面已读入的两指令先执行,再延迟分支转移:在分支指令后面已读入的两指令先执行,再进行分支转移(不能是跳转子类的指令)进行分支转移(不能是跳转子类的指令)16表7-4 条件分支转移指令指令指令说明说明周期数(条件满周期数(条件满足足/不满足)不满足)非延迟非延迟延迟延迟BCD如果指令中的条件满足,就用指令中给如果指令中的条件满足,就用指令中给出的地址加载出的地址加载PC5/33/3BANZD如果所选择的辅助寄存器不等于如果所选择的辅助寄存器不等于0,就,就用指令中给出的地址加载用指令中给出的地址加载PC(用于循环)用于循环)4/22/2n非延迟分支转移:条件满足,清除分支指令后面已读入的
9、两非延迟分支转移:条件满足,清除分支指令后面已读入的两指令,后从目的地址开始执行;不满足,执行指令,不转移指令,后从目的地址开始执行;不满足,执行指令,不转移n延迟分支转移:已读入的两指令先执行,再进行分支转移延迟分支转移:已读入的两指令先执行,再进行分支转移17表7-5 远分支转移指令指令指令说明说明周期数周期数(非延迟(非延迟/延迟)延迟)FBD可以转移到由指令所给定的可以转移到由指令所给定的23位地址(位地址(C5402为为20位地址)位地址)4/2FBACCD可以转移到指定累加器所给定的可以转移到指定累加器所给定的23位地址位地址(C5402为为20位地址)位地址)6/4n使程序分支转
10、移到扩展程序存储器使程序分支转移到扩展程序存储器18例例2XC1,TC ;TC=1执行执行CC,TC=0执执行行BCCCsub, BNEQ ;B 0,调用调用sub,B=0继续继续BCnew, AGT, AOV ;A0且溢出且溢出(“与与”的关系的关系), 转转new,否则继续否则继续若例若例2中两个条件相中两个条件相“或或”怎么办?怎么办?分写成两条指令:分写成两条指令:BC new, AGTBC new, AOV1920 101 iixy计算2122返回本节237.1.4 调用与返回调用与返回n调用函数或子程序时,调用函数或子程序时,DSPDSP中断当前程序的执行,中断当前程序的执行,PC
11、PC装入给定的程序存储器地址,并从这个地址开始装入给定的程序存储器地址,并从这个地址开始执行。执行。nPCPC装入新值之前,调用指令的下一条指令地址被压装入新值之前,调用指令的下一条指令地址被压入堆栈。入堆栈。n子程序或函数必须以返回指令结束,以便执行到返子程序或函数必须以返回指令结束,以便执行到返回指令时,将先前压入堆栈的地址弹出再装入回指令时,将先前压入堆栈的地址弹出再装入PCPC,使程序从调用指令的下一条指令继续执行。使程序从调用指令的下一条指令继续执行。n有条件调用和返回、无条件调用和返回,延迟和非有条件调用和返回、无条件调用和返回,延迟和非延迟延迟24表7-6 无条件调用与返回指令2
12、5表7-7 条件调用与返回指令n条件返回指令条件返回指令RCRC使函数或中断服务程序使函数或中断服务程序ISRISR有多个返回有多个返回的出口,出口的选择在于所处理的数据。的出口,出口的选择在于所处理的数据。n不需要用条件分支转移指令不需要用条件分支转移指令26表7-8 远调用和远返回指令返回本节277.1.5 重复操作重复操作1单条指令的重复操作单条指令的重复操作nRPT(重复执行下一条指令)重复执行下一条指令)nRPTZ(累加器清累加器清0后重复执行下一条指令)后重复执行下一条指令)2块重复操作指令块重复操作指令nRPTB块重复指令块重复指令用于将一个码块重复执行用于将一个码块重复执行N1
13、次,次,N是装入块重复计数器(是装入块重复计数器(BRC)的值。的值。28重复执行单条指令重复执行单条指令n重复指令只需取指一次,进行循环比重复指令只需取指一次,进行循环比BANZ效率高效率高n重复执行重复执行n次,指令中计数值设为次,指令中计数值设为n-1n重复操作使多周期指令(重复操作使多周期指令(MAC、MVDK和和MVPD等)等)变成单周期指令变成单周期指令29重复执行单条指令重复执行单条指令30重复执行单条指令重复执行单条指令312块重复操作指令块重复操作指令n块重复指令块重复指令RPTB用于将一个码块重复执行用于将一个码块重复执行N1次,次,N是装入块重复计数器(是装入块重复计数器
14、(BRC)的值。的值。n程序块重复操作指令程序块重复操作指令RPTBRPTB将重复操作的范围扩大到任意将重复操作的范围扩大到任意长度的循环路,循环开销为长度的循环路,循环开销为0 0n循环起始地址为下一行的地址循环起始地址为下一行的地址n块重复操作前,必须先将迭代次数加载到块重复操作前,必须先将迭代次数加载到BRCBRC(块重复计块重复计数器)数器)nRPTBRPTB指令可以响应中断指令可以响应中断32块重复操作指令块重复操作指令33程序块重复操作举例3435363738循环嵌套的开销 循环循环操操 作作指令指令重复次数重复次数机器周期机器周期内层内层单程序重复操作单程序重复操作 RPT RP
15、T N N 1中层中层块程序重复操作块程序重复操作 RPTB RPTB M M 4+2外层外层循环操作循环操作 BANZ BANZ L L 4N+2返回本节397.1.6 TMS320C54x中断系统中断系统1中断类型中断类型nC54x支持软件中断和硬件中断。支持软件中断和硬件中断。n软件中断软件中断由程序指令产生(由程序指令产生(INTR、TRAP或或RESET)。)。n硬件中断硬件中断由设备的一个信号产生,包括两种类型:由设备的一个信号产生,包括两种类型:外部硬件中断外部硬件中断由由外部中断口外部中断口的信号触发;的信号触发; 内部硬件中断内部硬件中断由由片内外设片内外设的信号触发。的信号
16、触发。n硬件中断和软件中断,都属于以下两种类型:硬件中断和软件中断,都属于以下两种类型:(1)可屏蔽中断)可屏蔽中断 (2)非屏蔽中断)非屏蔽中断 40(1)可屏蔽中断)可屏蔽中断 可以用软件来屏蔽或开放可以用软件来屏蔽或开放的中断。的中断。C54x最多最多16个个(SINT15-SINT0)例例C5402中:中:INT3-INT0(外部用户中断)(外部用户中断)BRINT0,BXINT0, BRINT1,BXINT1(缓冲串口中断缓冲串口中断)TINT0-TINT1(定时器中断)(定时器中断)HPINT(HPI接口中断)接口中断)DMAC0, DMAC4, DMAC5(DMA通道中断通道中断
17、)41(2)非屏蔽中断)非屏蔽中断 不能用软件来屏蔽或开放不能用软件来屏蔽或开放的中断。的中断。C54x总能响应这总能响应这类中断,响应中断后转去执行中断服务程序。类中断,响应中断后转去执行中断服务程序。包括包括所有软件中断所有软件中断和两个和两个外部硬件中断外部硬件中断RS、NMI(可以用软件设置)。(可以用软件设置)。RS对对C54x所有操作方式都有影响。所有操作方式都有影响。NMI不影响不影响C54x操作方式,响应中断时,所有其它操作方式,响应中断时,所有其它中断都将被禁止。中断都将被禁止。42表7-9 C5402中断源的中断向量及硬件中断优先权143表7-9 C5402中断源的中断向量
18、及硬件中断优先权2442.中断标志寄存器中断标志寄存器(IFR)和中断屏蔽寄存器和中断屏蔽寄存器(IMR)n中断标志寄存器(中断标志寄存器(IFR)是存储器映象的是存储器映象的CPU寄寄存器。存器。n一个可屏蔽中断在一个可屏蔽中断在IFR中有相应的中断标志位,中有相应的中断标志位,当当CPU接收到可屏蔽中断请求时,接收到可屏蔽中断请求时,IFR相应的位相应的位置置1,直到中断得到处理为止。,直到中断得到处理为止。45图图7-2 中断标志寄存器(中断标志寄存器(IFR)结构图结构图n如图如图7-2所示为所示为C5402中断标志寄存器(中断标志寄存器(IFR)结结构图。构图。46下面下面4种方法可
19、以清除中断标志种方法可以清除中断标志nC54x复位复位(RS为低电平为低电平)n中断得到处理。中断得到处理。n将将1写到写到IFR中的适当位中的适当位(该位变为该位变为0),相应未处理,相应未处理完的中断被清除。完的中断被清除。STM #0FFFFH IFRn用适当的中断号来执行用适当的中断号来执行INTR指令。指令。IFR某位为某位为1表示一个未响应的中断。表示一个未响应的中断。47中断屏蔽寄存器(中断屏蔽寄存器(IMR)也是存储器映象的也是存储器映象的CPU寄寄存器,用来屏蔽外部和内部的可屏蔽中断,其存器,用来屏蔽外部和内部的可屏蔽中断,其结结构图同构图同IFR完全一致完全一致。 n如果如
20、果 ST1中的中断屏蔽位中的中断屏蔽位INTM=0,IMR中的某一中的某一位是位是1,表示允许(开放)相应的中断;,表示允许(开放)相应的中断;nNMI和和RS都不包括在都不包括在IMR中;中;n读读IMR可以检查中断是否被屏蔽;可以检查中断是否被屏蔽;n写写IMR可以屏蔽中断或解除屏蔽中断。可以屏蔽中断或解除屏蔽中断。图图7-2 中断标志寄存器(中断标志寄存器(IFR)结构图结构图483中断响应过程中断响应过程(1)接受中断请求。)接受中断请求。 (2)响应中断。)响应中断。(3)执行中断服务程序()执行中断服务程序(ISR)。)。49(1)接受中断请求。)接受中断请求。 n当有中断请求时,
21、在当有中断请求时,在IFR相应的标志位置相应的标志位置1. 中断响应后,这中断响应后,这个标志自动清除。个标志自动清除。n外部硬件中断由外部接口的信号请求,有外部硬件中断由外部接口的信号请求,有RS、NMI、INT3-INT0.内部硬件中断由片内外设的信号请求,内部硬件中断由片内外设的信号请求,C5402内部硬内部硬件中断有件中断有BRINT0、BXINT0、BRINT1、BXINT1、TINT、HPINT、DMA通道中断通道中断n软件中断由程序中的指令软件中断由程序中的指令INTR、TRAP和和RESET产生产生nINTR K,可执行任何中断服务程序,入口地址可执行任何中断服务程序,入口地址
22、K,将,将INTM位位置置1,不可屏蔽。,不可屏蔽。nTRAP K,同上,但不会将同上,但不会将INTM位置位置1nRESET, 非屏蔽复位指令,将非屏蔽复位指令,将INTM位置位置1,影响状态寄存器,影响状态寄存器ST0、ST1,不影响处理器方式寄存器不影响处理器方式寄存器PMST。50(2)响应中断。)响应中断。CPU接收到硬件或软件的中断请求后,判断是否响接收到硬件或软件的中断请求后,判断是否响应。应。软件中断和非屏蔽中断立即响应软件中断和非屏蔽中断立即响应,可屏蔽中可屏蔽中断则判断断则判断以下条件:以下条件:n优先级最高的先响应。优先级最高的先响应。n状态寄存器状态寄存器ST1中的中的
23、INTM位是位是0,表示允许可屏,表示允许可屏蔽中断,可以用蔽中断,可以用RSBX INTM指令来复位。指令来复位。n中断屏蔽寄存器中断屏蔽寄存器IMR中相应的位是中相应的位是151(3)执行中断服务程序()执行中断服务程序(ISR)。)。响应中断后,响应中断后,CPU做如下操作:做如下操作:把程序计算器把程序计算器(PC)的值的值(返回地址返回地址)压入堆栈;压入堆栈;把中断向量的地址装入把中断向量的地址装入PC取出位于中断向量地址处的指令。若为延迟分支转移指令,取出位于中断向量地址处的指令。若为延迟分支转移指令,取出其后两条指令。取出其后两条指令。执行分支转移指令,程序转到中断服务程序。如
24、果分支转移执行分支转移指令,程序转到中断服务程序。如果分支转移是延迟的,那么其后两个指令先执行。是延迟的,那么其后两个指令先执行。执行中断服务程序直到返回指令执行中断服务程序直到返回指令;从堆栈中弹出返回地址并装入从堆栈中弹出返回地址并装入PC;继续执行主程序。继续执行主程序。52n执行中断服务程序时,某些寄存器也要压入堆栈,执行中断服务程序时,某些寄存器也要压入堆栈,保护现场。返回时恢复寄存器内容。保护现场。返回时恢复寄存器内容。n用用PSHM,POPM指令将这些寄存器压入或弹出堆栈,指令将这些寄存器压入或弹出堆栈,也可以用也可以用PSHD和和POPD将数据寄存器的值压入或弹将数据寄存器的值
25、压入或弹出堆栈出堆栈.n要注意压入和弹出的顺序相反,先进后出。要注意压入和弹出的顺序相反,先进后出。nBRC必须在恢复必须在恢复ST1中的中的BRAF位前恢复。位前恢复。下图下图7-3为中断操作流程图为中断操作流程图53图图7-3 中断操作流程图中断操作流程图544重新映象中断向量地址重新映象中断向量地址nC54x的中断向量表是可重定位的的中断向量表是可重定位的,即在,即在DSP复位复位时,中断向量表的起始地址固定为时,中断向量表的起始地址固定为0FF80H,复复位后,此表的起始地址可由用户指定。位后,此表的起始地址可由用户指定。n中断向量可重新被映象到程序存储器的任何一个中断向量可重新被映象
26、到程序存储器的任何一个128字页开始的地方(除保留区域外)。中断向字页开始的地方(除保留区域外)。中断向量地址由量地址由PMST中的中断向量指针中的中断向量指针IPTR(9位)位)和中断向量号(和中断向量号(031)左移两位后组成。如图)左移两位后组成。如图7-4所示。所示。复位时,复位时,IPTR位全为位全为1(IPTR=1FFH),因此硬件复位),因此硬件复位后中断向量表的起始地址为后中断向量表的起始地址为0FF80H.55中断向量号左移两位后中断向量地址图7-4 中断向量地址的产生IPTR=0001H0080INT0=10H 40H则则INT0的的中断向量地址为中断向量地址为00C0H返
27、回本节567.1.7 堆栈的使用堆栈的使用n堆栈被用于保存中断程序、调用子程序的返回地堆栈被用于保存中断程序、调用子程序的返回地址,也用于保护和恢复用户指定的寄存器和数据,址,也用于保护和恢复用户指定的寄存器和数据,还可用于程序调用时的参数传递。还可用于程序调用时的参数传递。返回地址是由返回地址是由DSP自动保存的。自动保存的。 n用户编写的压栈指令和出栈指令将指定的内容压用户编写的压栈指令和出栈指令将指定的内容压入和弹出堆栈,入和弹出堆栈,SP总是指向最后压入堆栈的数据,总是指向最后压入堆栈的数据,压栈之前压栈之前SP减减1,出栈之后,出栈之后SP加加1。 5758nC54x支持软件堆栈,在
28、用户指定的存储区开辟一支持软件堆栈,在用户指定的存储区开辟一块存储区作为堆栈存储器。块存储区作为堆栈存储器。堆栈的定义及初始化堆栈的定义及初始化步骤步骤为:为:1)声明具有适当长度的未初始化段;)声明具有适当长度的未初始化段;2)将堆栈指针指向栈底;)将堆栈指针指向栈底;3)在链接命令文件)在链接命令文件(.cmd)中将堆栈段放入内部中将堆栈段放入内部数据存储区。数据存储区。 59n堆栈的设置:堆栈的设置:nsize .set 100nstack .usect STK, sizenSTM #stack+size, SPn堆栈用法:堆栈用法:nCALL PC+1(N)放入堆栈,放入堆栈,SP-1
29、SPnRET 弹出弹出PC,SP+1 SPn注意:在链接命令文件中要为堆栈区定位,例如注意:在链接命令文件中要为堆栈区定位,例如nSTK: DARAMPAGE 1n见见EXAMPLE.ASM和和EXAMPLE.CMD60链接命令文件链接命令文件 example.cmdvectors.objexample.obj-o example.out-m example.map-e startMEMORY PAGE 0: EPROM:org=0E000h,len=100h VECS: org=0FF80h,len=80h PAGE 1: SPRAM: org=0060h,len=20h DARAM:org
30、=0080h,len=100h SECTIONS .text:EPROM PAGE 0 .bss:SPRAM PAGE 1 .data:DARAM PAGE 1 STACK:DARAM PAGE 1 Vectors:VECS PAGE 061example.asm程序清单程序清单* example.asm y= a1*x1+a2*x2+a3*x3+a4*x4 * .title example.asmSTACK usect STACK, 10h ;allocate space for stack .bss x,4 ;allocate 9 word for variables .bss a,4 .
31、bss y,1 .def start .data table: .word 1,2,3,4 ;data follows . .word 8,6,4,262example.asm程序清单(续程序清单(续1).text ;code follows . start: STM #STACK+10h, SP ;set stack pointer STM #table,AR1 ;AR1 point to table STM #x,AR2 ;AR2 point to x STM #7,AR0 LD #0,A loop: LD *AR1+,A ;move 8 values STL A,*AR2+ ;from
32、program memory BANZ loop,*AR0- ;into data memory CALL SUM ;call SUM subroutine end: B end63example.asm程序清单(续程序清单(续2).SUM: STM #a, AR3 ;The subroutine implement STM #x, AR4 ;multiply- ;accumulate RPTZ A, #3 MAC *AR3+, *AR4+, A STL A, y RET .end6465数据RAMDDDDDSPD66数据RAMAR4DBF8DBF8DBF8DBF8DBF8SPDBF8返回本节
33、677.2 数据块传送数据块传送返回首页68nC54x数据传送指令用于数据传送数据传送指令用于数据传送,可分为四类:可分为四类: 697071数据存储器数据存储器数据存储器数据存储器#W/C数据存储器数据存储器MMR#W/CMVDK Smem, dmad2/2MVDM dmad, MMR2/2MVKD dmad,Smem2/2MVMD MMR, dmad2/2MVDD Xmem, Ymem1/1MVMM mmr, mmr1/1程序存储器程序存储器数据存储器数据存储器#W/C程序存储器程序存储器(ACC) 数据存储器数据存储器#W/CMVPD Pmad, Smem2/3READA Smem1/5
34、MVDP Smem, Pmad2/4WRITA Smem1/5#W/C :指令的字数:指令的字数/执行周期数执行周期数; pmad :16位立即数程序存储器地址位立即数程序存储器地址;Smem :数据存储器的地址数据存储器的地址; mmr :AR0AR7或或SP;MMR :任何一个存储映象寄存器任何一个存储映象寄存器; dmad :16位立即数数据存储器地址位立即数数据存储器地址;Xmem、Ymem :双操作数数据双操作数数据存储器地址。存储器地址。72737421212121349. 0199. 11)1 (0653. 0566. 0947. 1624. 1)1 (106. 0)(zzzzz
35、zzH7521212121349. 0199. 11)1 (0653. 0566. 0947. 1624. 1)1 (106. 0)(zzzzzzzH7621212121349. 0199. 11)1 (0653. 0566. 0947. 1624. 1)1 (106. 0)(zzzzzzzH77数据存储器数据存储器数据存储器数据存储器例例10:10:编写一段程序将数据存储器中的数组编写一段程序将数据存储器中的数组x20 x20复制复制到数组到数组y20y20 .bss x,20 .bss y,20 .text LD #x,AR2 LD #y,AR3 RPT #19 MVDD *AR2+, *
36、AR3+ 78 .mmregs .def _c_int00 .dataTBL: .word0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 .word 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1PROM: .usect PROM,20 .bss a,20 .bss x,20 .bss y,20DATA: .usect DATA,20 .text1编写汇编源程序为编写汇编源程序为79_c_int00 b start nop nopstart: STM #a,AR1 ;a20=0,1,2,3,4,5,6,7,8,
37、9,10, ;11,12,13,14,15,16,17,18,19 RPT#39 ;x20=1,1,1,1,1,1,1,1,1,1 MVPD TBL,*AR1+ ;1,1,1,1,1,1,1,1,1,1 STM #x, AR2;将数据存储器中的数组将数据存储器中的数组x20复制到数组复制到数组y20 STM #y,AR3 RPT #19 MVDD *AR2+, *AR3+80 STM #a, AR1 ;将数据存储器中的将数据存储器中的a20写入到程序存储器写入到程序存储器PROM LD #PROM, A STM #19, AR3LOOPP: WRITA *AR1+ ADD #1, A, A B
38、ANZ LOOPP, *AR3- LD #PROM-1, A ;读程序存储器读程序存储器PROM中中20个数据存入个数据存入 ;数据存储器数据存储器DATA STM #DATA, AR1 ST #19, BRC RPTB LOOP2 ADD #1, A, ALOOP2: READA *AR1+ ;该指令为单字指令该指令为单字指令WAIT: NOP B WAIT81n点击点击CCS C5000图标,进入图标,进入CCS环境,再点环境,再点击击FileNewSource File菜单命令,打开一菜单命令,打开一个空白文档,将汇编源程序逐条输入。个空白文档,将汇编源程序逐条输入。n单击单击FileS
39、ave菜单命令,出现如下图菜单命令,出现如下图7-5所所示的窗口,示的窗口,2建立汇编源程序建立汇编源程序82 图图7-5 保存汇编源程序保存汇编源程序 n选择选择 D:Program Filesti myprojcetsmymoven子目录,在子目录,在“文件名文件名”一栏中输入一栏中输入mymove,并选择保存并选择保存类型为类型为Assembly Source Files(*.asm),),单击单击“保存保存”按钮,以上汇编程序被存盘。按钮,以上汇编程序被存盘。83n点击点击FileNewSource File菜单命令,打开一个空白文菜单命令,打开一个空白文档,逐条输入链接命令文件。档,
40、逐条输入链接命令文件。 mymove.obj -o mymove.out -m mymove.map MEMORY PAGE 0: RAM: origin=1000h,length=800h RAM1: origin=2000h,length=300h PAGE 1: DARAM1: origin=0100h,length=100h DARAM2: origin=0200h,length=100h 3建立链接命令文件建立链接命令文件84SECTIONS .data :RAM PAGE 0 .text :RAM PAGE 0 PROM :RAM1 PAGE 0 .bss :DARAM1 PAGE
41、 1 DATA :DARAM2 PAGE 1n点击点击FileSave菜单命令,如下图菜单命令,如下图7-5所示所示85 图图7-5 保存汇编源程序保存汇编源程序 n选择选择D:Program Filestimyprojcetsmymoven子目录,在子目录,在“文件名文件名”一栏中输入一栏中输入mymove,并选择保存类并选择保存类型为型为TI Command Language File(*.cmd),),单击单击“保存保存”按钮,以上链接命令程序被存盘。按钮,以上链接命令程序被存盘。864创建一个新工程创建一个新工程n在在Project菜单中选择菜单中选择New项,弹出项,弹出Projec
42、t Creation(工程创建)窗口,如图工程创建)窗口,如图7-6所示。所示。图图7-6 工程工程创建窗口创建窗口n在在Project一栏键入一栏键入mymove,然后单击然后单击“完成完成”按钮,按钮,CCS将创建一个名为将创建一个名为mymove.pjt的工程,此文件保存了的工程,此文件保存了工程的设置信息及工程中的文件引用情况。工程的设置信息及工程中的文件引用情况。875将有关文件添加到工程中将有关文件添加到工程中n从从Project菜单中选取菜单中选取Add Files to Project命令,选择文命令,选择文件件mymove.asm,双击将双击将mymove.asm添加到工程中
43、。添加到工程中。n点击点击ProjectAdd Files to Project菜单命令,将菜单命令,将mymove.cmd添加到工程文件中。添加到工程文件中。n逐层打开如图逐层打开如图7-7所示。双击所示。双击mymove.asm打开文件,可以打开文件,可以观察和修改观察和修改mymove.asm文件的内容。文件的内容。 886汇编、编译和链接产生汇编、编译和链接产生.out文件文件n点击点击Project菜单中的菜单中的Rebuild All。请注意在监请注意在监视窗口显示的汇编、编译和链接的相关信息。如视窗口显示的汇编、编译和链接的相关信息。如果没有错误,将产生果没有错误,将产生mymo
44、ve.out文件;如果有文件;如果有错,在监视窗口以红色字体显示出错行,用鼠标错,在监视窗口以红色字体显示出错行,用鼠标双击该行,光标跳将至源程序相应的出错行。修双击该行,光标跳将至源程序相应的出错行。修改错误后,重新汇编、链接。改错误后,重新汇编、链接。897加载并运行加载并运行.out文件文件n执行菜单命令执行菜单命令FileLoad Program,选择选择mymove.out并打开,将并打开,将Rebuild All生成的程序生成的程序加载到加载到DSP中。中。CCS将自动打开一个反汇编窗口,将自动打开一个反汇编窗口,显示加载程序的反汇编指令。显示加载程序的反汇编指令。n点击点击Deb
45、ugRun菜单命令运行程序,单步执行菜单命令运行程序,单步执行程序则点击程序则点击DebugStepInto菜单命令,或按菜单命令,或按F8键。键。908观察运行结果观察运行结果n点击点击ViewMemory菜单命令,将出现如图菜单命令,将出现如图7-8所所示的选项窗口,将示的选项窗口,将Address改为改为0 x0100,单击单击OK按钮,将在汇编窗口显示选定的数据空间的按钮,将在汇编窗口显示选定的数据空间的内容。内容。n当结果数据错误时,可检查源程序并进行修改。当结果数据错误时,可检查源程序并进行修改。修改完毕,可重新汇编、链接,再加载运行修改完毕,可重新汇编、链接,再加载运行.out文
46、件,直到结果正确。文件,直到结果正确。返回本节917.3 定点数的基本算术运算定点数的基本算术运算n7.3.1 加法、减法和乘法运算加法、减法和乘法运算n7.3.2 定点除法运算定点除法运算返回首页9293947.3.1 加法、减法和乘法运算加法、减法和乘法运算1定点定点DSP中数据表示方法中数据表示方法n定点定点DSP芯片的数值表示是基于芯片的数值表示是基于2的补码表示的补码表示形形式。式。n数的定标有数的定标有Q表示法和表示法和S表示法,表表示法,表7-10列出了列出了16位数的位数的16种种Q表示和表示和S表示,以及它们所能表表示,以及它们所能表示的十进制数范围。示的十进制数范围。n16
47、位中有一个符号位、位中有一个符号位、Q个小数位和个小数位和15-Q个整数个整数位来表示一个数。位来表示一个数。 95表7-10 Q表示、S表示及数值范围96n浮点数(浮点数(x)转换为定点数()转换为定点数(xq)n xq=(int)(x2q)n定点数(定点数(xq)转换为浮点数()转换为浮点数(x)n x=(float)(xq2-q)n浮点数浮点数3.1,定标定标Q=13,定点数,定点数xq=3.1213=25395nQ13定点数定点数25395,浮点数为浮点数为x=253952-13=3.1浮点数与定点数的转换关系浮点数与定点数的转换关系97C54x采用采用2的补码小数的补码小数nQ15格
48、式格式,最高位为符号位,小数点在符号位后最高位为符号位,小数点在符号位后n数值范围从数值范围从-1到到+1(1-2-15=0.999969482421875)n16位位2的补码小数(的补码小数(Q15格式)每个的权值为:格式)每个的权值为: MSB LSB -1(0). 1/2 1/4 1/8 2-15小数的表示方法小数的表示方法9899汇编语言程序中小数的写法汇编语言程序中小数的写法100216位定点加法和位定点加法和16位定点减法位定点减法nC54x中提供了多条用于加法的指令,如中提供了多条用于加法的指令,如ADD、ADDC、ADDM和和ADDS。其中,其中,nADDS用于无符号数的加法运
49、算,用于无符号数的加法运算,nADDS Smem, src ; src=src+uns(Smem)nADDC用于带进位的加法运算,用于带进位的加法运算,nADDC Smem, src ; src=src+Smem+CnADDM专用于立即数的加法。专用于立即数的加法。nADDM #lk, Smem ; Smem=Smem+#lk101n C54x中提供了多条用于减法的指令,如中提供了多条用于减法的指令,如SUB、SUBB、SUBC和和SUBS。其中,其中,nSUBS用于无符号数的减法运算,用于无符号数的减法运算,nSUBS Smem, src ; src=src-uns(Smem)nSUBB用于
50、带进位的减法运算,用于带进位的减法运算,nSUBB Smem, src ; src=src-Smem-CnSUBC为条件减法指令。为条件减法指令。nSUBC Smem, src ; if(src-Smem=0n src =(src-Smem15)1+1n else src = src1102316位定点整数乘法位定点整数乘法nC54x中提供了大量的乘法运算指令,其结果都是中提供了大量的乘法运算指令,其结果都是32位,放在累加器位,放在累加器A或或B中。乘数在中。乘数在C54x的乘法的乘法指令中很灵活,可以是指令中很灵活,可以是T寄存器、立即数、存储寄存器、立即数、存储单元和累加器单元和累加器A
51、或或B的高的高16位。位。n在在C54x中,一般对数据的处理都当做有符号数,中,一般对数据的处理都当做有符号数,如果是无符号数相乘,使用如果是无符号数相乘,使用MPYU指令,这是一指令,这是一条专门用于无符号数乘法运算的指令,其他指令条专门用于无符号数乘法运算的指令,其他指令都是有符号数的乘法。都是有符号数的乘法。 103RSBX FRCT ;FRCT=0,准备整数乘法准备整数乘法LD x, T ;将将x装入装入TMPY y, A ;y乘乘x,放,放ASTH A, z_h ;将乘积结果高将乘积结果高16位放位放z_hSTL A, z_l ;将乘积结果低将乘积结果低16位放位放z_l104加、减
52、法和乘法运算例子加、减法和乘法运算例子1 1105加、减法和乘法运算例子加、减法和乘法运算例子2 2106加、减法和乘法运算例子加、减法和乘法运算例子2 2iiixa41107加、减法和乘法运算例子加、减法和乘法运算例子2 2iiixa41108加、减法和乘法运算例子加、减法和乘法运算例子2 2iiixa41109加、减法和乘法运算例子加、减法和乘法运算例子3 31104Q15定点小数乘法运算定点小数乘法运算n两个两个16位整数相乘,乘积总是位整数相乘,乘积总是“向左增长向左增长”,这,这就意味着多次相乘后乘积将会很快超出定点器件就意味着多次相乘后乘积将会很快超出定点器件的数据范围。而且要将的
53、数据范围。而且要将32位乘积保存到数据存储位乘积保存到数据存储器,就要耗费两个机器周期以及两个字的程序和器,就要耗费两个机器周期以及两个字的程序和RAM单元。单元。n然而,两个然而,两个Q15的小数相乘,乘积总是的小数相乘,乘积总是“向右增向右增长长”,这就意味着超出定点器件数据范围的将是,这就意味着超出定点器件数据范围的将是不太感兴趣的部分。不太感兴趣的部分。 111 整数相乘,整数相乘,“向左增长向左增长”的缺陷的缺陷 开销开销2个机器周期个机器周期 占用占用2个字的程序和个字的程序和RAM单元单元 难以递推运算难以递推运算 小数相乘,小数相乘,“向右增长向右增长” 保存高保存高16位乘积
54、,占用较少资源位乘积,占用较少资源 便于递推运算便于递推运算112113 S x x x S x x x (Q3(Q3格式)格式) S y y y S y y y (Q3(Q3格式)格式) S S z z z z z z S S z z z z z z (Q6(Q6格式)格式)114小数乘法编程小数乘法编程SSBX FRCT ;FRCT=1,准备小数乘法准备小数乘法LD x, 16, A ;将将x装入装入A的高的高16位位MPYA y ;y乘乘A的高的高16位,放位,放BSTH B, z ;将乘积结果高将乘积结果高16位放位放znx=y=4000H(0.5) 20000000H(0.25)20
55、00H(0.25)nx=0CCDH(0.1) y=0599AH(0.7)nB=08F5F0A4H(0.070005) 08F5H(0.06997)1155混合表示法混合表示法n有些情况下,运算过程中为了既满足数值的动态有些情况下,运算过程中为了既满足数值的动态范围又保证一定的精度,必须采用范围又保证一定的精度,必须采用Q0与与Q15之间之间的表示方法。的表示方法。n在做加、减运算时,如果两个操作数的定标不一在做加、减运算时,如果两个操作数的定标不一样,在运算前要进行小数点的调整,为保证运算样,在运算前要进行小数点的调整,为保证运算精度,需要使精度,需要使Q值小的数调整为与另一个数的值小的数调整
56、为与另一个数的Q值一样大。值一样大。116 41iiixayaxy117 41iiixayaxy0.30.2-0.5-0.1-0.20.3返回本节1187.3.2 定点除法运算定点除法运算n在一般的在一般的DSP中,没有专门的除法指令。同样,在中,没有专门的除法指令。同样,在C54x中也没有提供专门的除法指令。一般有两种方法来完成除中也没有提供专门的除法指令。一般有两种方法来完成除法。法。n一种是用乘法来代替,除以某个数相当于乘以其倒数,所一种是用乘法来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于除以常数特别以先求出其倒数,然后相乘。这种方法对于
57、除以常数特别适用。适用。n另一种方法是使用条件减法另一种方法是使用条件减法SUBC指令,加上重复指令指令,加上重复指令RPT #15,重复重复16次减法完成无符号数除法运算。次减法完成无符号数除法运算。两种不两种不同情况下的除法程序。同情况下的除法程序。1|被除数被除数|除数除数|,商为小数,商为小数2|被除数被除数|除数除数|,商为整数,商为整数119长除数法长除数法 0.4/(-0.8) 3333h/999Ah 0.4/0.8 3333h/6666h 3333h 16ACCNEG:取反加一。取反加一。120除数结果除数结果被除数被除数 4*32768/10(0.4)除数除数 -8*3276
58、8/10(-0.8) 商(十六进制)商(十六进制) 0 xc000 商(十进制)商(十进制) -0.5 121| |被除数被除数|除数除数| |,商为小数,商为小数数据存储器分子分母商:0.4-0.8AR1num0.4-0.8quot122| |被除数被除数|除数除数| |,商为小数,商为小数0.4:-0.8商-0.80.4数据存储器AR1quot0.8-0.5123| |被除数被除数|除数除数| |,商为小数,商为小数被除数被除数 除除 数数 商商( (十六进制十六进制) ) 商商( (十进制十进制) ) 4 4* *3232 768/100(0.4) 768/100(0.4) -8-8*
59、*3232 768/100(-0.8) 768/100(-0.8) 0 0 xC000 xC000 -0.5 -0.5 -128 -128 1 1 024 024 0 0 xF000 xF000 -0.125 -0.125 124| |被除数被除数|除数除数| |,商为整数,商为整数125| |被除数被除数|除数除数| |,商为整数,商为整数126| |被除数被除数|除数除数| |,商为整数,商为整数被除数被除数 除除 数数 商商( (十六进制十六进制) ) 商商( (十进制十进制) ) 1616 384 384 512 512 0 0 xC020 xC020 32 32 6666* *3232 768/100(0.66) 768/100(0.66) -33-33* *3232 768/100(-0.33) 768/100(-0.33) 0 0 xFFFE xFFFE -2 -2 127返回本节关于除法操作的说明关于除法操作的说明nSUBCSUBC指令仅对指令仅对无符号数无符号数进行操作进行操作n除法运算必须对被除数和除数取绝对值除法运算必须对被除数和除数取绝对值n利用乘法操作,获取商的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 续签劳动合同的要素
- 新材料在生物芯片制备中的应用研究考核试卷
- 脚本创作劳务合同
- 纺纱工艺对环境的影响评价考核试卷
- 模具制造工艺参数优化考核试卷
- 生活服务行业互联网平台社会影响力分析考核试卷
- 振动控制技术及其在工程中的应用考核试卷
- 无线网络连接速度优化考核试卷
- 肉制品加工产品多样化与品质提升策略考核试卷
- 2025年卓雅学校九年级语文3月模拟练习试卷附答案解析
- 2025地质勘察合同范本
- 2025年时政政治试题库及答案
- 抗帕金森病试题及答案
- 事故隐患内部举报奖励制度
- GB/T 26651-2011耐磨钢铸件
- ISO9001注册审核员专业划分小类
- 五年级道德与法治上册课件 -保家卫国 独立自主 部编版 (共48张PPT)
- 安徽省历年中考数学试卷,2014-2021年安徽中考数学近八年真题汇总(含答案解析)
- 利益冲突申报表
- 项目工作周报模板
- GB4789.2-2022食品安全国家标准 食品微生物学检验 菌落总数测定
评论
0/150
提交评论