Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
DE TELECOMUNICACIÓN
DPTO. DE TECNOLOGÍA ELECTRÓNICA 17 DE DICIEMBRE DE 2009
EXAMEN DE SISTEMAS DIGITALES TIEMPO: 2 HORAS y 45 MINUTOS
APELLIDOS NOMBRE
DNI GRUPO
Se quiere diseñar un sistema de procesamiento de imágenes para una minipantalla LCD, basado en
el MSP430F1611, una versión del F169 con 10K de RAM. Cada imagen tiene 96x96 pixeles con 256
niveles de grises (cada píxel tiene asociado un byte que indica su nivel de gris, siendo 0 el negro y 255
el blanco). Mediante varios botones podemos escoger la operación a aplicar a la imagen y presentar su
efecto en pantalla: los botones “blanco”,”amarillo”, y ”negro” están conectados, respectivamente, a
los pines 24, 26, y 27 del chip, y son activos por flanco de bajada. Además existen dos LEDs , “verde”
y “rojo” asociados a la elección de una u otra operación, que están conectados, respectivamente, a los
pines 12 y 13 del chip; estos LEDs se encienden con un nivel alto.
Se ha capturado la imagen que aparece a continuación. Dicha imagen presenta sólo 4 colores,
incluyendo el blanco y el negro y siendo su fondo completamente blanco.
0 214 pixeles
80 2782 pixeles
1
Las variables, constantes, y vectores están definidos de la siguiente forma:
; ----------------------------------
; DEFINICIÓN DE CONSTANTES ; ----------------------------------
; ---------------------------------- ; VECTORES INTERRUPCIÓN
ORG 0x5000 ; ----------------------------------
matriz DB 255,255,..;TAM_MATRIZ valores ORG 0FFE0h+RESET_VECTOR
; ---------------------------------- DW Inicio
; DEFINICIÓN DE VARIABLES ORG 0FFE0h+PORT2_VECTOR
; ---------------------------------- DW RTI_PUERTO2
ORG 0x1100 ORG 0FFE0h+TIMERA0_VECTOR
tabla DS16 0x100 ;A 0 inicialm. DW RTI_TIMERA0
n_pix_umbral DC16 0 END Inicio
gris_umbral DC16 0
copia DS8 TAM_MATRIZ * matriz contiene TAM_MATRIZ posiciones tamaño byte
modo DC8 0 representando los píxeles de la imagen.
*Las 256 word de tabla están inicialmente a 0.
1. Escribe una subrutina config_LEDs , que permita configurar el micro para la conexión de
los 2 LEDs descrita en el enunciado. (0.25p)
config_LEDs
bis.b #BIT0+BIT1,&P1DIR; LEDs conectados a BitA y BitB de Pd
bic.b #BIT0+BIT1,&P1OUT; LEDs apagados(se encienden a nivel alto)
ret
ret
2. A continuación podemos ver el código para la RTI del PUERTO2 del micro:
RTI_PUERTO2 bit.b #BIT7,&P2IFG esbit4 cmp.b #1,modo
jz comp_BIT6 jeq sal_modo
bis.b #BIT1,&P1OUT bis.b #BIT1+BIT0,&P1OUT
call #calc_Histo bis.b #BIT6,&P2DIR
mov.b #BIT4+BIT6,&P2IE mov.b #1,modo
bis.b #BIT7,&P2DIR clr R9
bic.b #BIT1,&P1OUT mov #tabla,R10
jmp fin_RTIP2 call #config_Timer
comp_BIT6 bit.b #BIT6,&P2IFG jmp fin_RTIP2
jz esbit4 sal_modo call #stop_Timer
bis.b #BIT0,&P1OUT bic.b #BIT1+BIT0,&P1OUT
push gris_umbral bic.b #BIT6,&P2DIR
call #bin_Img mov.b #0,modo
pop R9 fin_RTIP2 clr.b &P2IFG
call #dibuja_Imgen_Mod reti
bic.b #BIT0,&P1OUT
jmp fin_RTIP2
¿Qué efecto tiene la pulsación de los botones “amarillo” y “negro”? ¿Cómo afecta dicha
pulsación a los LEDs “verde” y “rojo”? (1p)
2
El botón “negro” genera una interrupción del puerto2 con activación del BIT7 de P1IFG.
Se enciende el led “rojo”; se llama a la función “calc_Histo”; se habilitan los botones
“amarillo” y “blanco”; se deshabilita el botón “negro”; y, finalmente, se apaga de nuevo el led
“rojo”.
El botón “amarillo” genera una interrupción del puerto2 con activación del BIT6 de P1IFG.
Se enciende el led “verde”, se llama a la función”bin_Img” tras meter la variable
“gris_umbral” en pila; se saca un elemento de la pila; se dibuja la imagen en “matriz”; y por
último se vuelve a apagar el LED verde.
¿Qué hace la porción de código que va desde el inicio hasta fin_rec? ¿Y desde aquí hasta el
final? Si la rutina se ejecuta sobre la imagen indicada en el enunciado, ¿qué valor contendrá
la variable n_pix_umbral? ¿Y la variable gris_umbral? (2p)
Hasta “fin_rec”, recorre uno a uno los píxeles de una imagen y cuenta el número de ellos de
cada nivel de gris, almacenando el resultado en las 256 WORDS apuntadas por “tabla”. En
resumen, realiza el histograma de la imagen.
Desde “fin_rec” al final, recorre la tabla donde están depositados el número de píxeles de
cada uno de los 256 niveles de grises, y determina cual es el nivel de gris dominante (con más
pixeles), almacenando el nivel de gris dominante en “gris_umbral”, y el número de pixeles del
mismo en “n_pix_umbral”
3
4. La función bin_Img tiene el siguiente código:
bin_Img mov 2(SP),R9 cambio_uno mov.b #BLANCO,0(R13)
mov #matriz,R11 jmp sigue_camb
mov #TAM_MATRIZ,R12 cambio_dos mov.b #NEGRO,0(R13)
mov #copia,R13 sigue_camb inc R13
bucle_bin mov.b @R11+,0(R13) dec R12
cmp.b R9,0(R13) jnz bucle_bin
jlo cambio_dos ret
¿Qué cometido cumple esta subrutina? Imagina que al hacer la llamada a esta función el dato
en 2(SP) es “0x84” (132 en decimal), ¿cómo aparece la imagen en pantalla al ejecutar call
#dibuja_Imgen_Mod posteriormente? Colorea como se vería en el LCD (1.5)
Realiza, pixel a pixel, una copia de la imagen almacenada en “matriz”, pero poniendo el pixel
a “blanco” o “negro” según si su nivel de gris es mayor-igual o menor que el recibido a través
de la pila. Se trata de una binarización de la imagen donde el umbral lo determina el
parámetro pasado a través de la pila.
Las zonas de nivel de gris “132” y “255” quedan en blanco; las zonas con nivel de gris “0” y
“138” en negro
4
6. Indica en qué momentos, dentro del funcionamiento de la aplicación, se activan las distintas
interrupciones y cuales son sus causas. (1p)
BIT7 Puerto2: Solo al inicio, tras la configuración del sistema, al pulsar
el botón “negro”. Tras ejecutarse una vez y realizar su función se
deshabilita durante el resto de la ejecución.
TIMERA CCR0: Se activa tras una pulsación impar del botón “blanco”,
volviendo a deshabilitarse en las pulsaciones pares.
5
CONFIG_UART
bis.b #BIT4+BIT5,&P3SEL ; P3.4,5 = USART0 TXD/RXD
bis.b #BIT4,&P3DIR
bic.b #BIT5,&P3DIR
bis.b #SWRST,&UCTL0
bis.b #UTXE0+URXE0,&ME1 ; Habilita USART0 TXD/RXD
bis.b #CHAR,&UCTL0 ; 8-bit por carácter
mov.b #SSEL0,&UTCTL0 ; UCLK = ACLK
mov.b #006h,&UBR00 ; 32768/4800 – 6.82
mov.b #000h,&UBR10
mov.b #06Fh,&UMCTL0 ; Modulación
bic.b #SWRST,&UCTL0 ;Inicialización de la máquina de estados
bis.b #URXIE0,&IE1 ;Habilitación de la
;interrupción de RX de la USART0
ret
ORG 0FFE0h+USART0RX_VECTOR
DW RTI_RX_MATRIZ ; RX USART0
No. Una imagen de 96x96 pixeles donde cada pixel ocupa un byte, ocupa un total de 9216
bytes, mientras que la memoria RAM del MSP430F169 solo tiene 2058 bytes. En principio
necesitamos la cantidad de memoria RAM que ocupa una imagen porque necesitamos copiarla
para que el proceso de binarización no destruya la imagen original. Una alternativa sería
utilizar la memoria FLASH para el almacenamiento de la copia, pero eso obligaría
instrucciones especiales de modificación de FLASH en tiempo de ejecución, mucho más
lentas en su ejecución.