资源预览内容
第1页 / 共70页
第2页 / 共70页
第3页 / 共70页
第4页 / 共70页
第5页 / 共70页
第6页 / 共70页
第7页 / 共70页
第8页 / 共70页
第9页 / 共70页
第10页 / 共70页
亲,该文档总共70页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
DSP技术及应用,陈金鹰 教授,2,3,Smem:16位单寻址操作数。 Xmem:16位双寻址操作数,从DB数据总线上读出。 Ymem:16位双寻址操作数,从CB数据总线上读出。 dmad:16位立即数,数据存储器地址。 pmad:16位立即数,程序存储器地址。 PA: 16位立即数,I/O口地址。 src: 源累加器(A或B)。 dst: 目的累加器(A或B)。 lk: 16位长立即数。,第一节 TMS320C54x的寻址方式,缩 写,4,1立即数寻址 2绝对地址寻址 3累加器寻址 4直接寻址 5间接寻址 6存储器映象寄存器寻址 7堆栈寻址,寻址分类,5,1立即数寻址,在操作数前面需要加字号来说明该操作数为立即数。否则会把该操作数误认为是一个地址,从而把立即数寻址变成绝对地址寻址。,特 点,指令中包含有执行指令所需要的操作数。 立即数分为3、5、8或9位的短立即数和16位的长立即数两种。 短立即数可包含在单字或双字指令中,长立即数在双字指令中。,注 意,举例,6,2绝对地址寻址,特 点,在指令中包含有所要寻址的存储单元的16位地址。这个16位的地址可以用其所在单元的地址标号或者16位符号常数来表示。,(1)数据存储器地址(damd)寻址,方法,MVKD SAMPLE,*AR3 LD 93h,A,举例,7,用一个符号或一个具体的数来确定程序存储器中的一个地址,(2)程序存储器地址(pmad)寻址,方法,MVPD TABLE,*AR4 MVPD 90h,*AR4,举例,8,用一个符号或一个常数来确定外部I/O口地址,(3)PA寻址 端口(PA),方法,PORTR FIFO,*AR5 PORTR 90h,*AR5,举例,9,用一个符号或一个常数来确定数据存储器中的一个地址,(4)*(lk)寻址,方法,LD *(BUFFER),A,举例,特点,允许所有使用Smem寻址的指令去访问数据空间的任意单元而不改变数据页指针(DP)的值,也不用对ARx进行初始化,10,用累加器中的数值作为地址来读写程序存储器。,方法,READA Smem WRITA Smem,举例,特点,3累加器寻址,11,可以在不改变DP或SP的情况下,随机地寻址128个存储单元中的任何一个单元。,4直接寻址,方法,LD #x,DP / ( ST1的 CPL =0) LD u,A ADD v,A = SSBX CPL /(ST1的 CPL =1) LD X1,A ADD Y2,A,举例,特点,(ST0),用一个符号或一个常数来确定7位偏移值,与DP或SP共同形成16位的数据存储器实际地址。,12,CPL=0 7位dma域与9bit的DP相结合 形成16位的数据存储器地址。 CPL=1 7位dma域加上(正偏移)SP 的值形成16位的数据存储器地址。,DP值是从0511(29-1),以DP为基准的直接寻址把存储器分成512页,7位的dma范围从0127,每页有128个可访问的单元。,9位数据页指针DP,7位dma,15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0,16位堆栈指针 SP,7位dma,15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0,16位数据存储器地址,+,13,5间接寻址,方法,特点,14,(1)单操作数寻址,定义间接寻址的类型,定义寻址所使用的辅助寄存器,LD *AR1,B,ST0,ARP,15,ST0,16,单数据存储器操作数间接寻址类型,17,1) 循环寻址 循环缓冲区的长度值存放在循环缓冲区长度寄存器BK中,BK中的数值由指令设定。长度为R的循环缓冲器必须从一个N位地址的边界开始,即循环缓冲器基地址的最低N位必须为0。N是满足2NR的最小整数。R的值必须装入BK。 例如,含有31个字的循环缓冲器必须从最低5位为0的地址开始,即xxxx xxxx xxx0 00002,N=5,2N=25R=31,且31必须装入BK。如: STM #31,BK 如果R=32,则最小的N值为6,循环缓冲区的起始地址必须有6个最低有效位为0,即 00 00002。,18,2) 位倒序寻址 在这种寻址方式中,用AR0存放FFT点数的一半整数N,用另一辅助寄存器指向一数据存放的物理单元。当使用位倒序寻址把AR0加到辅助寄存器中时,地址以位倒序的方式产生,即进位是从左向右,而不是从右向左进位。 例如: 0110 1000 + 0000 1000 0110 0100,以8位辅助寄存器为例,AR1表示了在存储器中数据的基地址(0110 0000)2,AR0的值为(0000 1000)2。利用以下两条语句可以向外设口(口地址为PA)输出整序后的FFT变换结果: RPT #15 ;重复执行下条指令15+1次 PORTW *AR1+0B,PA;向外设口PA输出结果,19,位倒序对FFT变换结果的序号调整,20,(2)双操作数寻址方式,确定包含Xmem地址的辅助寄存器,确定包含Ymem地址的辅助寄存器,定义用于访问Ymem操作数的间接寻址方式的类型,定义用于访问Xmem操作数的间接寻址方式的类型,MPY *AR2,*AR3,A,21,Xar或Yar 辅助寄存器 00 AR2 01 AR3 10 AR4 11 AR5,辅助 寄存器 选择,双数据存储器操作数寻址的类型,22,0页寻址。 不影响当前DP或SP值 。用于直接寻址和间接寻址,用来修改存储器映象寄存器,6存储器映象寄存器寻址,功能,LDM PRD,A,举例,特点,方法,高9位数据存储器地址被置0,利用指令中的低位地址访问MMR。,23,7堆栈寻址,从高地址向低地址方向生长,SP用来管理堆栈,SP始终指向堆栈中所存放的最后一个数据,即SP指针始终指向栈顶。在压入操作时,先减小SP的值,再将数据压入堆栈;在弹出操作时,先从堆栈弹出数据,再增加SP的值。,用来在中断和子程序调用时自动保存程序计数器(PC)中的数值,也能用来保护现场或传送参数,功能,特点,PSHD *AR2 POPD *AR3,24,第二节 程序地址的生成,程序地址生成器(PAGEN)构成,程序计数器(PC) 重复计数器(RC) 块重复计数器(BRC) 块重复起始地址寄存器(RSA) 块重复结束地址寄存器(REA),核心,16位程序计数器(PC)内中保存某个内部或外部程序存储器的地址。,地址内容为: 即将取指的某条指令; 某个16位立即操作数; 系数表。 在程序存储器中的地址,25,将程序存储器地址加载到程序计数器的途径,26,PC,程序存储器,地址,IPTR(PMST),中断向量号,+,PC,+1,分支转移指令,累加器A、B,低字,累加器分支转移,块重复起始地址RSA,压入堆栈,+1=,块重复结束地址REA,+1,块重复循环,子程序调用,调用,返回,PC,+1,累加器调用,PC,硬件中断或软件中断,顺序执行,复位,分支转移,27,1分支转移操作,通过分支转移指令改写PC,可以改变程序的流向。而子程序调用指令则通过将一个返回地址压入堆栈,执行返回时恢复原地址。,可执行: 分支转移 循环控制 子程序操作,功能,方法,28,条件分支转移 无条件分支转移,BD用指令中所给出的地址加载PC BACCD用所指定的累加器的低16位作为地址加载PC。,带延迟 不带延迟操作,转移种类,BCD如果指令中所规定的条件得到满足,就用指令中所给出的地址加载PC; BANZD如果当前辅助寄存器不等于0,就用指令中所规定的地址加载PC。,BC new,AOV BANZ loop,*AR2-,B next BACC A,29,2调用和返回,转移前,原程序的下条指令的地址被压入堆栈,而在返回时则将这个地址弹出至PC,使被中断了的原程序能继续执行。,当采用调用指令进行子程序或函数调用时,DSP中断当前运行的程序,转移到程序存储器的其它地址继续运行。,功能,方法,30,3条件指令中的条件判断,ST0,31,多重条件判断,BC pmad,cond,cond,cond,相与关系,相或关系,BC pmad,cond BC pmad,cond,32,第1组,例如,可以从A类中选一个条件,同时可以从B类中选择一个条件。但是不能从同一类中选择两个条件。 另外,两种条件测试的累加器必须是同一个。,可以同时测试AGT和AOV,但不能同时测试AGT和BGT。,BC pmad,AGT,AOV BC pmad,AGT,BOV,33,第2组,例如,可以在A、B、C三类中各选择一个条件,但不能从同一类中选择两个条件,可以在A、B、C三类中各选择一个条件,但不能从同一类中选择两个条件,BC pmad,TC,C,BIO BC pmad,NTC,TC,NBIO,34,特 例,如果条件分支转移出去的地方只有12字的程序段,则可以用一条单周期条件执行指令(XC)来代替分支转移指令: XC n,cond,cond,cond 当n=1,且条件得到满足,就执行紧随此 条件指令后的个字指令。 当n=2,且条件得到满足,就执行紧随此 指令后的1个双字指令或者2条单 字指令。 当条件不满足,就依n的值执行1 条或2条NOP指令。,35,例3-3 编写计算 的主要程序部分。 .bss x,4 ;为X建立4个单元, ;放置X1、X2、X3、X4 .bss y,1 ;为Y建立1个单元,放置Y STM #x,AR1 ;将X1的地址传给AR1 STM #3,AR2 ;将循环次数3传给AR2 LD #0,A ;对A清零 loop:ADD *AR1+,A ;对X1、X2、X3、X4循环 ;累加,结果放A中 BANZ loop, AR2- ;检查循环是否应结束 STL A,y ;将累加结果存入Y中,36,特点2,特点1,4单条指令的重复操作,重复执行(RC)+1次。RC内容不能编程设置,只能由重复指令(RPT和RPTZ)中的操作数加载。操作数n的最大值为65 535,最大重复执行次数为65 535+1。,功能,重复执行下一条指令,37,重复过程,当RPT指令执行时: 首先把循环的次数装入循环计数器(RC), 其循环次数n由一个16位单数据存储器操作数 Smem或一个8位或16位常数k或lk给定。这样, 紧接着的下一条指令会循环执行n+1次。 循环,RC在执行减1操作时不能被访问。 注意:该循环内不能套用循环。 当RPTZ指令执行时:对目的累加器dst清0, 循环执行下一条指令n+1次。,38,例3-5 利用单条指令的重复操作对数组x5=0,0,0,0,0进行初始化。 .bss x,5 ;为数组x分配5个存储单元 STM #x,AR1 ;将x的首地址赋给AR1 LD #0,A ;对A清零 RPT #4 ;设置重复执行下条指令5次 STL A,*AR1+;对x5各单元清零 或者 .bss x,5 STM #x,AR1 RPTZ A,#4;对A清零并设置重复执行下条指令5次 STL A,*AR1+,39,特点,5块重复操作,利用C54x内部的块重复计数器(BRC,加载值可为065 535)、块重复起始地址寄存器(RSA)、块重复结束地址寄存器(REA)与程序块重复指令RPTB,可对紧随RPTB、由若干条指令构成的程序块进行重复操作。,功能,将重复操作的范围扩大到64K长度的循环回路,注意,1.RPT指令一旦执行,不会停止操作,即使有中断请求也不响应; 2.RPTB指令可以响应中断;,40,41,对寄存器的占用,6循环的嵌套,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号