DSP代码释义

合集下载

轻松学会DSP——DSP汇编指令

轻松学会DSP——DSP汇编指令

位倒序寻址的执行
设FFT长度N=16,x(0)~x(15)位于地址 (01100000)~(01101111),则AR0赋值为8 (00001000),位倒序方式读入数据情况如下(AR2初 始为01100000): RPT #15 PORTW *AR2+0B,PA
功能: 地址=AR2 , AR2=B(AR2+AR0)
循环寻址的有效地址计算
循环缓冲器的有效基地址(EFB)就是用户选定的 辅助寄存器(ARx)的低N位置 0后所得到的值。
循环缓冲器的尾地址(EOB)是通过用BK的低N位 代替ARx的低N位得到。循环缓冲器的INDEX就是 ARx的低N位,step就是加到辅助寄存器,或从辅 助寄存器中减去的值。循环寻址的算法如下:
FFT中混序就是位倒序
FFT运算时输出/输入序列中必有其一要混序。
存储单元 地址
FFT变换 结果
位码倒序
位码倒序 寻址结果
存储单元 地址
FFT变换 结果
位码倒序
位码倒序 寻址结果
0000
X(0)
0000
X(0)
1000
X(1)
0001
X(8)
0001
X(8)
1000
X(1)
1001
X(9)
1001
MVMD pmad, Smem
程序存储器地址(pmad)寻址:
FIRS Xmem, Ymem, pmad MACD Smem, pmad, src
MACP Smem, pmad, src MVPD pmad, Smem
端口地址(PA)寻址
PORTR PA, Smem
PORTW Smem, PA
*(lk)寻址适用于支持单数据存储器操作数的指令

DSP代码解读

DSP代码解读

;************ GPIO.asm ***************.global _c_int0 ;定义全局变量 _c_int.global PHANTOM ;定义全局变量 PHANTOM.data ;data定义数据b0 .word 0fffEh ;turn-on GPIO0 ;b1 .word 0fffDh ;turn-on GPIO1b2 .word 0fffBh ;turn-on GPIO2b3 .word 0fff7h ;turn-on GPIO3b4 .word 0ffEFh ;turn-on GPIO0b5 .word 0ffDFh ;turn-on GPIO1b6 .word 0ffBFh ;turn-on GPIO2b7 .word 0ff7Fh ;turn-on GPIO3GPR0 .word 0.include f2407.h ;包含一个 f2407.h 文件KICK_DOG .macro ;看门狗控制寄存器LDP #00E0h ;DP-->7000h-707fh ;数据页指针将00E0赋给DP SPLK #05555h,WDKEY ;将05555h送给寄存器WDKEY SPLK #0aaaah,WDKEY ;同上LDP #0h ;DP-->0000h-007fh ;数据页指针将0赋给DP.end ;结束程序.text ;向下是个文本段_c_int0: ;开始执行程序LDP #0h ;数据页指针SETC I NTM ;关掉中断让程序正常运行SETC C NF ;B2程序存储器 0,数据 1,程序SPLK #0000h,IMR ;将0000送给寄存器中断屏蔽寄存器LACC IFR ;将中断标志寄存器IFR的值给了累加器SACL IFR ;将中断标志寄存器IFR的值LDP #00E0h ;数据页指针SPLK #0200h, SCSR1 ;将0200送给系统控制和状态寄存SPLK #006Fh,WDCR ;禁止看门狗复位KICK_DOG ;看门狗寄存器SPLK #0h,GPR0 ;将0送给等待寄存器GPR0OUT GPR0,WSGR ;将GPR0的值送给WSGRLDP #00E1h ;数据页指针SPLK #00000h,MCRA ;定义RA输入或输出SPLK #0FF00h,MCRB ;定义RB输入或输出SPLK #00000h,MCRC ;定义RC输入或输出SPLK #0FFFFh,PADATDIR ;端口A输出高电平SPLK #0FFFFh,PBDATDIRSPLK #0FFFFh,PCDATDIRSPLK #0FFFFh,PEDATDIRSPLK #0FFFFh,PFDATDIRMAIN: ;主程序LDP #0 ;数据页指针LOOP: ;循环LDP #00E1h ;数据页指针setc x f ;给xf高电平,使发光二极管发光SPLK #0FFFFh,PADATDIR ;端口A输出高电平SPLK #0FFFFh,PBDATDIRSPLK #0FFFFh,PCDATDIRSPLK #0FFFFh,PEDATDIRSPLK #0FFFFh,PFDATDIRCALL D ELAY ;调用延迟程序clrc x f ;清零SPLK #0FF00h,PADATDIR ;端口A数据和方向控制寄存器输出低电平SPLK #0FF00h,PBDATDIRSPLK #0FF00h,PCDATDIRSPLK #0FF00h,PEDATDIRSPLK #0FF00h,PFDATDIRB MAIN ;无条件跳转到主程序DELAY: ;延迟D_LOOP: ;RPT #0FFh ;重复0FF+1次NOP ;无动作RET ;跳转到 CALL DELAYPHANTOM: ; 假中断KICK_DOG ;看门狗寄存器B RET ;无条件跳转到 CALL DELAY。

TMS320C6000-DSP-指令详解

TMS320C6000-DSP-指令详解

*-R[ucst5] *--R[ucst5]
带15位常数偏移量 *+B14/B15 的寄存器相对寻址 [ucst15]
*R--[ucst5]
基地址+变址 *+R[offsetR] *++R[offsetR] *R++[offsetR]
*- R[offsetR] * --R[offsetR] *R--[offsetR]
2- n ≤ | x | ≤ 1 - 2- n
Q格式定点数
定点整数是纯整数,约定的小数点位置在有效数 值部分最低位之后。若数据 x 的形式为 x = x0 x1x2…xn ( 其中x0为符号位,x1~xn 是尾数, xn 为最低有效位 ),则在计算机中的表示形式为:
Q15 格式数
1≤ | x | ≤ 2n - 1
同样一个16位数,若小 数点设定的位置不同, 它所表示的数也就不同。
Q0 : 2000H=8192 Q15 :2000H=0.25
Q格式定点数
所谓定点格式,即约定机器中所有数据的小数点位置是固定不变的。在 计算机中通常采用两种简单的约定:将小数点的位置固定在数据的最高 位之前,或者是固定在最低位之后。一般常称前者为定点小数,后者为 定点整数。
3、按寻址方式的加减法运算类指令ADDA/SUBA 此类指令在默认方式下做线性加减法运算。但当源操作数src2
是A4~A7或B4~B7中的一个时,它按AMR寄存器指定的寻址 方式做线性或循环计算。指令的操作数有字/半字/字节3种。 此类指令只在功能单元.D1或.D2运行。
11
算术运算类指令
5 寻址方式
寻址方式指CPU是如何访问其数据存储空间。C6000全部采 用间接寻址,所有寄存器都可以做线性寻址的地址指针。 A4~A7,B4~B7等8个寄存器还可作为循环寻址的地址指针, 由寻址模式寄存器AMR控制地址修改方式:线性方式(默认) 或循环方式。

DSP代码

DSP代码

void RamRead(Uint16 {
Uint16 i;
Start)/////读取外部 RAM 函数
for (i=0;i<0x4000;i++) {
*(ExRamStart + Start + i) = *(ExRamStart +i); } }
Flash 操作对应的 C 文件
外部 Flash 空间数据读写
主函数
通过定时器使 LED 闪烁
。InitPeripherals( )
。StartCpuTimer0( ) 定义在 DSP28_CputTimers.h 中
导入的头文件 主函数
输出占空比固定的 PWM 波形
定义两个全局变量
输出占空比可变的 PWM 波形
主函数
产生三相 SPWM 波形 说 明:EVA 下面的通用定时器 T1 工作于连续增/减计数模式,产生三角载波,载波频率为 3000Hz,载波比 N=60,因此调制波形正弦波的频率为 50Hz。本实验中,调制度为 0.8。
* *名 称:RamRead() * *功 能:读取外部 RAM 空间的数据 * *入口参数:Uint16 Start 此参数规定了从外扩 RAM 区域的第 Start 个存储空间开始读取 * *出口参数:无 * *****************************************************************************/
主函数
定时器 LED 闪烁的 CMD 文件
void InitExRam1(Uint16Start) {
Uint16 i;
for (i=0;i<0x4000;i++) {

DSP代码释义

DSP代码释义

•装载累加器–LACC:左移装载累加器•LACC dma [,shift]•LACC dma ,16•LACC ind [,shift[,ARn]]•LACC ind ,16[,ARn]•LACC #lk [,shift]–LACL:装载累加器低位并清累加器高位•LACL dma•LACL ind[,ARn]•LACL #k–LACT:按TREG规定左移后再转载入累加器•LACT dma•LACT ind[,ARn]–PAC:用乘积寄存器PREG装载累加器,移位方式由ST1中的PM确定•PAC•装载临时寄存器TREG–LT:将指定数据存储器的内容装入TREG。

常作乘法的准备工作。

•LT dma•LT ind[,ARn]–LTA:装载TREG同时累加前次乘积•LTA dma•LTA ind[,ARn]–LTD:装载TREG,累加前次乘积并移动数据•LTD dma•LTD ind[,ARn]–LTP:装载TREG,并将PREG值保存至累加器•LTP dma•LTP ind[,ARn]–LTS:装载TREG并减去前次乘积•LTS dma•LTS ind[,ARn]•装载辅助寄存器AR–LAR:装载辅助寄存器•LAR ARx,dma•LAR ARx,ind[,ARn]•LAR ARx,#k•LAR ARx,#lk–MAR:修改辅助寄存器•MAR dma•MAR ind[,ARn]•装载其它寄存器–LDP:装载数据页指针•LDP dma•LDP ind[,ARn]•LDP #k–LPH:装载乘积寄存器高位字•LPH dma•LPH ind[,ARn]–LST:装载状态寄存器•LST #m,dma•LST #m,ind[,ARn]存储寄存器值•保存AR值(SAR)–SAR ARx, dma–SAR ARx, ind[, ARn] •保存PREG高位字(SPH)–SPH dma–SPH ind[, ARn]•保存PREG低位字(SPL)–SPL dma–SPL ind[, ARn]•保存状态寄存器ST0和ST1(SST)–SST #m, dma–SAR #m, ind[, ARn]堆栈操作•出栈至ACC低位字(POP )–POP•ACC低位字入栈(PUSH )–PUSH•出栈至数据存储器(POPD )–POPD dma–POPD, ind[, ARn]•数据存储器值入栈(PSHD )–PSHD dma–PSHD ind[, ARn]读写数据或程序存储器•数据存储器至数据存储器的块移动(BLDD )–BLDD #lk,dma–BLDD #lk,ind[, ARn]–BLDD dma ,#lk–BLDD ind ,#lk[, ARn] •程序存储器至数据存储器的块移动(BLPD )–BLPD #pma, dma–BLPD #pma, ind[, ARn] •片内数据存储器中的数据传送(DMOV )–DMOV dma–DMOV ind[, ARn]•长立即数写入数据存储器(SPLK )–SPLK #lk, dma–SPLK #lk, ind[, ARn]•读程序存储器(表读)(TBLR )–TBLR dma–TBLR ind[, ARn]•写程序存储器(表写)(TBLW )–TBLW dma–TBLW ind[, ARn]读写I/O单元•读I/O单元(IN )–IN dma, PA–IN ind, PA[, ARn]•写I/O单元(OUT )–OUT dma, PA–OUT ind, PA[, ARn]加法•左移加至ACC(ADD)–ADD dma [,shift]–ADD dma ,16–ADD ind [,shift[,ARn]]–ADD ind ,16[,ARn]–ADD #k–ADD #lk [,shift]•带进位位加至ACC (ADDC)–ADDC dma–ADDC ind [,ARn]•抑制符号扩展加至ACC (ADDS)–ADDS dma–ADDS ind [,ARn]•按TREG低4位规定左移加至ACC (ADDT)–ADDT dma–ADDT ind [,ARn]•加短立即数至当前AR(ADRK)–ADRK #k减法•左移后从ACC中减去(SUB)–SUB dma [,shift]–SUB dma ,16–SUB ind [,shift[,ARn]]–SUB ind ,16[,ARn]–SUB #k–SUB #lk [,shift]•带借位从ACC中减去(SUBB)–SUBB ind [,ARn]•条件减(SUBC):常用来实现除法–SUBC dma–SUBC ind [,ARn]•抑制符号扩展减(SUBS)–SUBS dma–SUBS ind [,ARn]•按TREG低4位左移后从ACC中减去(SUBT)–SUBT dma–SUBT ind [,ARn]•当前AR减去短立即数(SBRK)–SBRK #k•ACC减去PREG(SPAC)–SPAC•SUBC实现16位数除法的步骤–被除数(必须为正)置于累加器低位字中,且最高位放在bit15中,累加器高位字清零;–除数(必须大于0)放入数据存储单元中;–执行SUBC指令16次;–除的结果:商在累加器低位字;余数在累加器高位字。

DSP-常用算法代码

DSP-常用算法代码

一、32 位加法//链接命令文件MEMORY{PAGE 0: ROM :origin=0080h,length=1000hROM :origin=0060h,length=10hPAGE 1: OTHER :origin=0400h,length=40h}SECTIONS{.text : { }>ROM PAGE 0.data :{ }>ROM PAGE 0.bss : { }>OTHER PAGE 1.stack : { }>OTHER PAGE 1}//汇编语言源代码.title "ADD32".mmregs.def start,_c_int00.bss xhi , 2,1,1.bss yhi , 2,1,1.bss zhi , 2,1, 1table .long 13578468H.long 1020B30AH.text_c_int00b startnopnopstart: LD #xhi ,DPSTM #xhi,AR1RPT #3MVPD table,*AR1+DLD xhi , ADADD yhi , ADST A ,zhiEND: B END.end二、64位加法/减法//链接命令文件/*ADDSUB64.cmd*/ADDSUB64.obj-m ADDSUB64.map-o ADDSUB64.outMEMORY{PAGE 0: ROM :origin=0080h,length=1000hROM :origin=0060h,length=10hPAGE 1: OTHER :origin=0400h,length=40h}SECTIONS{.text : { }>ROM PAGE 0.data :{ }>ROM PAGE 0.bss : { }>OTHER PAGE 1.stack : { }>OTHER PAGE 1}//汇编语言源代码.title "ADDSUB64".mmregs.def start,_c_int00.bss x1 , 2 ,1,1.bss x3 , 2 ,1,1.bss y1 , 2 ,1,1.bss y3 , 1.bss y2 , 1.bss z1 , 2 ,1,1.bss z3 , 1.bss z2 , 1.bss w1 , 2 ,1,1.bss w3 , 2 ,1,1table .long 12345678H ;x1x0.long 02468ACEH ;x3x2.long 22222222H ;y1y0.word 1357H,2468H ;y3,y2.long 44444444H ;z1z0.word 1020H,0B30AH ;z3,z2.text_c_int00b startnopnopstart: LD #x1 ,DPSTM #x1,AR1RPT #11MVPD table,*AR1+DLD x1,A ; A = X1 X0DADD y1,A ; A= X1 X0 + Y1 Y0,产生进位CDLD x3,B ; B = X3 X2ADDC y2,B ; B = X3 X2 + 00 Y2 + CADD y3,16,B ; B = X3 X2 + Y3 Y2 + CDSUB z1,A ; A= X1 X0 + Y1 Y0-Z1Z0,产生借位C'DST A,w1 ; W1W0= X1 X0 + Y1 Y0-Z1Z0SUBB z2,B ; B = X3 X2 + Y3 Y2 + C - 00 Z2-C'SUB z3,16,B ; B = X3 X2 + Y3 Y2 + C -Z3 Z2-C'DST B,w3 ; W3 W2= X3 X2 + Y3 Y2 + C - Z3 Z2-C' END: B END.end三、FIR滤波//链接命令文件fir.obj-m fir.map-o fir.outMEMORY{PAGE 0: ROM1(RIX) :ORIGIN=0080H,LENGTH=100HPAGE 1: INTRAM1(RW) :ORIGIN=2400H,LENGTH=0200HINTRAM2(RW) :ORIGIN=2600H,LENGTH=0100HINTRAM3(RW) :ORIGIN=2700H,LENGTH=0100HB2B(RW) :ORIGIN=0070H,LENGTH=10H}SECTIONS{.text : {}>ROM1 PAGE 0.data : {}>INTRAM1 PAGE 1FIR_COFF: {}>INTRAM2 PAGE 1FIR_BFR : {}>INTRAM3 PAGE 1.stack : {}>B2B PAGE 1}//汇编语言源代码;一个FIR滤波器源程序fir.asm.mmregs.global start.def start,_c_int00INDEX .set 1KS .set 256 ;模拟输入数据缓冲区大小N .set 17COFF_FIR .sect "COFF_FIR" ;FIR滤波器系数.word 0.word 158.word 264.word -290.word -1406.word -951.word 3187.word 9287.word 12272.word 9287.word 3187.word -951.word -1406.word -290.word 260.word 158.word 0.dataINPUT .copy "firin.inc" ;模拟输入在数据存储区0x2400 OUTPUT .space 1024 ;输出数据在数据区0x2500 ;FIR_DP .usect "FIR_V ARS",0;D_FIN .usect "FIR_V ARS",1;D_FOUT .usect "FIR_V ARS",1COFFTAB .usect "FIR_COFF",NDA TABUF .usect "FIR_BFR",NBOS .usect "STACK",0FhTOS .usect "STACK",1.text.asg AR0,INDEX_P.asg AR4,DA TA_P ;输入数据x(n)循环缓冲区指针.asg AR5,COFF_P ;FIR系数表指针.asg AR6,INBUF_P ;模拟输入数据指针.asg AR7,OUTBUF_P;FIR滤波器输出数据指针_c_int00b startnopnopstart: ssbx FRCTSTM #COFFTAB,COFF_PRPT #N-1 ;将FIR系数从程序存储器移动MVPD #COFF_FIR,*COFF_P+ ;到数据存储器STM #INDEX,INDEX_PSTM #DATABUF,DATA_PRPTZ A,#N-1STL A,*DATA_P+ ;将数据循环缓冲区清零STM #(DA TABUF+N-1),DATA_P ;数据缓冲区指针指向x[n-(N-1)]STM #COFFTAB,COFF_P ;FIR_TASK:STM #INPUT,INBUF_PSTM #OUTPUT,OUTBUF_PSTM #KS-1,BRCRPTBD LOOP-1STM #N,BK ;FIR循环缓冲区大小LD *INBUF_P+,A ;装载输入数据FIR_FILTER:STL A,*DATA_P+%RPTZ A,N-1MAC *DATA_P+0%,*COFF_P+0%,ASTH A,*OUTBUF_P+LOOP:EEND B EEND.end四、IIR滤波//链接命令文件MEMORY{PAGE 0:EPROM: org=0E00H, len=1000HVECS0: org=0FF80H, len=0080hPAGE 1:SPRAM: org=0060H, len=0020hDARAM: org=0080H, len=1380H}SECTIONS{.text :>EPROM PAGE 0.data :>EPROM PAGE 0X: align(8) {}>DARAM PAGE 1Y: align(8) {}>DARAM PAGE 1B: align(8) {}>DARAM PAGE 1A: align(8) {}>DARAM PAGE 1.vecs0:>VECS0, PAGE 0}//输入数据序列(512点)0x7fff0x00x0…0x0//汇编语言源代码.title "IIR.ASM".mmregs.def _c_int00X .usect "X", 5Y .usect "Y", 5B .usect "B", 5A .usect "A", 5PA0 .set 0PA1 .set 1.datatable: .word 0.word 0.word 0.word 0.word 0.word 0.word 0.word 0.word 3116.word -10286.word 14615.word -10286.word 3116.word -22082.word 31149.word -30484.word 28383.text_c_int00:SSBX FRCTSTM #X, AR1RPT #3MVPD #table, *AR1+STM #Y, AR1RPT #3MVPD #table+4, *AR1+STM #B, AR1RPT #4MVPD #table+8, *AR1+STM #A, AR1RPT #3MVPD #table+13, *AR1+STM #X+4, AR2STM #A+3, AR3STM #Y+3, AR4STM #B+4, AR5STM #5, BKSTM #-1, AR0STM #1000H, AR6STM #0200H-1, AR7loop:PORTR PA1, *AR2LD *AR2, ASTL A, -1, *AR2MPY *AR2+0%, *AR5+0%, AMAC *AR2+0%, *AR5+0%, AMAC *AR2+0%, *AR5+0%, AMAC *AR2+0%, *AR5+0%, AMAC *AR2, *AR5+0%, AMAC *AR4, *AR3, AMAC *AR4, *AR3, AMAC *AR4, *AR3, AMAC *AR4+0%, *AR3+0%, AMAC *AR4, *AR3, AMAC *AR4, *AR3, AMAC *AR4, *AR3, AMAC *AR4, *AR3, AMAC *AR4+0%, *AR3+0%, AMAC *AR4, *AR3, AMAC *AR4, *AR3, AMAC *AR4+0%, *AR3+0%, AMAC *AR4+0%, *AR3+0%, AMAR *AR3+0%STH A, *AR4PORTW *AR4, PA0STH A, *AR6+BANZ loop, *AR7-end: B end.end五、除法//链接命令文件/*chuf.cmd*/chuf.obj-m chuf.map-o chuf.outMEMORY{PAGE 0: ROM :origin=0080h,length=1000hROM :origin=0060h,length=10hPAGE 1: OTHER :origin=0400h,length=40h}SECTIONS{.text : {}>ROM PAGE 0.data :{}>ROM PAGE 0.stack : {}>OTHER PAGE 1.bss : {}>OTHER PAGE 1}//汇编语言源代码;*** 编制计算除法运算的程序段。

c54xx系列DSP汇编指令详解

c54xx系列DSP汇编指令详解
x
意义 或运算 异或运算
减1 赋值于 表示一个立即数 x 的补码
|x|
x 的绝对值
0x
十六进制数据
>>
右移
<<
左移
×
乘法
*
指针指向的地址
TMS320C54xx 系列 DSP 的指令一共有 129 条,按功能分为如下几类:算术指令、逻 辑指令、程序控制指令、存储和装入指令以及循环指令。下面根据每种指令功能的不同,
目的累加器的反 if dst=A,then dst_=B if dst=B then dst_=A
E 地址总线 EAB 地址寄存器 23 位立即数表示的程序存储器地址 ST1 寄存器中的分数方式位 十六进制数据 十六进制数据 累加器 A 的高端(位 32~16) ST1 寄存器中的保持方式位 中断标志寄存器 ST1 寄存器中的中断屏蔽位 少于 9 位的短立即数
3 位立即数(0 ≤ k3 ≤ 7 ) 5 位立即数(-16 ≤ k5 ≤ 15 ) 9 位立即数(0 ≤ k9 ≤ 115 )
16 位长立即数 使用长字寻址 32 位单数据存储器操作数 存储器映射寄存器,AR0~AR7 或 SP
存储器映射寄存器,AR0~AR7 或 SP
紧跟 XC 指令的字数,n=1 或 2 指定在 RSBX、SSBX 和 XC 指令中修改的状态寄存器 N=0,状态寄存器 ST0 N=1,状态寄存器 ST1 ST0 寄存器中的累加器 A 的溢出标志 ST0 寄存器中的累加器 B 的溢出标志 目的累加器(A 或 B)的溢出标志 目的累加器反(A 或 B)的溢出标志 源累加器(A 或 B)的溢出标志 ST1 寄存器中的溢出方式位 16 位立即数表示的端口地址
③ 乘法指令

DSP常用汇编语言指令简介

DSP常用汇编语言指令简介
南航自动化学院DSP技术应用实验 室
;指定当前工作寄存器
MAR *+,AR1 ;把当前寄存器AR0的内容加
间接寻址方式 TMS320LF240X中八个辅助寄存器(AR0-AR8) 提供了灵活而强大的间接寻址能力,在使用时,包 括: (1)设置辅助寄存器指针(ARP) 例如: MAR *,AR1 LDP #04H LAR AR1,0 ;指明当前寄存器为AR1 ;指明当前数据页码 ;把地址为200H单元内容 ;装载入AR1寄存器
南航自动化学院DSP技术应用实验 室
直接寻址方式 使用直接寻址方式时,包括: (1)设置数据页 例如:LDP #4 ; 指向第4个数据页 (2)指明偏移量 例如: LDP #4 ;指向第4个数据页 ADD 1 ; 把地址为204h的数据单元内 ; 容加到累加器内
南航自动化学院DSP技术应用实验 室
2. 工作寄存器等指令举例
Example1:MAR *+,AR1;把当前工作寄 存器的内容加1,然后再改变工作寄存器为 AR1。 Example2:LAR AR4,#8123h;把AR4的 值改变为立即数。 LAR AR0,16;(DP=6)把 地址=310H的内存单元内容装入AR0。 Example3:SAR AR0,*+;(如果当前工 作寄存器=AR1)把AR0的内容拷贝到AR1 南航自动化学院DSP技术应用实验 指向的内存单元。 室
4. 转移指令举例
南航自动化学院DSP技术应用实验 室
EQ NEQ LT LEQ GT GEQ NC C NOV BIO NTC TC UNC
ACC = 0 ACC <>0 ACC < 0 ACC <=0 ACC > 0 ACC >=0 C=0 C=1 OV = 0 BIO_ low TC = 0 TC = 1
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

•装载累加器–LACC:左移装载累加器•LACC dma [,shift]•LACC dma ,16•LACC ind [,shift[,ARn]]•LACC ind ,16[,ARn]•LACC #lk [,shift]–LACL:装载累加器低位并清累加器高位•LACL dma•LACL ind[,ARn]•LACL #k–LACT:按TREG规定左移后再转载入累加器•LACT dma•LACT ind[,ARn]–PAC:用乘积寄存器PREG装载累加器,移位方式由ST1中的PM确定•PAC•装载临时寄存器TREG–LT:将指定数据存储器的内容装入TREG。

常作乘法的准备工作。

•LT dma•LT ind[,ARn]–LTA:装载TREG同时累加前次乘积•LTA dma•LTA ind[,ARn]–LTD:装载TREG,累加前次乘积并移动数据•LTD dma•LTD ind[,ARn]–LTP:装载TREG,并将PREG值保存至累加器•LTP dma•LTP ind[,ARn]–LTS:装载TREG并减去前次乘积•LTS dma•LTS ind[,ARn]•装载辅助寄存器AR–LAR:装载辅助寄存器•LAR ARx,dma•LAR ARx,ind[,ARn]•LAR ARx,#k•LAR ARx,#lk–MAR:修改辅助寄存器•MAR dma•MAR ind[,ARn]•装载其它寄存器–LDP:装载数据页指针•LDP dma•LDP ind[,ARn]•LDP #k–LPH:装载乘积寄存器高位字•LPH dma•LPH ind[,ARn]–LST:装载状态寄存器•LST #m,dma•LST #m,ind[,ARn]存储寄存器值•保存AR值(SAR)–SAR ARx, dma–SAR ARx, ind[, ARn] •保存PREG高位字(SPH)–SPH dma–SPH ind[, ARn]•保存PREG低位字(SPL)–SPL dma–SPL ind[, ARn]•保存状态寄存器ST0和ST1(SST)–SST #m, dma–SAR #m, ind[, ARn]堆栈操作•出栈至ACC低位字(POP )–POP•ACC低位字入栈(PUSH )–PUSH•出栈至数据存储器(POPD )–POPD dma–POPD, ind[, ARn]•数据存储器值入栈(PSHD )–PSHD dma–PSHD ind[, ARn]读写数据或程序存储器•数据存储器至数据存储器的块移动(BLDD )–BLDD #lk,dma–BLDD #lk,ind[, ARn]–BLDD dma ,#lk–BLDD ind ,#lk[, ARn] •程序存储器至数据存储器的块移动(BLPD )–BLPD #pma, dma–BLPD #pma, ind[, ARn] •片内数据存储器中的数据传送(DMOV )–DMOV dma–DMOV ind[, ARn]•长立即数写入数据存储器(SPLK )–SPLK #lk, dma–SPLK #lk, ind[, ARn]•读程序存储器(表读)(TBLR )–TBLR dma–TBLR ind[, ARn]•写程序存储器(表写)(TBLW )–TBLW dma–TBLW ind[, ARn]读写I/O单元•读I/O单元(IN )–IN dma, PA–IN ind, PA[, ARn]•写I/O单元(OUT )–OUT dma, PA–OUT ind, PA[, ARn]加法•左移加至ACC(ADD)–ADD dma [,shift]–ADD dma ,16–ADD ind [,shift[,ARn]]–ADD ind ,16[,ARn]–ADD #k–ADD #lk [,shift]•带进位位加至ACC (ADDC)–ADDC dma–ADDC ind [,ARn]•抑制符号扩展加至ACC (ADDS)–ADDS dma–ADDS ind [,ARn]•按TREG低4位规定左移加至ACC (ADDT)–ADDT dma–ADDT ind [,ARn]•加短立即数至当前AR(ADRK)–ADRK #k减法•左移后从ACC中减去(SUB)–SUB dma [,shift]–SUB dma ,16–SUB ind [,shift[,ARn]]–SUB ind ,16[,ARn]–SUB #k–SUB #lk [,shift]•带借位从ACC中减去(SUBB)–SUBB ind [,ARn]•条件减(SUBC):常用来实现除法–SUBC dma–SUBC ind [,ARn]•抑制符号扩展减(SUBS)–SUBS dma–SUBS ind [,ARn]•按TREG低4位左移后从ACC中减去(SUBT)–SUBT dma–SUBT ind [,ARn]•当前AR减去短立即数(SBRK)–SBRK #k•ACC减去PREG(SPAC)–SPAC•SUBC实现16位数除法的步骤–被除数(必须为正)置于累加器低位字中,且最高位放在bit15中,累加器高位字清零;–除数(必须大于0)放入数据存储单元中;–执行SUBC指令16次;–除的结果:商在累加器低位字;余数在累加器高位字。

乘法•简单乘(MPY)–MPY dma–MPY ind [,ARn]–MPY #k•乘且累加前次乘积(MPYA)–MPYA dma–MPYA ind [,ARn]•乘且减去前次乘积(MPYS)–MPYS dma–MPYS ind [,ARn]•无符号乘(MPYU)–MPYU dma–MPYU ind [,ARn]乘累加•乘且累加(MAC)–MAC pma,dma–MAC pma,ind ,[,ARn]•乘且累加,复制数据存储器内容至下一单元(MACD)–MACD pma,dma–MACD pma,ind ,[,ARn]平方累加/减•累加前次乘积再平方(SQRA)–SQRA ind [,ARn]•减去前次乘积再平方(SQRS)–SQRS dma–SQRS ind [,ARn]基本逻辑运算•与(AND)–AND dma–AND ind [,ARn]–AND #lk [,shift]–AND #lk ,16•或(OR)–OR dma–OR ind [,ARn]–OR #lk [,shift]–OR #lk ,16•异或(XOR)–XOR dma–XOR ind [,ARn]–XOR #lk [,shift]–XOR #lk ,16•求反(CMPL)–CMPL•求负(NEG)–NEG移位•循环移位–ROL–ROR•算术移位–SFL–SFR•移位存储–SACH•SACH dma [,shift2];shift2表明全部32位左移0~7位•SACH ind [,shift2 ][,ARn]–SACL•SACL dma [,shift2]•SACL ind [,shift2 ][,ARn]•累加器特殊装载(ZALR)–ZALR dma–ZALR ind [,ARn]•累加器规格化(NORM )–NORM ind无条件转移和条件转移•无条件转移(B)– B pma[,ind ,[,ARn]]•无条件转移至ACC低位字指定的ROM单元(BACC)–BACC•(当前AR)<>0,转移(BANZ)–BANZ pma[,ind ,[,ARn]] •条件转移(BCND)–BCND pma,cond1 [,cond2][,……]子程序调用及返回•调用累加器低位字指定地址处的子程序(CALA)–CALA•无条件调用(CALL)–CALL pma[,ind ,[,ARn]]•条件调用(CC)–CC pma,cond1 [,cond2][,……]•无条件返回(RET)–RET•条件返回(RETC)–RETC cond1 [,cond2][,……]中断程序调用及返回•软中断指令(INTR k)–INTR k•不可屏蔽中断(NMI)–NMI•软件陷阱中断(TRAP)–TRAP位操作•位测试(BIT)–BIT dma,bit code–BIT ind ,bit code [,ARn] •测试TREG规定位(BITT)–BITT dma–BITT ind [,ARn]•位清零(CLRC)–CLRC control bit•位置位(SETC)–SETC control bit辅助操作指令•空操作–IDLE:以省电方式等中断•IDLE–NOP•NOP•重复执行下条指令(RPT)–RPT dma–RPT ind [,ARn]–RPT #k•设置PREG输出移位方式(SPM)–SPM constant:设置ST1的PM位,constant取值位0~3。

•比较当前AR和AR0–CMPR CM:CM可取0,1,2,3,分别测试相等、小于、大于和不等于四种情况。

相关文档
最新文档