Practica 4

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 14

Universidad Nacional Autónoma de México

Facultad de Ingeniería
Ingeniería en Telecomunicaciones

Laboratorio de Procesamiento de Señales Digitales


en Tiempo Real
Práctica 4 “Codificación en ensamblador de
estructuras de control de flujo en el DSP
TMS320C6713”
Profesor: Omar Nieto Crisostomo
Semestre 2022-1

Alumna: Mercado Romero Ana Karen


Objetivos:

 Que el estudiante conocerá una de las formas de codificar las diferentes estructuras
de control de flujo en lenguaje ensamblador para el DSP C6713.
 Que el estudiante conozca la manera de reservar memoria RAM usando directivas
del ensamblador.
 Que el estudiante conozca las herramientas de graficación de señales discretas en
el dominio del tiempo y la frecuencia, mediante las herramientas de depuración que
contiene el Code Composer Studio.
Introducción:
Existen distintas instrucciones de comparación en la familia de dispositivos C67xx como
CMPEQ, CMPGT, CMPLT, CMPGTU, CMPLTU, entre muchas otras, las cuales puede hacer
comparaciones como igualdad que, mayor que y menor que, en los diferentes tipos de
datos: enteros con signo, enteros sin signo, flotantes de precisión simple y flotantes de
precisión doble. Además de estas existen instrucciones de salto, este tipo de familia solo
tiene una instrucción de salto la cual es B, esta permite interrumpir el flujo de ejecución y
saltar a donde se le indique con una etiqueta o un registro.
Dentro de esta familia se pueden trabajar con operaciones condicionales o sentencias de
control, la primera consiste en condicionar la ejecución de la mayoría de las instrucciones,
esto mediante la escritura de una condición previa, esta condición se realiza empleando
cualquiera de los registros A1, A2, B0, B1 y B2 encerrado entre corchetes cuadrados,
mientras que las sentencias de control son las ya conocidas en distintos lenguajes de
programación como las sentencias IF, FOR, WHILE y DO-WHILE.
El mapa de memoria muestra el espacio direcciones de memoria del procesador 6713 con
detalle específico de cómo está ubicada cada región. Por defecto, la memoria interna es
situada al comienzo del espacio de direcciones. Parte de la memoria interna puede ser
reconfigurable vía software como cache L2, en lugar de memoria RAM fija.
En el lenguaje ensamblador se pueden crear archivos objetos el formato de archivo es
COFF, estos tipos de archivos pueden ser ejecutados por los dispositivos TMS320C6000. El
formato COFF hace la programación modular fácil, porque se alienta a pensar en términos
de bloques de código y datos cuando se escribe un programa en ensamblador. A esos
bloques se les llama secciones, y son la unidad más pequeña del archivo objeto, una sección
es un bloque de código o datos que ocupa espacio contiguo, en el mapa de memoria, con
otra sección.

Los archivos objeto COFF contienen tres secciones por defecto:

 .text Contiene código ejecutable


 .data Contiene datos inicializados
 .bss Contiene datos no inicializados
Los que permiten poner información de un archivo ligado son conocidos como*.cmd, así
mismo permiten definir bloques de memoria y secciones.
Una imagen con formato RGB es una matriz de pixeles donde cada pixel es representado
por tres componentes de color rojo (Red), verde (Green) y azul (Blue) en una escala de 0 a
255, cada pixel es codificado con tres bytes, uno por cada componente de color, por tanto,
una imagen son resolución 512x512 a color en formato RGB emplea 512*512*3 = 786,432
bytes para su almacenamiento.

Representación en formato entero de cada componente en imagen de 3x3 RGB.

Representación en formato hexadecimal de cada componente en imagen de 3x3 RGB.

Por otro lado, el formato de imágenes RAW, es un formato en el cual se puede almacenar
una imagen sin compresión, tal cual es obtenida de los sensores CCD (*.raw).
Desarrollo:
1. Crear un nuevo proyecto para la tarjeta DSK C6713.

2. Agregar al proyecto los archivos dados para la realización de la práctica (*.asm,


*.cmd).
3. Abrir el archivo comando.cmd y especifique la sección de datos y sección de código
se guarden en la dirección de memoria SDRAM
Archivo comando.cmd
MEMORY
{
IVECS: org=0h, len=0x220 /*Vectores de interrupcion*/
IRAM: org=0x00000220, len=0x0002FDE0 /*Memoria interna*/
SDRAM: org=0x80000000, len=0x00800000
FLASH: org=0x90000000, len=0x00020000 /*Memoria flash*/
}
SECTIONS
{
.vectores :> IVECS /*vectores de interrupcion*/
.data: >SDRAM /*Sección de datos se guarda en RAM*/
.text: >SDRAM /*Sección de programa se guarda en RAM*/
.bss: >SDRAM
}

4. Reservar memoria suficiente para almacenar un archivo imagen RGB en formato


RAW.
.bss dirImg, 5*1024*1024

5. Elaborar un programa en lenguaje ensamblador para transformar una imagen en


formato RGB sin compresión (RAW) a otra imagen RGB con tonalidad de rojo sobre
grises. La técnica es interpretar cada pixel como un vector en el espacio de color 3D
en el sistema RGB (ver la siguiente figura).
 Código en ensamblador:
.global _main

.bss dirImg, 5*1024*1024 ;Se reserva en


memoria para la imagen

.data
dirY: .float 0.299, 0.587, 0.114 ;Vector de
proyeccion para la escala de grises
dirUmbral: .float 0.8836

.text

_main:
MVKL dirImg, A0
MVKH dirImg, A0

LDW *A0++, A3 ;numero de


renglones -> A3
LDW *A0++, A4 ;numero de
columnas -> A4
LDW *A0++, A5 ;Lee numero de
bytes por pixel
NOP 4

MPYI A3, A4, A1 ;A3*A4->A1


(numero total de pixeles)
InicioDo:
LDBU *A0++, A5 ;A5->Rojo
LDBU *A0++, A6 ;A6->Verde
LDBU *A0++, A7 ;A7->Azul
NOP 4

INTSP A5, A5 ;Convierte los valores


a flotante
INTSP A6, A6
INTSP A7, A7
NOP 3

;Calcula del coseno

MPYSP A5, A5, A8 ;r cuadrada -> A8


MPYSP A6, A6, A9 ;g cuadrada -> A9
MPYSP A7, A7, A10 ;b cuadrada -> A10
NOP 3

ADDSP A8, A9, A9 ;suma de cuadrados de


los pixeles
NOP 3

ADDSP A9, A10, A9 ;Suma los tres


cuadrados
NOP 3

RCPSP A9, A10 ;Reciproco de


A9

MVK 2, B0 ;Contador
INTSP B0, A12
ETIQ2:
MPYSP A9, A10, A11 ;V*Xi->A11
NOP 3

SUBSP A12, A11, A11 ;(2-V*Xi)->A11


NOP 3

MPYSP A10, A11, A10 ;Xi(2-V*Xi)->A10


SUB B0, 1, B0 ;disminuye
contador
[B0] B ETIQ2 ;Condicion
NOP 5

MPYSP A8, A10, A11

;Calculo
del umbral
MVKL dirUmbral, B1
MVKH dirUmbral, B1
LDW *B1, A12
NOP 4

CMPLTSP A11, A12, A2 ;Comparacion de


pixeles
[!A2] B FIN_IF ;condición contraria
NOP 5

MVKL dirY, A13


MVKH dirY, A13

LDW *A13++, B5
LDW *A13++, B6
LDW *A13++, B7
NOP 4

MPYSP A5, B5, B8


MPYSP A6, B6, B9
MPYSP A7, B7, B10
NOP 3

ADDSP A8, B9, B9


NOP 3
ADDSP B9, B10, B9
NOP 3

SPINT B9, B9 ;Convierte valor a un


entero
NOP 3

STB B9, *-A0[3]


STB B9, *-A0[2]
STB B9, *-A0[1]
FIN_IF:
SUB A1, 1, A1
[A1] B InicioDo ;etiqueta que manda a
InicioDo
NOP 5

Loop: B Loop
NOP 5
Al buscar en memory browser donde está colocada la variable dirImg, se
observa la siguiente tabla:

Para subir la imagen deseada se oprime la flecha de color verde, que se


encuentra arriba de memory browser y se oprime la siguiente opción de load
memory:
Después de oprimir esa opción aparecerá un recuadro como el siguiente
donde se tendrá que buscar la imagen requerida para subirse y se oprime next:

Finalmente se oprime finish:


Una vez realizado esto los valores en memory browser cambiaran:

En las propiedades se debe de colocar los siguiente valores:


Una vez transcurridos algunos minutos se pone pausa a la simulación, y se
vuelve a oprimir la flecha verde que se encuentra arriba de memory browser,
pero ahora se oprime la opción save memory:

Después de oprimir esta opción, aparece una ventana como la siguiente en


donde se va escoger donde se guarda la imagen en formato *.raw:

Una vez guardada se pasa a visualizar la imagen en Matlab, el código


implementado para esto es el siguiente:

%Leer imagen en formato raw


strFile = 'ResultadoImg.raw';
%Abrir archivo
pf = fopen(strFile, 'rb', 'ieee-le');
if (pf==0)
disp('ERROR AL ABRIR EL ARCHIVO');
return;
end
%leer archivo
numReg = fread(pf, 1,'int32');
numCol = fread(pf, 1,'int32');
numBytesPorPixel = fread(pf, 1,'int32');
for r=1:numReg
for c=1:numCol
rojo= fread(pf, 1,'uint8');
verde= fread(pf, 1,'uint8');
azul= fread(pf, 1,'uint8');
imagen(r,c,1) = rojo;
imagen(r,c,2) = verde;
imagen(r,c,3) = azul;
end
end
%Visualizar imagen
imshow(imagen./255)
%Cerrar archivo
fclose(pf);

En la variable strFile se debe de colocar el nombre con el que se guardó la


imagen en code compuser studio. Una vez realizado esto y corriente el
programa la imagen que arroja Matlab es la siguiente:
Probando con otra imagen el resultado obtenido es el siguiente:

Conclusión:
Para esta práctica se utilizó el software code composer studio y se logró realizar un código
en lenguaje ensamblador para poder realizar el procesamiento de una imagen que se
almacenaba en un espacio de memoria en formato .raw, en dicho procesamiento de la
imagen tomo solamente el color rojo por lo cual en las propiedades se configuro de tal
manera de que el rojo resaltara y los demás colores aparecieran en formato de escala de
grises. Además de esto se utilizaron otros dos códigos para el buen funcionamiento del
código principal y para que se ligaran se utilizó un programa en formato .cmd.
Con ayuda del software de Matlab se logró observar el buen funcionamiento del código
realizado en ccs, ya que matlab leía la imagen en formato .raw y la presentaba en una
pantalla de la manera que se podía guardar en formato .jpg y en dichas imágenes se
observa como el color rojo es el que resalta.
La práctica se realizó de buena manera, conocí más sobre el lenguaje ensamblador y
reforcé cosas realizadas en prácticas anteriores. Además, comprendí como funciono el
procesamiento de una imagen en ccs.
Referencias:
“TMS320C6000 DSP Multichannel Buffered Serial Port (McBSP) Reference Guide”,
Literatura SPRU580G, Diciembre de 2006, Texas Instruments
“TLV320AIC23 Stereo Audio Codec, Data Manual”, Literatura SLWS106C, Julio de 2001,
Texas Instruments
“TMS320C67x/C67x+ DSP CPU and Instruction Set Reference Guide”, Texas Instruments,
Num. de literatura: SPRU733, Mayo de 2005.

“TMS320C6713 DSK Technical Reference”, 2003, Spectrum Digital, Inc.


“TMS320C6713 Floating-point Digital Signal Processor”, Literatura SPRS186L, Noviembre
2005, Texas Instruments
“TMS320C6000 Assembly Language Tools User’s Guide”, Literatura SPRU186N, Abril
2004, Texas Instruments
“Real-Time Digital Signal Processing, Implementations and Applications”, 2a Edición, Sen
M. Kuo, Bob H. Lee, Wenshun Tian, John Wiley & Sons, 2006

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy