MODOS DE DIRECCIONAMIENTODe los DSPs TMS320F28xxx
L. Escobar
Son las formas de transferir datos de memoria a las unidades operativas y viceversa
- Inmediato
- Directo
- Indirecto Con acarreo inverso Circular
- Por pila - A registros
ARQUITECTURA GENERAL
L. Escobar
Unidad De Control
Unidad Central de Proceso
Unidad
De
Direcciona-
miento
Interfaz APeriféricos
B. Datos
B. Direcciones
Reset
Mem_DatoMem_Prog
PCB.
Programa REGS
MULT. Shift
ALU
Ctes.
Código
L. Escobar
LENGUAJE ENSAMBLADOR
DIRECTIVAS de Ensamblador
INSTRUCCIONES de Ensamblador
SINTAXIS
Etiqueta Comando Op,Op,Op,.. ; Comentarios
Comando
.mmregs ; reconoce abreviaturas de registros map.N .set 99 ; declara N = constante = 99 dx .word 0ABh ; Reserva y escribe una loc. Para x
MOV AL, #0 ; AL = 0 MOV AL,@datA ; Carga a AL el dato datA ADD AL,@datB ; AL = AL + datB MOV @datC,AL ; Almacena AL en localización de datC
Estructura general de un programa en Lenguaje Ensamblador
.mmregs .global _c_int00
.datax .word 1,2,3,4,5 h .word 1,2,3,2,1y .word 0
N .set 5
.text MOVL XAR1,#x MOVL XAR2,#h MOVL ACC, #0 RPT #N-1|| MAC P,*XAR1++,*AR7++ ADDL ACC,P MOVL DP,#y MOVL @y, ACC .end
Generalidades
Programa Principal
DIRECCIONAMIENTO INMEDIATO
L. Escobar
Una constante específica es el operando de la instrucción y se codifica en un campo del código de la instrucción.
- Una constante corta puede ser menor de 8 bits - Una constante larga es 16 de bits, admite corrimientos,
Ejemplos:
ADDB AL,#N ; AL = AL + N, N = cte de 8 bits ADD ACC,#NL,4 ; ACC = ACC + NL << 4 MOV AR0,#10 ; Carga el registro AR0 con 10 MOVL XAR6,#x ; Carga la dirección de x en XAR6 MOVW DP,#t ; Carga la página de datos t en DP
el código de instrucción ocupa dos palabras de código
DIRECCIONAMIENTO DIRECTO
L. Escobar
- Divide a la memoria dato en Páginas (64,536 de 64 localidades = 4 M word)- En la instrucción viene una parte de la dirección del dato a transferir- Una dirección efectiva de 22 bits se forma de: los 16 bits de la página y 6 bits del offset del dato- Utiliza un apuntador de página (DP) o el Stack Pointer (SP) como base
Mem_Dato
Número de página DP
Desplazamiento u offset
DP (16b) offset (6b)Dirección de dato =
DIRECCIONAMIENTO DIRECTO
L. Escobar
Ejemplo:
CLRC AMODE ; AMODE = 0, modo por defecto de ; fams. C28x MOVW DP,#datA ; Carga DP con la página de datA MOV AL,@datA ; Carga a AL el dato datA ADD AL,@datB ; AL = AL + datB MOV @datC,AL ; Almacena AL en loc. datC* SETC AMODE ; AMODE=1, compatible con fam. C2xxx MOVW DP,#datA ; MOV AL,@@datA ; AL = dato datA SUB AL,@@datB ; AL = AL - datB MOV @@datC,AL ; loc. datC = AL
DIRECCIONAMIENTO INDIRECTO
L. Escobar
- Es uno de los modos de direccionamiento más poderosos en máquina digitales- Utiliza ocho registros auxiliares XARi de 32b para apuntar a memoria dato- Puede utilizar la parte baja de los XARi, para manejar ARi a 16 bits- Los registros XARi indirectamente contienen la dirección del dato a transferir - Tiene una unidad generadora de dirección: ARAU- ARAU efectúa aritmética sobre los registros XARi - Los operandos de una instrucción son : Un asterísco *, el ARi a usar y un modificador *ARi++ Post-incrementa Ari después de accesar el dato *++ARi Pre-incrementa ARi antes de accesar el dato
ARi
Mem_Dato
Dato
Modificador
Modificador
DIRECCIONAMIENTO INDIRECTO
L. Escobar
MODIFICADORES
*XARi XARi contiene una dirección de memoria dato (sin modificador) *XAri- - Post-decrementa XARi después de accesar el dato *XARi++ Post-incrementa XARi después de accesar el dato *++XARi Pre-incrementa XARi antes de accesar dato *--XARi Pre-decrementa XARi antes de accesar dato *XARi0- Después de accesar el dato, al XARi se le resta AR0 *XARi0+ Después de accesar el dato, al XARi se le suma AR0
*XARiBR0-- Después de accesar el dato, al XARi se le resta AR0 en acarreo inverso (para la FFT) *XARiBR0++ Después de accesar el dato, a XARi se le suma AR0 en acarreo inverso (para la FFT)
*XARi%-- Post-decrementa circularmente XAR6 o XAR1 después de accesar el dato*XARi%++ Post-incrementa circularmente XAR6 o XAR1 después de accesar el dato
*XARi-0% Post-decrementa circularmente XAR6 o XAR1 en AR0 después de accesar el dato *XARi+0% Post-incrementa circularmente XAR6 o XAR1 en AR0 después de accesar el dato
DIRECCIONAMIENTO INDIRECTO
L. Escobar
Ejemplo:
** Copia datos del arreglo Vec1 al Vec2
MOVL XAR2,#Vec1 ; XAR2 = dir. de Vec1 MOVL XAR3,#Vec2 ; XAR3 = dir. de Vec2 MOV AR0,#N-1 ; XAR0 = constante N-1, para contador de Ciclo
* Copia N datos del vector Vec1 al vector Vec2Ciclo: MOVL ACC,*XAR2++ ; ACC = dat. en dir. XAR2, XAR2=XAR2+2 MOVL *XAR3++,ACC ; guarda ACC en dir. XAR3, XAR3=XAR3+2 BANZ Ciclo,AR0 -- ; realiza el Ciclo hasta que AR= 0, ; post decrementa AR0
DIRECCIONAMIENTO CIRCULAR
L. Escobar
- Ve a un bloque (buffer) de memoria como si estuviera en forma circular- Es un modificador del direccionamiento indirecto, - Todo buffer circular de tamaño R debe empezar en límites (fronteras) de N bits- Los N bits LSB de la dirección base del buffer circular deben ser cero, donde N es un número entero menor que satisface 2N > R.
Reglas:- Poner la dirección (parte baja) del buffer circular en una frontera 2N, donde 2N es mayor que el tamaño del buffer circular. - Utilizar un paso menor o igual al buffer circular. - Un registro ARi a usar debe estar dentro del buffer.
DIRECCIONAMIENTO CIRCULAR
L. Escobar
Pseudocódigo
if ( 0 <= ARi + paso < BK ) ARi = ARi + paso elseif ( ARi + paso >= BK ) ARi = ARi + paso - BK elseif (ARi + paso < 0) ARi = ARi + paso + BK end
Inicio
Fin
X(0)
X(1)
X(7)
ARi
DIRECCIONAMIENTO DIRECTO POR STACK
L. Escobar
EJEMPLO:* AMODE = 0, Operando *-SP[6bits] , dir = SP - 6b ADD AL,*-SP[5] ; AL = AL + dato en loc SP - 5 MOV *-SP[8],AL ; Almacena AL en loc. SP - 8 ADDL ACC,*-SP[12] ; ACC = ACC + dato en loc. SP - 12 MOVL *-SP[34],ACC ; Almacena ACC en loc SP - 34* PUSH: AMODE no afecta, Si(loc16), SP = SP + 1; si(loc32), SP = SP + 2 MOV *SP++,AL ; Pone AL (16b) en la parte alta del SP, SP = SP + 1 MOVL *SP++,P ; Pone P (32b) en la parte alta del SP, SP = SP+2* POP: AMODE no afecta , Si(loc16), SP = SP - 1; si(loc32), SP = SP - 2 ADD AL,*--SP ; El contenido de TOS lo pone en AL, SP = SP-1 MOVL ACC,*--SP ; El contenido de TOS lo pone en ACC, SP = SP-2 ; TOS: parte alta de la pila
L. Escobar
DIRECCIONAMIENTO A REGISTROS
Consiste en la transferencia, intercambio y operaciones con los registros principales
Operandos de direccionamiento a registros
DIRECCIONAMIENTO A REGISTROS
L. Escobar
* A 32 bits MOVL XAR2,@ACC ; carga XAR2 con ACC MOVL @ACC,XT ; carga ACC con XT ADDL ACC,@ACC ; ACC = ACC + ACC MOVL XAR1,@P ; carga XAR1 con P MOVL @P,XT ; P = XT ADDL ACC,@P ; ACC = ACC + P MOVL XAR7,@XT ; XAR7 = XT MOVL P,@XT ; P = XT ADDL ACC,@XT ; ACC = ACC + XT MOVL XAR1,@XAR3 ; XAR1 = XAR3 MOVL P,@XAR4 ; P = XAR4 ADDL ACC,@XAR5 ; ACC = XAR5
* Utilizando parte baja o alta a 16 bits MOV PH,@AL ; PH = AL ADD AH,@AL ; AH = AH + AL MOV T,@AL ; T = AL
MOV PH,@AH ; PH = AH ADD AL,@AH ; AL = AL + AH MOV T,@AH ; T = AH MOV PH,@PL ; PH = PL ADD AL,@PL ; AL = AL + PL MOV T,@PL ; T = PL MOV PL,@PH ; PL = PH ADD AL,@PH ; AL = AL + PH MOV T,@PH ; T = PH
Ejemplos:
L. Escobar
Formato de archivo de datos para CCS y TI
1651 FORMATO Dir. Inicio Num. Pag. Longitud
Datos
Encabezado
1651: Número mágico (de TI)FORMATO: 1) Hexa 2) Entero 3) Entero largo 4) FlotanteDir. Inicio: Dirección inicio de datos en memoriaNum. Pag.: 1) Página de datos 2) Página de programaLongitud: Número de datos en el archivo.