MODOS DE DIRECCIONAMIENTO De los DSPs...

22
MODOS DE DIRECCIONAMIENTO De 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

Transcript of MODOS DE DIRECCIONAMIENTO De los DSPs...

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

MAPA DE MEMORIA DEL F280049

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

L. Escobar

UNIDAD ARAU: Direccionamiento Directo e indirecto

L. Escobar

UNIDAD CENTRAL DE PROCESO

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

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

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 CIRCULAR

L. Escobar

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.