1、5.1 程序执行过程程序执行过程5.2 数据寻址数据寻址5.3 程序寻址程序寻址5.4 小结小结12程序执行过程程序执行过程1 1、指令周期开始。、指令周期开始。DSP DSP首先从首先从PCPC寄存器中获取指令地址,然后,将该地址寄存器中获取指令地址,然后,将该地址输出到输出到PABPAB总线。最后,获取相应指令。总线。最后,获取相应指令。2 2、获取操作数。、获取操作数。DSP DSP根据指令要求从相应位置获取操作数。根据指令要求从相应位置获取操作数。3 3、进行运算并保存。、进行运算并保存。根据指令功能,将操作数送到相应的运算单元中,进行根据指令功能,将操作数送到相应的运算单元中,进行相
2、关运算。然后,将运算结果送入指定的位置。相关运算。然后,将运算结果送入指定的位置。4 4、调整、调整PCPC的值。的值。根据本条指令是否需要根据本条指令是否需要PCPC跳转,更新跳转,更新PCPC寄存器的值,为寄存器的值,为程序下一条指令的执行做好准备。程序下一条指令的执行做好准备。3数据寻址数据寻址 C54xC54x芯片的寻址方式可以分为两类:芯片的寻址方式可以分为两类:数据寻址和程序寻址数据寻址和程序寻址 C54x C54x共有共有7 7种有效的种有效的数据寻址方式数据寻址方式:立即寻址:立即寻址:指令中嵌有固定的数,主要用于初始化;指令中嵌有固定的数,主要用于初始化;绝对寻址:绝对寻址:
3、利用利用1616位地址寻址存储单元;位地址寻址存储单元;累加器寻址:把累加器的内容作为地址;累加器寻址:把累加器的内容作为地址;直接寻址:直接寻址:利用数据存储器页指针和堆栈指针寻址;利用数据存储器页指针和堆栈指针寻址;间接寻址:间接寻址:利用辅助寄存器作为地址指针;利用辅助寄存器作为地址指针;存储器映像存储器映像 寄存器寻址:修改映像寄存器中的值,不影响当前数据寄存器寻址:修改映像寄存器中的值,不影响当前数据 存储器页指针和堆栈指针的值;存储器页指针和堆栈指针的值;堆栈寻址:堆栈寻址:用来管理系统堆栈中的操作用来管理系统堆栈中的操作4数据寻址数据寻址 立即寻址,指令中包含了立即寻址,指令中包
4、含了立即操作数立即操作数,操作数紧随,操作数紧随 操作码存放在程序存储器中。操作码存放在程序存储器中。特点:运行速度较快,但需占用程序存储空间,特点:运行速度较快,但需占用程序存储空间,并且数值不能改变。并且数值不能改变。用途:用于表示常数或对寄存器初始化。用途:用于表示常数或对寄存器初始化。两种立即数形式:两种立即数形式:3 3、5 5、8 8或或9 9位短立即数位短立即数 16 16位长立即数。位长立即数。53 3位位立即数立即数 5 5位位立即数立即数 8 8位位立即数立即数 9 9位位立即数立即数 1616位位立即数立即数 LD LD FRAME LD RPT LD ADD ADDM
5、ANDA N D M B I T F CMPMLD MAC OR ORM RPT RPTZ ST STM SUBXOR XORM 支持立即数的指令 注意:在立即寻址的指令中,应在数值或符号注意:在立即寻址的指令中,应在数值或符号前面加一个前面加一个“#”“#”,表示是一个立即数,表示是一个立即数,以区别以区别于地址。于地址。数据寻址数据寻址 6数据寻址数据寻址 图5-1 带立即数的LD指令(b)双字LD指令(a)单字LD指令7数据寻址数据寻址 绝对寻址,指令中包含的是寻找操作数的绝对寻址,指令中包含的是寻找操作数的1616位单元地址位单元地址,可以用其所在单元的地址标号或者可以用其所在单元的地
6、址标号或者1616位符号位符号 常数来表示。常数来表示。特点:指令中包含一个固定的特点:指令中包含一个固定的1616位地址,能寻址所有数据位地址,能寻址所有数据 存储空间,但运行速度慢,需要较大的存储空间。存储空间,但运行速度慢,需要较大的存储空间。用途:用于对速度要求较低的场合。用途:用于对速度要求较低的场合。绝对寻址有四种类型绝对寻址有四种类型 :数据存储器地址数据存储器地址(dmad)(dmad)寻址;寻址;程序存储器地址程序存储器地址(pmad)(pmad)寻址;寻址;端口端口(PA)(PA)寻址;寻址;*(1k)(1k)寻址。寻址。8数据寻址数据寻址 1 1、数据存储器地址(、数据存
7、储器地址(dmaddmad)寻址)寻址 用一个数或符号来确定用一个数或符号来确定数据空间数据空间的一个地址。的一个地址。主要指令有:主要指令有:MVDK Smem MVDK Smem,dmad dmad MVDM dmad MVDM dmad,MMR MMR MVKD dmad MVKD dmad,Smem Smem MVMD MMR MVMD MMR,dmad dmad 例:例:MVKD EXAMPLE MVKD EXAMPLE ,*AR5AR5 1010h1010h9数据寻址数据寻址 2 2、程序存储器地址(、程序存储器地址(pmadpmad)寻址)寻址 用一个数或符号来确定用一个数或符号
8、来确定程序存储器程序存储器的一个地址。的一个地址。主要指令有:主要指令有:FIRS Xmem FIRS Xmem,Ymem Ymem,pmad pmad MACD Smem MACD Smem,pmad pmad,src src MACP Smem MACP Smem,pmad pmad,src src MVDP Smem MVDP Smem,pmad pmad MVPD pmad MVPD pmad,Smem Smem 例例:MVPD EXAMPLE:MVPD EXAMPLE,*AR5 AR5 10数据寻址数据寻址 3 3、端口地址(、端口地址(PAPA)寻址)寻址 用一个数或符号来确定用一
9、个数或符号来确定I/OI/O存储空间中的一个地址存储空间中的一个地址,以实现对以实现对I/OI/O设备的读写。设备的读写。主要指令有:主要指令有:PORTR PA PORTR PA,Smem Smem PORTW Smem PORTW Smem,PA PA例:例:PORTR FIFO PORTR FIFO,*AR5 AR5 11数据寻址数据寻址 4 4、*(lklk)寻址)寻址 用一个数或符号来确定用一个数或符号来确定数据存储器中的一个地址数据存储器中的一个地址。允许所有使用单数据存储器寻址的指令去访问数据空间允许所有使用单数据存储器寻址的指令去访问数据空间 的任意单元,而不改变的任意单元,而
10、不改变DPDP的值,也不用对的值,也不用对ARAR进行初始化。进行初始化。注意:注意:1 1)*(1k)(1k)寻址时,指令的长度扩展寻址时,指令的长度扩展1 1个字。个字。2 2)*(1k)(1k)寻址的指令不能与循环指令寻址的指令不能与循环指令(RPT(RPT,RPTZ)RPTZ)一起使一起使用。用。例:例:LD LD *(EXAMPLEEXAMPLE),),A A 12数据寻址数据寻址 将累加器的内容作为地址去访问程序存储单元。将累加器的内容作为地址去访问程序存储单元。用途:用于程序存储空间与数据存储空间之间的数据传输。用途:用于程序存储空间与数据存储空间之间的数据传输。注意:对大多数对
11、大多数C54xC54x,用累加器的低,用累加器的低1616位作为程序存储器的地位作为程序存储器的地址,但是址,但是C548C548、C549C549、C5410C5410和和C5416C5416有有2323根地址线,根地址线,C5402C5402有有2020根地址线,根地址线,C5420C5420有有1818根地址线,这些芯片的程序存储根地址线,这些芯片的程序存储器单元分别由累加器的低器单元分别由累加器的低2323位、低位、低2020位、低位、低1818位来确定。位来确定。上述两条指令重复使用时,累加器上述两条指令重复使用时,累加器A A自动增减;自动增减;只能使用累加器只能使用累加器A A寻
12、址程序空间。寻址程序空间。累加器累加器A A用来寻址程序空间。用来寻址程序空间。SmemSmem用来寻址数据空间。用来寻址数据空间。13数据寻址数据寻址 利用数据页指针利用数据页指针DPDP和堆栈指针和堆栈指针SPSP寻址。寻址。CPLCPL0 0时:时:DPDP的的9 9位地址与指令中的位地址与指令中的7 7位地址位地址起来,起来,形成形成1616位的数据存储器存储单元的地址。位的数据存储器存储单元的地址。CPLCPL1 1时:时:SPSP的的1616位地址位地址指令中的指令中的7 7位地址,形成位地址,形成 16 16位的数据存储器存储单元的地址。位的数据存储器存储单元的地址。基地址:存放
13、在数据页指针寄存器(基地址:存放在数据页指针寄存器(DPDP)或者堆栈指针寄存器(或者堆栈指针寄存器(SPSP)中;)中;偏移量:由指令寄存器的偏移量:由指令寄存器的7 7位最低有效位(位最低有效位(LSBLSB)提供。)提供。14数据寻址数据寻址 直接寻址的特点:直接寻址的特点:指令中只含有数据存储器的低指令中只含有数据存储器的低7 7位地址位地址(偏移地址偏移地址dmad)dmad);16 16位数据存储器地址由基地址和偏移地址共同构成。位数据存储器地址由基地址和偏移地址共同构成。直接寻址指令格式直接寻址指令格式 15数据寻址数据寻址 当当CPL=0时时直接寻址直接寻址指指 令令15876
14、0操作码操作码I=0dmad页指针页指针DP(位于位于ST0中中)高高9位位低低7位位16数据寻址数据寻址 当当CPL=1时时直接寻址直接寻址指指 令令158760操作码操作码I=0dmad高高9位位低低7位位16位堆栈指针位堆栈指针SP直接寻址标识:直接寻址标识:变量前加变量前加,如如x;在偏移量前加在偏移量前加,如如5。17数据寻址数据寻址 数据存储器数据存储器地址地址数据数据01800001.X X:01FF1000y y:02000500.DPDPdmadma0 0000 0011111 1111操作码操作码 0 111 1111机器码机器码x 0 0000 0011111 11110
15、 1 F FxA00 0000 1000操作码操作码 0 000 0000机器码机器码000 0000y 0 0000 0011000 00000 1 8 0y0180H0001+1001100100 000000 0000 1001ADPDP0 0000 0011dmaddmad111 11110 1 F FxA00 0000 1000DPDP0 0000 0100dmadma000 00000 2 0 0y05000200H05000200H+005100 0000 00 0000 150000 0000 1500A结果结果注意:注意:若一段代码的所有直接寻址指令都访若一段代码的所有直接寻
16、址指令都访问问同一个数据页,则只需在该代码的最前面装同一个数据页,则只需在该代码的最前面装载一次载一次 DP DP 值;值;如果要访问不同的数据页,则需要改如果要访问不同的数据页,则需要改变变DPDP值。值。18数据寻址数据寻址 19数据寻址数据寻址 利用辅助寄存器(利用辅助寄存器(AR0AR0AR7)AR7)作为地址指针。作为地址指针。辅助寄存器前面的符号辅助寄存器前面的符号*指示当前指示当前ARAR,且使用间接寻址模式。,且使用间接寻址模式。1 1、单操作数间接寻址、单操作数间接寻址 用来完成存储单元中用来完成存储单元中1616位单数据的读写操作。位单数据的读写操作。共可以形成共可以形成1
17、616种寻址方式。种寻址方式。20数据寻址数据寻址 单操作数间接寻址形式单操作数间接寻址形式MOD域域 操作句法操作句法功功 能能说说 明明0000 *ARx 地址地址=ARxARx ARx的内容为数据存储器地址的内容为数据存储器地址0001 *ARx-地址地址=ARxARx ARx ARx=ARx-1ARx-1 寻址结束后,寻址结束后,ARx地址减地址减1。注注1 0010 *ARx+地址地址=ARxARx ARx ARx=ARx+1ARx+1 寻址结束后,寻址结束后,ARx地址加地址加1。注注1 0011 *+ARx ARxARx=ARx+1ARx+1 地址地址=ARxARx ARx中的地
18、址加中的地址加1后,再寻址。后,再寻址。注注1、注注2、注注3 0100 *ARx-0B 地址地址=ARx ARx ARx ARx=B(ARx-AR0)B(ARx-AR0)寻址结束后,寻址结束后,ARx减去减去AR0的值并进的值并进行位反转。行位反转。注注11:寻址:寻址1616位字时增位字时增/减量为减量为1 1,3232位字时增位字时增/减量为减量为2 2。注注22:这种方式只能用写操作指令。:这种方式只能用写操作指令。注注33:这种方式不允许对存储器映像寄存器寻址。:这种方式不允许对存储器映像寄存器寻址。21数据寻址数据寻址 单操作数间接寻址形式单操作数间接寻址形式MOD域域 操作句法操
19、作句法功功 能能说说 明明0101 *ARx-0 地址地址=ARx ARx ARx ARx=ARx-AR0ARx-AR0寻址结束后寻址结束后,ARx减去减去AR0的的值。值。0110 *ARx+0 地址地址=ARx ARx=ARx+AR0 寻址结束后,寻址结束后,ARx加上加上AR0的值。0111 *ARx+0B 地址地址=ARxARx ARx ARx=B(ARx+AR0)B(ARx+AR0)寻址结束后,寻址结束后,ARx ARx加上加上AR0AR0的的值并进行位反转。值并进行位反转。1000 *ARx-%地址地址=ARxARx ARx ARx=Circ(ARx-1)Circ(ARx-1)寻址
20、结束后,寻址结束后,ARx中的地址值中的地址值按循环减的方法减按循环减的方法减1。注注1 1001 *ARx-0%地址地址=ARxARx ARx ARx=Circ(ARx-AR0)Circ(ARx-AR0)寻址结束后,按循环减的方法寻址结束后,按循环减的方法从从ARx中减去中减去AR0中的值中的值 注注11:寻址:寻址1616位字时增位字时增/减量为减量为1 1,3232位字时增位字时增/减量为减量为2 2。22数据寻址数据寻址 单操作数间接寻址形式单操作数间接寻址形式 MOD域域 操作句法操作句法功功 能能说说 明明1010 *ARx+%地址地址=ARxARx ARx ARx=Circ(AR
21、x+1)Circ(ARx+1)寻址结束后,寻址结束后,ARx中的地址值中的地址值按循环加的方法加按循环加的方法加1。注注1 1011 *ARx+0%地址地址=ARx=ARx ARx=Circ(ARx+AR0)ARx=Circ(ARx+AR0)寻址结束后,按循环加的方法寻址结束后,按循环加的方法将将AR0中的值加到中的值加到ARx。1100 *ARx(lk)地址地址=ARx+lk=ARx+lk ARx=ARx ARx=ARx以以ARx与与16位数之和作为地址,位数之和作为地址,寻址结束后,寻址结束后,ARx中的值不变。中的值不变。1101 *+ARx(lk)地址地址=ARx+lkARx+lk A
22、RxARx=ARx+lkARx+lk将一个将一个16位带符号数加到位带符号数加到ARx,然后寻址。然后寻址。注注31110 *ARx(lk)%地址地址=Circ(ARx+lk)Circ(ARx+lk)ARxARx=Circ(ARx+lk)Circ(ARx+lk)将一个将一个16位带符号数按循环加位带符号数按循环加的方法加至的方法加至ARx,然后再寻址,然后再寻址注注31111 *(lk)地址地址=(lk)(lk)利用利用16位无符号数作为地址位无符号数作为地址,寻址数据存储器寻址数据存储器注注3 注注33:这种方式不允许对存储器映像寄存器寻址。:这种方式不允许对存储器映像寄存器寻址。23数据寻
23、址数据寻址 特殊的间接寻址功能:特殊的间接寻址功能:1)1)循环寻址循环寻址循环缓冲区是一个滑动窗口,包含着最近的数据。循环缓冲区是一个滑动窗口,包含着最近的数据。循环寻址用表示循环寻址用表示 循环缓冲区的参数主要包括:循环缓冲区的参数主要包括:长度寄存器(长度寄存器(BKBK)、有效基地址()、有效基地址(EFBEFB)和尾地址()和尾地址(EOBEOB)BKBK定义了循环缓冲区的大小定义了循环缓冲区的大小R R。要求缓冲区地址始于最低。要求缓冲区地址始于最低N N位为位为零的地址,且零的地址,且R R值满足值满足(2n)R(2n)R,R R值必须要放入值必须要放入BKBK。缓冲区的起始地址
24、缓冲区的起始地址缓冲区的底部地址缓冲区的底部地址循环缓冲区的偏移量就是当前循环缓冲区的偏移量就是当前ARxARx的低的低N N位,位,步长就是一次加到辅助寄存器或从辅助寄存器中减去的值步长就是一次加到辅助寄存器或从辅助寄存器中减去的值 24数据寻址数据寻址 25例例5-5 5-5 下面的代码完成循环寻址功能,并将循环缓冲区下面的代码完成循环寻址功能,并将循环缓冲区 内相关单元的内容加载到累加器内相关单元的内容加载到累加器B B。STM#1000H,AR2STM#1000H,AR2STM#5,BKSTM#5,BKSTM#2,AR0STM#2,AR0ST#0ST#0,*AR2+AR2+ST#1ST
25、#1,*AR2+AR2+ST#2ST#2,*AR2+AR2+ST#3ST#3,*AR2+AR2+ST#4ST#4,*AR2+AR2+;将;将0-40-4依次放到数据单元依次放到数据单元1000H-1004H1000H-1004H中。中。STM#1000H,AR2 STM#1000H,AR2 ;循环缓冲区为;循环缓冲区为1000H-1004H1000H-1004H。LD LD *AR2+0%,B AR2+0%,B ;B=(1000H)=0B=(1000H)=0。LD LD *AR2+0%,B AR2+0%,B ;B=(1002H)=2B=(1002H)=2。LD LD *AR2+%,B AR2+
26、%,B ;B=(1004H)=4B=(1004H)=4。LD LD *+AR2(3)%,B+AR2(3)%,B;B=(1003H)=3B=(1003H)=3。LD LD *+AR2(3)%,B +AR2(3)%,B ;B=(1001H)=1B=(1001H)=1。数据寻址数据寻址 26数据寻址数据寻址 循环缓冲区的长度循环缓冲区的长度R R小于小于2N2N,且地址从一个低,且地址从一个低N N 位为位为0 0的地址开始。的地址开始。步长小于或等于缓冲区的长度;步长小于或等于缓冲区的长度;所使用的辅助寄存器必须指向缓冲区单元。所使用的辅助寄存器必须指向缓冲区单元。27数据寻址数据寻址 2 2)位
27、反转寻址)位反转寻址反转寻址将反转寻址将AR0AR0加到辅助寄存器中,地址以位反转方式产生。加到辅助寄存器中,地址以位反转方式产生。也就是说,两者相加时,也就是说,两者相加时,进位是从左向右进位是从左向右反向传播的,反向传播的,而不是通常加法中的从右向左。而不是通常加法中的从右向左。例例5-65-6:假设辅助寄存器为:假设辅助寄存器为8 8位,位,AR2AR2值为值为0110 0000b,0110 0000b,AR0AR0的值为的值为0000 l000b0000 l000b,下面例子给出了位反转寻址中,下面例子给出了位反转寻址中AR2AR2值修改的顺序和修改后值修改的顺序和修改后AR2AR2的
28、值。的值。*AR2+0B AR2+0B ;AR2AR20110 0000 0110 0000(第(第0 0次的值)次的值)*AR2+0B AR2+0B ;AR2AR20110 1000 0110 1000(第(第1 1次的值)次的值)*AR2+0B AR2+0B ;AR2AR20110 0100 0110 0100(第(第2 2次的值)次的值)*AR2+0B AR2+0B ;AR2AR20110 1100 0110 1100(第(第3 3次的值)次的值)*AR2+0B AR2+0B ;AR2AR20110 0010 0110 0010(第(第4 4次的值)次的值)*AR2+0B AR2+0B
29、;AR2AR20110 1010 0110 1010(第(第5 5次的值)次的值)*AR2+0B AR2+0B ;AR2AR20110 0110 0110 0110(第(第6 6次的值)次的值)*AR2+0B AR2+0B ;AR2AR20110 1110 0110 1110(第(第7 7次的值)次的值)28位反转寻址位反转寻址存储单元地址存储单元地址变换结果变换结果位码倒序寻址位码倒序寻址位码倒序寻址结果位码倒序寻址结果0000X(0)0000X(0)0001X(8)1000X(1)0010X(4)0100X(2)0011X(12)1100X(3)0100X(2)0010X(4)0101X(
30、10)1010X(5)0110X(6)0110X(6)0111X(14)1110X(7)1000X(1)0001X(8)1001X(9)1001X(9)1010X(5)0101X(10)1011X(13)1101X(11)1100X(3)0011X(12)1101X(11)1011X(13)1110X(7)0111X(14)1111X(15)1111X(15)数据寻址数据寻址 29数据寻址数据寻址 2 2、双操作数间接寻址、双操作数间接寻址 双操作数寻址用于完成两个读操作或者一个读并行一个双操作数寻址用于完成两个读操作或者一个读并行一个写的操作。采用这种方式的指令代码都为写的操作。采用这种方式
31、的指令代码都为1 1个字长并且只能个字长并且只能以间接寻址方式工作。以间接寻址方式工作。双操作数间接寻址指令格式双操作数间接寻址指令格式30数据寻址数据寻址 双操作数寻址双操作数寻址 XmodXmod或或YmodYmod操作码操作码功功 能能说说 明明0000*ARxARx地址地址=ARx=ARxARxARx中的内容是数据存中的内容是数据存储器地址储器地址0101*ARx-ARx-地址地址=ARx=ARxARx=ARx-1ARx=ARx-1寻址后,寻址后,ARxARx的地址减的地址减1 11010*ARx+ARx+地址地址=ARx=ARxARx=ARx+1ARx=ARx+1寻址后,寻址后,AR
32、xARx的地址加的地址加1 11111*ARx+0%ARx+0%地址地址=ARx=ARxARx=circ(ARx+AR0)ARx=circ(ARx+AR0)寻址后,寻址后,AR0AR0以循环寻以循环寻址方式加到址方式加到ARxARx中去中去31辅助寄存器使用规则辅助寄存器使用规则XarXar或或YarYar辅助寄存器辅助寄存器0000AR2AR20101AR3AR31010AR4AR41111AR5AR5数据寻址数据寻址 32数据寻址数据寻址 例例5-75-7:MAC MAC*AR5+,AR5+,*AR4+,A,BAR4+,A,B指令格式为:指令格式为:MAC Xmem,Ymem,src,ds
33、tMAC Xmem,Ymem,src,dst指令功能为:指令功能为:dst=src+Xmemdst=src+Xmem*Ymem,T=XmemYmem,T=Xmem由表由表5-45-4和表和表5-55-5可知:可知:Xmod=Ymod=10BXmod=Ymod=10B,Xar=11BXar=11B,Yar=10BYar=10B指令执行前指令执行前指令执行后指令执行后累加器累加器A A:00 0000 0010H00 0000 0010H;累加器累加器A A:00 0000 0012H00 0000 0012H;T T:0000H0000HT T:0001H 0001H AR4AR4:2000H2
34、000HAR4AR4:2001H 2001H AR5AR5:1000H1000HAR5AR5:1001H1001H数据存储器:数据存储器:数据存储器:数据存储器:1000H1000H:0001H0001H;1000H1000H:0001H0001H2000H2000H:0002H0002H;2000H2000H:0002H0002H33数据寻址数据寻址 1.1.采用直接寻址方式采用直接寻址方式2.2.采用间接寻址方式采用间接寻址方式高高9 9位数据存储器地址置位数据存储器地址置0 0,利用指令中的低,利用指令中的低7 7位地址位地址直接访问直接访问MMRMMR。高高9 9位数据存储器地址置位数
35、据存储器地址置0 0,按照当前辅助寄存器,按照当前辅助寄存器ARxARx的的低低7 7位地址访问位地址访问MMRMMR。3 3、MMRMMR寻址特点:寻址特点:寻址速度快,对寻址速度快,对MMRMMR执行写操作开销小;执行写操作开销小;可直接利用可直接利用MMRMMR的名称快速访问数据存储空间的名称快速访问数据存储空间0 0页资源;页资源;只能寻址数据空间的只能寻址数据空间的0 0页单元。页单元。4 4、用途:不改变、用途:不改变DPDP、SPSP的情况下,修改的情况下,修改MMRMMR中的内容。中的内容。34数据寻址数据寻址 35数据寻址数据寻址 堆栈:当发生中断或子程序调用时,用来自动保存
36、堆栈:当发生中断或子程序调用时,用来自动保存PCPC 内容以及保护现场或传送参数。内容以及保护现场或传送参数。C54xC54x的堆栈是向低地址生长,并由的堆栈是向低地址生长,并由1616位堆栈指针位堆栈指针SPSP管理。管理。SPSP总是指向栈顶。总是指向栈顶。堆栈寻址:利用堆栈寻址:利用SPSP指针,按照先进后出的原则进行寻址。指针,按照先进后出的原则进行寻址。进栈操作时,进栈操作时,SPSP先减小,然后数据进入堆栈;先减小,然后数据进入堆栈;出栈操作时,数据先出栈,然后出栈操作时,数据先出栈,然后SPSP增加。增加。36数据寻址数据寻址 数据存储器数据存储器03FFH1234SP5678s
37、mem smem 37数据寻址数据寻址 有有5 5条指令采用堆栈寻址方式:条指令采用堆栈寻址方式:1 1、PSHD PSHD 将数据存储器中的一个数压入堆栈。将数据存储器中的一个数压入堆栈。2 2、PSHM PSHM 将一个将一个MMRMMR中的值压入堆栈。中的值压入堆栈。3 3、POPD POPD 从堆栈弹出一个数至数据存储单元。从堆栈弹出一个数至数据存储单元。4 4、POPM POPM 从堆栈弹出一个数至从堆栈弹出一个数至MMRMMR。5 5、FRAME offset FRAME offset 递增递减堆栈指针而不影响堆栈内容。递增递减堆栈指针而不影响堆栈内容。38数据寻址数据寻址 例例5
38、-85-8:堆栈寻址例题。:堆栈寻址例题。0080 PSHD 0080 PSHD *AR2 AR2 0081 PSHM AR0 0081 PSHM AR0 0082 CALL subr0082 CALL subr0084 POPM AR00084 POPM AR00085 POPD 0085 POPD *AR2AR20086 FRAME -20086 FRAME -20087 subr LD 0087 subr LD 2 2,DPDP0088 ST 0088 ST 1234H 100h1234H 100h0089 RET 0089 RET AR2AR2指向包含指向包含1234H1234H的存储
39、器位置,的存储器位置,AR0AR0的内容为的内容为0100H0100H。39立即寻址立即寻址操作数直接包含在指令中,没有操作数直接包含在指令中,没有寻找数据地址的过程,但需占用寻找数据地址的过程,但需占用程序存储空间,且数值不能改变程序存储空间,且数值不能改变常数或对寄存器初始化常数或对寄存器初始化绝对寻址绝对寻址能寻址所有数据存储空间,但运能寻址所有数据存储空间,但运行速度慢,需要较大的存储空间行速度慢,需要较大的存储空间用于对速度要求低的场合用于对速度要求低的场合累加器寻址累加器寻址累加器的内容作为地址去访问程累加器的内容作为地址去访问程序存储单元序存储单元完成程序存储空间与数据完成程序存
40、储空间与数据存储空间之间的数据传输存储空间之间的数据传输直接寻址直接寻址指令中包含低指令中包含低7为地址,与为地址,与DP或或SP形成形成16位地址,可单周期寻址位地址,可单周期寻址1个数据页(个数据页(128字)字)寻址速度快,用于对速度寻址速度快,用于对速度要求高的场合要求高的场合间接寻址间接寻址利用辅助寄存器作为地址指针进利用辅助寄存器作为地址指针进行寻址,并可自动增、减、变址行寻址,并可自动增、减、变址和循环寻址和循环寻址用于需按固定步长步进寻用于需按固定步长步进寻址的场合址的场合MMR寻址寻址基地址为基地址为0的直接寻址的直接寻址直接利用直接利用MMR名字快速名字快速访问访问堆栈寻址
41、堆栈寻址用堆栈指针按先进后出原则寻址用堆栈指针按先进后出原则寻址数据存至堆栈或从其弹出数据存至堆栈或从其弹出数据寻址数据寻址 40程序寻址程序寻址41程序寻址程序寻址复位复位PC=FF80h顺序执行指令顺序执行指令PC=PC+1分支转移分支转移用紧跟在分支转移指令后面的用紧跟在分支转移指令后面的16位立即数加载位立即数加载PC由累加器分支转移由累加器分支转移用累加器用累加器A或或B的低的低16位立即数加载位立即数加载PC块重复循环块重复循环假如假如ST1中的块重复有效位中的块重复有效位BRAF=1,当,当PC+1等于块重复结等于块重复结束地址(束地址(REA)+1时,将块重复起始地址(时,将块
42、重复起始地址(RSA)加载)加载PC子程序调用子程序调用将返回地址压入堆栈,并用紧跟在调用指令后面的将返回地址压入堆栈,并用紧跟在调用指令后面的16位立即位立即数加载数加载PC。返回指令将返回地址从栈顶弹出至。返回指令将返回地址从栈顶弹出至PC,回到原,回到原先的程序处继续执行。先的程序处继续执行。从累加器从累加器调用子程序调用子程序将将PC+1压入椎栈,用累加器压入椎栈,用累加器A或或B的低的低16位加载位加载PC。返回。返回指令将栈顶弹出至指令将栈顶弹出至PC,回到原先的程序处继续执行。,回到原先的程序处继续执行。硬件中断硬件中断或软件中断或软件中断将将PC压入堆栈,用适当的中断向量地址加
43、载压入堆栈,用适当的中断向量地址加载PC。中断返回。中断返回时,将栈顶弹出至时,将栈顶弹出至PC,继续执行被中断了的子程序。,继续执行被中断了的子程序。42复位复位XPC=0顺序执行指令顺序执行指令XPC保持不变保持不变长转移长转移长立即数的长立即数的16-22位加载位加载XPC由累加器长转移由累加器长转移累加器的累加器的16-22位加载位加载XPC子程序长调用子程序长调用XPC压入栈顶,指令中立即数的压入栈顶,指令中立即数的16-22位加载位加载XPC从累加器长调用子程序从累加器长调用子程序XPC压入栈顶,调用累加器的压入栈顶,调用累加器的16-22位加载位加载XPC长返回长返回栈顶弹出并加
44、载栈顶弹出并加载XPC程序寻址程序寻址43功能:可执行分支转移、循环控制、子程序操作。功能:可执行分支转移、循环控制、子程序操作。方法:通过分支转移指令改写方法:通过分支转移指令改写PCPC,可以改变程序的流向。,可以改变程序的流向。指令:指令:BDBD、BACCDBACCD、BCDBCD、BANZDBANZD当调用子程序或函数时,当调用子程序或函数时,DSPDSP就会中断原先的程序,转移到就会中断原先的程序,转移到程序存储器的其他地址继续运行。程序存储器的其他地址继续运行。调用时,下条指令的地址被压入堆栈,以便返回时将这个调用时,下条指令的地址被压入堆栈,以便返回时将这个地址弹出至地址弹出至
45、PCPC,使中断的程序继续执行。,使中断的程序继续执行。指令:指令:CALLDCALLD、CALADCALAD、RETDRETD、RETEDRETED RETFD RETFD、CCDCCD、RCDRCD程序寻址程序寻址44程序寻址程序寻址包括程序控制指令和存储指令在内的一些包括程序控制指令和存储指令在内的一些C54xC54x指令,指令,只有当一个条件或多个条件得到满足时才能执行。只有当一个条件或多个条件得到满足时才能执行。此时,程序执行的方向会随着条件是否满足而发生改变。此时,程序执行的方向会随着条件是否满足而发生改变。1 1、重复执行单条指令、重复执行单条指令 功能:重复执行下一条指令功能:
46、重复执行下一条指令 重复执行的次数等于(重复执行的次数等于(RC)+lRC)+l。RC RC中的内容,不能编程设置,只能由重复指令中的中的内容,不能编程设置,只能由重复指令中的 操作数加载。操作数操作数加载。操作数n n的最大值为的最大值为65 53565 535。一旦重复指令被取指、译码,直到重复循环完成以前,一旦重复指令被取指、译码,直到重复循环完成以前,对所有的中断(包括对所有的中断(包括 ,但不包括,但不包括 )均不响应。)均不响应。NMIRS452 2、程序块重复操作、程序块重复操作 功能:将重复操作的范围扩大到任意长度的循环回路。功能:将重复操作的范围扩大到任意长度的循环回路。C5
47、4xC54x内部的块重复计数器(内部的块重复计数器(BRCBRC)、块重复起始地址)、块重复起始地址寄存器(寄存器(RSARSA)、块重复结束地址寄存器()、块重复结束地址寄存器(REAREA)与)与程序块重复指令程序块重复指令RPTBRPTB一道,对紧随一道,对紧随RPTBRPTB、由若干条指令、由若干条指令构成的程序块进行重复操作。构成的程序块进行重复操作。程序寻址程序寻址46程序寻址程序寻址 将处理器将处理器PMSTPMST中的中断向量指针中的中断向量指针IPTRIPTR置成置成1FFh1FFh。将处理器将处理器PMSTPMST中的中的MP/MCMP/MC位置成与引脚位置成与引脚MP/M
48、CMP/MC相同的数值。相同的数值。RS RS被拉高。被拉高。将将PCPC置成置成FF80hFF80h。扩展的程序计数器扩展的程序计数器XPCXPC寄存器清寄存器清0 0。无论无论MP/MCMP/MC状态如何,将状态如何,将FF80hFF80h加到地址总线。加到地址总线。数据总线变成高阻状态。数据总线变成高阻状态。控制线均处于无效状态。控制线均处于无效状态。产生产生IACKIACK信号。信号。ST1 ST1中的中断方式位中的中断方式位INTMINTM置置1 1,关闭所有的可屏蔽中断。,关闭所有的可屏蔽中断。中断标志寄存器中断标志寄存器IFRIFR清清0 0。47将单循环计数器(将单循环计数器(
49、RCRC)清零。)清零。产生同步复位信号(产生同步复位信号(SRESETSRESET),对外围电路初始化。),对外围电路初始化。将下列状态位置成初始值:将下列状态位置成初始值:ARP ARP0 CLKOFF0 CLKOFF0 HM=0 SXM=l 0 HM=0 SXM=l ASM ASM0 CMPT=0 INTM=1 TC=1 0 CMPT=0 INTM=1 TC=1 AVIS AVIS0 CPL=0 OVA=0 XF=10 CPL=0 OVA=0 XF=1 BRAF BRAF0 DP=0 OVB=0 C0 DP=0 OVB=0 C1 1 DROM=0 OVLY=0 C16 DROM=0 OV
50、LY=0 C160 FRCT=0 0 FRCT=0 OVM=0 OVM=0注意:注意:复位期间对其余的状态位以及堆栈指针没有初始化。复位期间对其余的状态位以及堆栈指针没有初始化。因此,用户在程序中必须对它们适当地进行初始化。因此,用户在程序中必须对它们适当地进行初始化。程序寻址程序寻址481 1、C54xC54x既支持软件中断,也支持硬件中断:既支持软件中断,也支持硬件中断:1 1)由程序指令()由程序指令(INTRINTR、TRAPTRAP或或RESETRESET)要求的软件中断。)要求的软件中断。2 2)由外围设备信号要求的硬件中断:)由外围设备信号要求的硬件中断:受外部中断口信号触发的外