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

DSP代码

DSP代码

DSP代码2.main(){int i;unsigned int * px;unsigned int * py;unsigned int * pz;px=(unsigned int *)0x4080; // 字地址,字节地址为8100H py=(unsigned int *)0x4100; // 字地址,字节地址为8200H for ( i=0,pz=px;i<16;i++,pz++ )(*pz)=i;for ( i=0,pz=py;i<16;i++,pz++ ) // 在此加软件断点(*pz)=0x1234;for ( i=0;i<16;i++,px++,py++ ) // 在此加软件断点(*py)=(*px);while(1){} // 在此加软件断点}3.#include "myapp.h"// 定义指示灯寄存器地址和寄存器类型#define LBDS (*((unsigned int *)0x400001))void INTR_init( void );void TIMER_init(void);int nCount;main(){nCount=0;PLL_Init(40);SDRAM_init();LBDS=0;INTR_init();TIMER_init();while ( 1 ){}}void interrupt Timer(){nCount++; nCount%=16;if ( nCount==0 )LBDS^=1;}void INTR_init( void ){IVPD=0xd0;IVPH=0xd0;IER0=0x10;DBIER0 =0x10;IFR0=0xffff;asm(" BCLR INTM");}void TIMER_init(void){ioport unsigned int *tim0; ioport unsigned int *prd0; ioport unsigned int *tcr0; ioport unsigned int *prsc0; tim0 = (unsigned int *)0x1000;prd0 = (unsigned int *)0x1001;tcr0 = (unsigned int *)0x1002;prsc0 = (unsigned int *)0x1003;*tcr0 = 0x04f0;*tim0 = 0;*prd0 = 0x0ffff;*prsc0 = 2;*tcr0 = 0x00e0;}4.#include "myapp.h"#include "ICETEK-VC5509-EDU.h"#include "scancode.h"void InitADC();void wait( unsigned int cycles );void EnableAPLL( );unsigned int nADC0[256],nADC1[256]; main() {int i;unsigned int uWork;EnableAPLL();SDRAM_init();InitADC();PLL_Init(132);while ( 1 ){for ( i=0;i<256;i++ ){ADCCTL=0x8000; // 启动AD转换,通道0do{uWork=ADCDA TA;} while ( uWork&0x8000 );nADC0[i]=uWork&0x0fff;}for ( i=0;i<256;i++ ){ADCCTL=0x9000; // 启动AD转换,通道1do{uWork=ADCDA TA;} while ( uWork&0x8000 );nADC1[i]=uWork&0x0fff;}asm( " nop"); // break point}}void InitADC(){ADCCLKCTL=0x23; // 4MHz ADCLK ADCCLKDIV=0x4f00;}void wait( unsigned int cycles ){int i;for ( i = 0 ; i < cycles ; i++ ){ }}void EnableAPLL( ){/* Enusre DPLL is running */*( ioport volatile unsigned short* )0x1f00 = 4;wait( 25 );*( ioport volatile unsigned short* )0x1f00 = 0;// MULITPL Y*( ioport volatile unsigned short* )0x1f00 = 0x3000;// COUNT*( ioport volatile unsigned short* )0x1f00 |= 0x4F8;wait( 25 );//*( ioport volatile unsigned short* )0x1f00 |= 0x800// MODE*( ioport volatile unsigned short* )0x1f00 |= 2;wait( 30000 );// APLL Select*( ioport volatile unsigned short* )0x1e80 = 1;// DELAYwait( 60000 );}5.#include "myapp.h"#include "ICETEK-VC5509-EDU.h"#include "scancode.h"#define CTRSTATUS (*(unsigned int *)0x600800) //port8000 #define CTRLED (*(unsigned int *)0x600802) // port8004 void InitMcBSP();main(){PLL_Init(12);SDRAM_init();InitCTR();InitMcBSP();CTRSTATUS=0x80;CTRSTATUS=0;CTRSTATUS=0x80;CTRSTATUS=0;CTRLED=0xff;CTRGR=2; // 使能IOwhile ( 1 ){PCR1^=8;Delay(256);}}void InitMcBSP(){// IOPin: McBSP1.FSX S15//SPCR2.XRST_=0,PCR.XIOEN=1,PCR.FSXM=1,PCR.FSXP=0/ 1SPCR2_1&=0x0fffe;PCR1|=0x2800;}6.#include#include "volume.h"/* Global declarations */int inp1_buffer[BUFSIZE];int inp2_buffer[BUFSIZE]; /* processing data buffers */int out1_buffer[BUFSIZE];int out2_buffer[BUFSIZE];int out3_buffer[BUFSIZE];int out4_buffer[BUFSIZE*2];int size = BUFSIZE;int ain = MINGAIN;int zhy=0;int sk=64; /*sk代表所开的bufsize的大小,需修改它.输入文件sine.dat为32点,sine11.dat,sin22.dat,sin33.dat,sin44.dat为64点的输入波形.*//* volume control variable *///unsigned int processingLoad = 1; /* processing routine load value *//* Functions */extern void load(unsigned int loadValue);static int processing1(int *output1, int *output2);static int processing2(int *output2, int *output3);static int processing3(int *input1,int *output2,int *output4);static int processing4(int *input2, int *output1);static void dataIO1(void);static void dataIO2(void);/** ======== main ========*/void main(){int *input1 = &inp1_buffer[0];int *input2 = &inp2_buffer[0];int *output1 = &out1_buffer[0];int *output2 = &out2_buffer[0];int *output3 = &out3_buffer[0];int *output4 = &out4_buffer[0];puts("volume example started\n");/* loop forever */while(TRUE){/** Read input data using a probe-point connected to a host file.* Write output data to a graph connected through a probe-point.*/dataIO1(); // break pointdataIO2(); // break point/* apply gain */processing4(input2,output1);processing1(output1, output2);processing2(output2, output3);processing3(input1,output2,output4) ;}}/** ======== processing ========** FUNCTION: apply signal processing transform to input signal. ** PARAMETERS: address of input and output buffers.** RETURN V ALUE: TRUE.*/static int processing4(int *input2,int *output1){ int m=sk;for(;m>=0;m--){*output1++ = *input2++ * ain;}for(;(size-m)>0;m++){output1[m]=0;}// load(processingLoad);return(TRUE);}static int processing1(int *output1,int *output2){int m=sk-1;for(;m>0;m--){*output2++ = *output1++ * ain;}/* additional processing load */// load(processingLoad);return(TRUE);}static int processing2(int *output2, int *output3){ int n=zhy;size=BUFSIZE;for(;(size-n)>0;n++){ *output3++ = output2[n];}/* for (;n>0;n--){ *output3++ = 0;} */// load(processingLoad);return(TRUE);}static int processing3(int *input1,int *output2,int *output4) { int m=sk;int y=zhy;int z,x,w,i,f,g;for(;(m-y)>0;){i=y;x=0;z=0;f=y;for(;i>=0;i--){g=input1[z]*output2[f]; x=x+g;z++;f--;}*output4++ = x;y++;}m=sk;y=sk-1;w=m-zhy-1;for(;m>0;m--){y--;i=y;z=sk-1;x=0;f=sk-y;for(;i>0;i--,z--,f++){g=input1[z]*output2[f]; x=x+g;}out4_buffer[w]=x;w++;}// load(processingLoad);return(TRUE);}/** ======== dataIO ========** FUNCTION: read input signal and write processed output signal.** PARAMETERS: none.** RETURN V ALUE: none.*/static void dataIO1(){/* do data I/O */return;}static void dataIO2(){/* do data I/O */return;}7.#include "myapp.h"#include "ICETEK-VC5509-EDU.h" #include "scancode.h"void InitADC();void wait( unsigned int cycles ); void EnableAPLL( );void InitMcBSP();unsigned int nADC0[256];main(){int i;unsigned int uWork;EnableAPLL();SDRAM_init();InitADC();PLL_Init(144);InitCTR();InitMcBSP();while ( 1 ){for ( i=0;i<256;i++ ){ADCCTL=0x8000; // 启动AD转换,通道0 do{uWork=ADCDA TA;} while ( uWork&0x8000 );nADC0[i]=uWork&0x0fff;PCR1^=8;}asm( " nop"); // break point}}void InitADC(){ADCCLKCTL=0x23; // 4MHz ADCLKADCCLKDIV=0x4f00;}void wait( unsigned int cycles ){int i;for ( i = 0 ; i < cycles ; i++ ){ }}void EnableAPLL( ){/* Enusre DPLL is running */*( ioport volatile unsigned short* )0x1f00 = 4;wait( 25 );*( ioport volatile unsigned short* )0x1f00 = 0;// MULITPL Y*( ioport volatile unsigned short* )0x1f00 = 0x3000; // COUNT*( ioport volatile unsigned short* )0x1f00 |= 0x4F8; wait( 25 );//*( ioport volatile unsigned short* )0x1f00 |= 0x800 // MODE*( ioport volatile unsigned short* )0x1f00 |= 2;wait( 30000 );// APLL Select*( ioport volatile unsigned short* )0x1e80 = 1;// DELAYwait( 60000 );}void InitMcBSP(){// IOPin: McBSP1.FSX S15//SPCR2.XRST_=0,PCR.XIOEN=1,PCR.FSXM=1,PCR.FSXP=0/ 1 SPCR2_1&=0x0fffe;PCR1|=0x2800;}8.#include "myapp.h"#include "ICETEK-VC5509-EDU.h"#include "scancode.h"#include#define FIRNUMBER 25#define SIGNAL1F 1000#define SIGNAL2F 4500#define SAMPLEF 10000#define PI 3.1415926float InputWave();float FIR();float fHn[FIRNUMBER]={ 0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,-0.018,0.049,-0.02,0.11,0.28,0.64,0.28,-0.11,-0.02,0.049,-0.018,-0.009,0.01,-0.002,-0.002,0.001,0.0,0.0};float fXn[FIRNUMBER]={ 0.0 };float fInput,fOutput;float fSignal1,fSignal2;float fStepSignal1,fStepSignal2;float f2PI;float fIn[256],fOut[256];int nIn,nOut;main(){nIn=0; nOut=0;f2PI=2*PI;fSignal1=0.0;fSignal2=PI*0.1;fStepSignal1=2*PI/30;fStepSignal2=2*PI*1.4;while ( 1 ){fInput=InputWave();fIn[nIn]=fInput;nIn++; nIn%=256;fOutput=FIR();fOut[nOut]=fOutput;nOut++; /* break point */if ( nOut>=256 ){nOut=0;}}}float InputWave(){for ( i=FIRNUMBER-1;i>0;i-- )fXn[i]=fXn[i-1];fXn[0]=sin((double)fSignal1)+cos((double)fSignal2)/6.0; fSignal1+=fStepSignal1;if ( fSignal1>=f2PI ) fSignal1-=f2PI;fSignal2+=fStepSignal2;if ( fSignal2>=f2PI ) fSignal2-=f2PI;return(fXn[0]);}float FIR(){float fSum;fSum=0;for ( i=0;i<="" p="">{fSum+=(fXn[i]*fHn[i]);return(fSum);}9.#include"math.h"#define IIRNUMBER 2#define SIGNAL1F 1000#define SIGNAL2F 4500#define SAMPLEF 10000#define PI 3.1415926float InputWave();float IIR();float fBn[IIRNUMBER]={ 0.0,0.7757 }; float fAn[IIRNUMBER]={ 0.1122,0.1122 }; float fXn[IIRNUMBER]={ 0.0 };float fYn[IIRNUMBER]={ 0.0 };float fInput,fOutput;float fSignal1,fSignal2;float fStepSignal1,fStepSignal2;float f2PI;int i;float fIn[256],fOut[256];int nIn,nOut;main(){nIn=0; nOut=0;fInput=fOutput=0;f2PI=2*PI;fSignal1=0.0;fSignal2=PI*0.1;// fStepSignal1=2*PI/30;// fStepSignal2=2*PI*1.4; fStepSignal1=2*PI/50; fStepSignal2=2*PI/2.5; while ( 1 ){fInput=InputWave();fIn[nIn]=fInput;nIn++; nIn%=256;fOutput=IIR();fOut[nOut]=fOutput;nOut++; // break pointif ( nOut>=256 ){nOut=0;}}}float InputWave(){for ( i=IIRNUMBER-1;i>0;i-- ) {fXn[i]=fXn[i-1];fYn[i]=fYn[i-1];}fXn[0]=sin((double)fSignal1)+cos((double)fSignal2)/6.0; fYn[0]=0.0;fSignal1+=fStepSignal1;if ( fSignal1>=f2PI ) fSignal1-=f2PI;fSignal2+=fStepSignal2;if ( fSignal2>=f2PI ) fSignal2-=f2PI;return(fXn[0]);}float IIR(){float fSum;fSum=0.0;for ( i=0;i<="" p="">{fSum+=(fXn[i]*fAn[i]);fSum+=(fYn[i]*fBn[i]);}return(fSum);}10.#include "myapp.h"//#include "ICETEK-VC5509-A.h"#include "LCD.h"#include "math.h"#include "extaddr.h"#include "util.h"#define CREG (*(unsigned short int *)0x400004)// AD ---------------------------------------------------------- ioport unsigned int *ADCCTL1=(unsigned int *)0x6800; ioport unsigned int *ADCDATA1=(unsigned int *)0x6801; ioport unsigned int *ADCCLKDIV1=(unsigned int *)0x6802;ioport unsigned int *ADCCLKCTL1=(unsigned int *)0x6803; #define ADCCTL (*ADCCTL1)#define ADCDATA (*ADCDA TA1)#define ADCCLKDIV (*ADCCLKDIV1)#define ADCCLKCTL (*ADCCLKCTL1)// DA ---------------------------------------------------------- #define DA_DATA_L (*((unsigned int *)0x400800))#define DA_DATA_H (*((unsigned int *)0x400801))#define DA_CTL (*((unsigned int *)0x400802))#define DA_CHN1 0x0#define DA_CHN2 0x40#define DA_CHN3 0x80#define DA_CHN4 0xc0// 液晶---------------------------------------------------------- #define CTRLED (*(unsigned int *)0x600802) // port8004 #define MCTRKEY (*(unsigned int *)0x602802) // port8005 #define CTRCLKEY (*(unsigned int *)0x600803) // port8006 #define CTRSTATUS (*(unsigned int *)0x600800) //port8000 #define ADCNUMBER 500void TIME_init(void);void INTR_init( void );void interrupt Timer( void );void InitADC();ioport unsigned int * sysR = (unsigned int *)0x7fd;struct struLCDGraph struGraph,struGraph1;unsigned int nScreenBuffer[30*128];int nData[256],nData1[256];void Delay(unsigned int nDelay);int k0,k1,uWork,uWork0,nAD,keyflage;intnGraphBuf1[ADCNUMBER],nGraphBuf2[ADCNUMBER],nGraphB uf3[ADCNUMBER]; int nADBuf1[ADCNUMBER],nADBuf2[ADCNUMBER],nADBuf3[ADC NUMBER];int nGraphBuf1[ADCNUMBER],nGraphBuf2[ADCNUMBER];intshow1[ADCNUMBER],show2[ADCNUMBER],show3[ADCNUMBE R];main(){unsigned int uWork1;int j;unsigned int * pWork;PLL_Init(12);//PLL_Init(48);SDRAM_init();CREG=1;LCDTurnOff();LCDSetScreenBuffer(nScreenBuffer);for( uWork=0,pWork=nScreenBuffer;uWork<30*128;uWork++,pW ork++ ) (*pWork)=0; LCDSetDelay(1);LCDTurnOn(); // 打开显示LCDCLS(); // 清除显示内存TIME_init();INTR_init();InitADC();ADCCTL = 0x8000;(*sysR)=1;k0=k1=0;keyflage=0;for(;;){for(j=0;j<adcnumber;j++)< p="">{show1[j]=nGraphBuf1[j];show2[j]=nGraphBuf2[j];show3[j]=nGraphBuf3[j];}if(keyflage==0){struGraph.pData=show2;struGraph.uDataMode=DA TAUINTMODE; struGraph.uDataLength=ADCNUMBER; struGraph.uMaxValue=2048; struGraph.uWindowX0=0; struGraph.uWindowY0=0; struGraph.uWindowX1=240; struGraph.uWindowY1=128; struGraph.nOriginX=0;struGraph.nOriginY=0;struGraph.uLineMode=LINEMODE; LCDGraph(&struGraph);struGraph.pData=show1;struGraph.uDataMode=DA TAUINTMODE; struGraph.uDataLength=ADCNUMBER; struGraph.uMaxValue=1024; struGraph.uWindowX0=0; struGraph.uWindowY0=0; struGraph.uWindowX1=240;struGraph.uWindowY1=128; struGraph.nOriginX=0;struGraph.nOriginY=64;struGraph.uLineMode=LINEMODE; LCDGraph(&struGraph);for ( j=0;j<20;j++ ) _Delay(614); LCDSetScreenBuffer(nScreenBuffer); LCDCLS(); // 清除显示内存}if(keyflage==1){struGraph.pData=show3;struGraph.uDataMode=DA TAUINTMODE; struGraph.uDataLength=ADCNUMBER; struGraph.uMaxValue=1024; struGraph.uWindowX0=0; struGraph.uWindowY0=0; struGraph.uWindowX1=240; struGraph.uWindowY1=128; struGraph.nOriginX=0;struGraph.nOriginY=0;struGraph.uLineMode=LINEMODE; LCDGraph(&struGraph);for ( j=0;j<20;j++ ) _Delay(614); LCDSetScreenBuffer(nScreenBuffer); LCDCLS();}uWork1=MCTRKEY;CTRCLKEY=0;if(uWork1==128){keyflage=1-keyflage;}}}void TIME_init(void){ioport unsigned int *tim0; ioport unsigned int *prd0; ioport unsigned int *tcr0; ioport unsigned int *prsc0;tim0 = (unsigned int *)0x1000; prd0 = (unsigned int *)0x1001; tcr0 = (unsigned int *)0x1002; prsc0 = (unsigned int *)0x1003; *tcr0 = 0x04f0;*tim0 = 0;*prd0 = 0x03ff;*prsc0 = 2;*tcr0 = 0x00e0;}void INTR_init( void ){IVPD=0xd0;IVPH=0xd0;IER0=0x10;DBIER0 =0x10;IFR0=0xffff;asm(" BCLR INTM");}void interrupt Timer( void ){uWork0=ADCDA TA; // 从FIFO中读取转换结果uWork=uWork0&0x0f000;if ( uWork==0 ){uWork0&=0x0fff; // 去掉高4位nADBuf1[k0++]=uWork0; // 保存结果DA_DA TA_L=uWork0&0xff;DA_DA TA_H=((uWork0>>8)&0x0f)|DA_CHN1;DA_CTL=0;if ( k0>=ADCNUMBER ){for ( nAD=0;nAD<="" p="">{nGraphBuf1[nAD]=nADBuf1[nAD];//+2048;//+1352;nGraphBuf1[nAD]&=0x0fff;nGraphBuf3[nAD]=nADBuf3[nAD];//+2048;//+1352;nGraphBuf3[nAD]&=0x0fff;}for ( nAD=k0;nAD<="" p="">{nGraphBuf1[nAD]=nADBuf1[k0-1];//+2048;//+1352;nGraphBuf1[nAD]&=0x0fff;}k0=0;}ADCCTL = 0x9000; // 发送控制脉冲信号,进行下次转换1通道只需送0x9000即可}if ( uWork==0x1000 ){uWork0&=0x0fff; // 去掉高4位nADBuf2[k1++]=uWork0;DA_DA TA_L=uWork0&0xff;DA_DA TA_H=((uWork0>>8)&0x0f)|DA_CHN2;DA_CTL=0;if ( k1>=ADCNUMBER ){for ( nAD=0;nAD<="" p="">{nGraphBuf2[nAD]=nADBuf2[nAD];//+2048;//+1352;nGraphBuf2[nAD]&=0x0fff;}for ( nAD=k1;nAD<="" p="">{nGraphBuf2[nAD]=nADBuf2[k1-1];//+2048;//+1352;nGraphBuf2[nAD]&=0x0fff;}k1=0;}ADCCTL = 0x8000; // 发送控制脉冲信号,进行下次转换0通道只需送0x8000即可}uWork0=nADBuf1[k0]+nADBuf2[k0];uWork0=uWork0>>1;</adcnumber;j++)<>。

DSP指令解释

DSP指令解释

word格式-可编辑-感谢下载支持1.STM #8765,*AR7+ 把立即数8765存放到AR7所指定的数据存储单元中去2.MPY #-2,A 立即数-2与T寄存器中的值相乘,并将乘积装入累加器A中3.MVPD TABLE,*AR1+把中TABLE标注的程序存储器单元地址中的一个字复制到由AR4所指定的数据存储单元中去。

4.BC new,AOV 若累加器A溢出,则跳转至new5.BC new,AGT 若累加器A中的值大于0,则跳转至new6.STL A,*AR1+ 把累加器A低端存放到AR1所指定的数据存储单元中7.PRTZ A,#4 对A清零并设置重复执行下条指令5次8.ADD *AR4,16,B,A将AR4所指定的数据存储单元中的值左移16后的值与累加器B中的值相加,并把结果装入累加器A中9.SUB *AR3+,14,A 累加器A中的值减去AR3所指定的数据存储单元中的数左移14位后的值,并将结果装入累加器A中。

即:从累加器A中减去AR3所指定的数据存储单元中的数左移14位后的值的值。

10.MAC #345H,A,B将T寄存器中的值与立即数345的乘积加上累加器A中的值所得到的和装入累加器B中。

11.STA, *AR4-(ASM=0)将累加器A中的值存储到AR4所指向的数据存储单元中。

12.MAC *AR3+,*AR4+,A,BAR3所指定数据存储单元中的值与AR4所指定数据存储单元中的值相乘,将乘积与累加器A中的值相加所得到的和装入累加器B中13.SUB #12345,8,A,B把累加器A中的值与立即数12345左移8位后的值相减所得到的差装入累加器B14.RPT #99NOP重复执行NOP指令100次15.MVDD *AR3+,*AR5+将AR3所指定的数据存储单元中的值传送到AR5指定的数据存储单元中。

16.CALA A 用累加器A的滴16位加载PC17.ST T,*AR7- T寄存器高端移位后存储到AR7所指定的数据存储单元中。

DSP重点内容

DSP重点内容

1.DSP 的狭义理解为 数字信号处理器 ,广义理解为 数字信号处理方法 。

2.在直接寻址中,指令代码包含了数据存储器地址的低 7 位。

当ST1中直接寻址编辑方式位CPL =0 时,与DP 相结合形成16位数据存储器地址;当ST1中直接寻址编辑方式位CPL =1 时,加上SP 基地址形成数据存储器地址。

3.TMS320C54有两个通用引脚,BIO 和XF , BIO 输入引脚可用于监视外部接口器件的状态; XF 输出引脚可以用于与外部接口器件的握手信号。

4.累加器又叫做 目的寄存器 ,它的作用是存放从ALU 或乘法器/加法器单元 输出的数据。

它的存放格式为5.桶形移位器的移位数有三中表达方式: 立即数 ; ASM ; T 低6位6.DSP 可以处理双16位或双精度算术运算,当 C16=0 位双精度运算方式,当 C16=1为双16位运算方式。

7.复位电路有三种方式,分别是 上电复位 ; 手动复位 ; 自动复位 。

8.立即数寻址指令中在数字或符号常数前面加一个 # 号,来表示立即数。

9.位倒序寻址方式中,AR0中存放的是 FFT 点数的一半 。

10.一般,COFF 目标文件中包含三个缺省的段: .text 段; .data 段和 .bss 段。

11.汇编源程序中标号可选,若使用标号,则标号必须从 第一列 开始;程序中可以有注释,注释在第一列开始时前面需标上 星号或分号 ,但在其它列开始的注释前面只能标 分号 。

12.’C5402有23条外部程序地址线,其程序空间可扩展到 1M ,内程序区在 第0页 。

13.指令执行前有关寄存器及数据存储器单元情况如下图所示,请在下图分别填写指令执行后有关寄存器及数据存储器单元的内容。

ADD *AR3+,14,A14、DSP芯片按照其用途分类,可以分为通用型和专用型两种。

15、在堆栈操作中,PC当前地址为4020h,SP当前地址为0033h,运行PSHM AR2后,PC= 4021h , SP= 0032h 。

DSP指令大全(最全)

DSP指令大全(最全)

DSP指令大全(最全)附录6 TMS320C54x 指令系统一览表(按指令功能排列) 一、算术运算指令二、逻辑运算指令三、程序控制指令6.注:?条件―真‖,§条件―假‖,※延迟指令。

四、加载和存储指令4.6.7.五.伪指令2.初始化常数(数据和存储器)的伪指令3.调整段程序计数器伪指令(SPC).align 把SPC调整到页边界.even 把SPC调整到偶数字边界4.控制输出列表格式化伪指令5.条件汇编伪指令.break [well-defined expression] 如果条件真结束.loop汇编,.break结构是可选项.else 如果.if条件为假,汇编代码块.else结构是可选项.elseif well-defined expression——如果if条件为假且.elseif 条件为真,汇编代码块.else结构是可选项.endif 结束.if代码块.endloop 结束.1oop代码块.if well-defined expression 如果条件为真则汇编代码块.loop [well-defined expression] 开始代码块的重复汇编6. 汇编符号.asg [”] character string [”],substitution symbol——把字符串赋予替代的符号..endstruct 结束结构定义.equ 使值和符号相等.eval well-defined expression,substitution symbol 根据数字替代符号完成运算.newblock 取消局部标号.set 使数值和符号相等.struct 开始结构定义.tag 把结构属性赋予标号7.宏指令宏定义:Macname .macro[参数1],[…],[参数n]宏调用:[标号][:] macname [参数1],[…],[参数n]8.编译软件指令①汇编器:asm500.exeasm500[input file[object file [listing file] [-options]]-c—使汇编语言文件中大小没有区别。

DSP术语

DSP术语
校准:链接器将输出段置于 n 字节边界(其中 n 是 2 的幂)内的地址的过程。 可以使用 SECTIONS 链接器指令 指定校准。
分配:链接器计算输出段的最终存储器地址的过程。 分配节点:将节间消息分配至的处理器节点。 ALU:请参见算术逻辑单元。 ALU 函数:对于并行处理器,是指对到算术逻辑单元 (ALU) 的输入进行的操作, 其中包括三个输入的任何算术或 Boolean 组合,以及混合算术和 Boolean 函 数。(TMS320C8x)
汇编器:从包含汇编语言说明和指令的源文件创建机器语言程序的软件程序。汇 编器将绝对操作代码替换为符号 操作代码,并将绝对或浮动地址替换为符号地 址。
汇编语言:低级的符号编程语言,类似于机器代码语言并由字母组组成 — 每个 字母组代表一个指令;使计算机用 户可以使用助记符(而不是数字指令)来编 写程序。
汇编语言指令:使用计算机操作来表示助记符的语言。
汇编模式:无论当前运行哪种类型的代码,在 DISASSEMBLY 窗口中显示汇编语 言代码但不会显示 FILE 窗口 的调试模式。
汇编程序优化器:可优化线性汇编代码(尚未分配寄存器或预定的汇编代码)的 软件程序。当其中一个输入文件具 有 .sa 扩展名时,汇编程序优化器将会通过 shell 程序 cl6x 自动调用该文件。(TMS320C6x)
异步发送 (TX) 引脚:在该引脚上,来自异步串行端口的数据串行传输;从异步 串行端口移位寄存器 (AXSR) 按一 次一位的速度接收字符。(TMS320C2xx)
属性:指定适用于后续图形信息的部分特性或特点的参数。
音频输出电缆:将软件开发板 (SDB) 连接到音频输入和输出外设的电缆。包含 立体声线路输出、线路输入和辅助 输入的标准 RCA 插孔。(TMS320C8x)

DSP的CMD文件详解(整理版)(精)

DSP的CMD文件详解(整理版)(精)

D S P的C M D文件详解(整理版)(精)-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIANDSP 的CMD 文件详解(整理版CMD 是用来分配ROM 和RAM 空间用的, 告诉链接程序怎样计算地址和分配空间。

所以不同的芯片就有不同大小的ROM 和RAM ,存放用户程序的地方也不尽相同。

所以要根据芯片进行修改,分为 MEMORY 和SECTIONS 两个部分。

MEMORY{PAGE 0 ..........PAGE 1.........}SECTIONS{.vectors ..................reset .................................}MEMORY 是用来指定芯片的ROM 和RAM 的大小和划分出几个区间。

PAGE 0对应ROM , PAGE 1对应RAM 。

PAGE 里包含的区间名字与其后面的参数反映了该区间的起始地址和长度。

SECTIONS :(在程序里添加下面的段名,如.vectors 。

用来指定该段名以下,另一个段名以上的程序(属于PAGE0 或数据(属于PAGE1 放到“>”符号后的空间名字所在的地方。

{.vectors : { } > VECS PAGE 0.reset : { } > VECS PAGE 0 ..................................}eg:MEMORY{PAGE 0:VECS :origin = 00000h, length = 00040h LOW :origin = 00040h, length = 03FC0h SARAM :origin = 04000h, length = 00800h B0 :origin = 0FF00h, length = 00100h PAGE 1:B0 :origin = 00200h, length = 00100hB1 :origin = 00300h, length = 00100hB2 :origin = 00060h, length = 00020hSARAM :origin = 08000h, length = 00800h}{.text : { } > LOW PAGE 0.cinit : { } > LOW PAGE 0.switch : { } > LOW PAGE 0.const : { } > SARAM PAGE 1.data : { } > SARAM PAGE 1.bss : { } > SARAM PAGE 1.stack : { } > SARAM PAGE 1.sysmem : { } > SARAM PAGE 1}由三部分组成:① 输入/输出定义:这一部分,可以通过ccs 的“Build Option........”菜单设置: .obj(链接的目标文件、.lib(链接的库文件、.map(生成的交叉索引文件、.out(生成的可执行代码。

数字信号处理(DSP)专业词汇

数字信号处理(DSP)专业词汇

系统:system 信号:signal模拟信号:analog signal 数字信号:digital signal模/数转换:analog-to-digital conversion 频谱:spectrum数字滤波:digital filtering 滤波器:filter采样:sample 保持:hold数字代码:digital code 量化电平:quantization level时域:time domain 频域:frequency domain低频:low frequency 高频:high frequency低通滤波器:low pass filter 高通滤波器:high pass filter带通滤波器:band pass filter 带阻滤波器:band stop filter零阶保持信号:zero order hold signal 平滑:smooth采样周期:sampling period 频率分量:frequency elements图像处理:image processing 传感器:sensor电压:voltage 电流:current•anti-aliasing filter 抗混叠滤波器•anti-imaging filter 抗镜像滤波器•sampling interval 采样间隔•=sampling period 采样周期•sampling frequency 采样频率•=sampling rate 采样速率•sampling theorem 采样定理•Nyquist sampling rate 奈奎斯特采样率•Nyquist frequency 奈奎斯特频率•Nyquist range 奈奎斯特范围•oversampling 过采样undersampling 欠采样•quantization step 量化步长quantization noise量化噪声•bit rate 比特率•数字函数:digital function 合成函数:composite function •二维数字信号:two-dimensional digital signal•语音信号:speech signal 量化方案:quantization scheme •脉冲函数:impulse function 单位脉冲函数:unit impulse function •阶跃函数:step function 幂函数:power function •指数函数: exponential function 正弦函数:sine function•余弦函数:cosine function 复平面:complex plain•欧拉恒等式:Euler’s identity 模拟频率:analog frequency •数字频率:digital frequency 采样间隔:sampling interval •相移:phase shift 像素:pixel•灰度级:gray scale•roll-off 滚降gain 增益•pass band 通带stop band 阻带•bandwidth 带宽linear system 线性系统•superposition 叠加原理time-invariant 时不变•causal system因果系统difference equation差分方程•filter coefficient滤波器系数recursive filter 递归滤波器•nonrecursive filter 非递归滤波器finite word length effect有限字长效应•impulse response 脉冲响应infinite impulse response (IIR)无限脉冲响应•finite impulse response (FIR)有限脉冲响应•moving average filter 滑动平均滤波器•step response 阶跃响应•z transform z变换•region of convergence 收敛域•inverse z transform 逆z变换•transfer function 传输函数•partial fraction expansion 部分分式展开•cover-up method 覆盖法•zero 零点pole 极点•marginally stable 临界稳定unstable 不稳定•傅立叶变换:Fourier Transform•滤波器形状:filter shape•频率响应:frequency response•频率特性:frequency characteristics•离散时间傅立叶变换:Discrete Time Fourier Transform•幅度响应:magnitude response•相位响应:phase response•传输函数:transfer function•相位差:phase difference•采样频率:sampling frequency•white noise 白噪声•magnitude spectrum 幅度频谱•phase spectrum 相位频谱•discrete Fourier series(DFS)离散傅里叶级数•有限脉冲响应滤波器:finite impulse response filter•无限脉冲响应滤波器:infinite impulse response filter•相位失真:phase distortion•理想低通滤波器:idle low pass filter•窗函数:window function 稳定性:stability•通带波纹:pass band ripple•阻带波纹:stop band ripple•通带边缘频率:pass band edge frequency•过渡带宽度:transition width•矩形窗:Rectangular Window•汉宁窗:Hanning Window•哈明窗:Hamming Window•布莱克曼窗:Blackman Window•凯塞窗:Kaiser Window•项数:number of terms 衰减:attenuation•增益:gain•采样频率:sampling frequency•infinite impulse response filter(IIR)无限脉冲响应滤波器•bilinear transformation 双线性变换•prewarping equation 预扭曲方程•Butterworth filter 巴特沃斯滤波器•Chebyshev Type I filter 切比雪夫I 型滤波器•Chebyshev Type II filter 切比雪夫II 型滤波器•elliptic filter 椭圆滤波器•Impulse invariance method 脉冲响应不变法•discrete Fourier transform (DFT) 离散傅里叶变换•inverse DFT 逆离散傅里叶变换•phase spectrum 相位频谱•frequency spacing频率间隔•resolution分辨率•smear模糊•spectral leakage 频谱泄漏•spectrogram频谱图•fast Fourier transform (FFT) 快速傅里叶变换•butterfly 蝶形。

  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,分别测试相等、小于、大于和不等于四种情况。

相关文档
最新文档