Introducción a la Práctica del Laboratorio de Sistemas Laboratorio

Anuncio
Introducción a la Práctica del
Laboratorio de Sistemas
Electrónicos Digitales
Prácticas basadas en el MCF5272:
dif
diferencias
i con SEDG
Departamento de Ingeniería Electrónica
E.T.S.I. Telecomunicación
Universidad Politécnica de Madrid
Material
Programa EDColdFire
ENT2004CF
TL04
Diferencias con SEDG (I)
 Programa DBUG : comunicación PC-ENT2004CF.
 Permite controlar ENT2004CF desde el EDColdFire.
 Al resetear se ejecuta este programa.
 Inicializa los principales registros del MCF5272 (sin
interrupciones).
 NO HAY QUE TOCAR los registros de chip-select,
ni los registros de configuración (MBAR,
RAMBAR...).
 NO USAR lla SRAM
SRAM, porque ahí
hí está
tá lla pila
il d
dell
programa DBUG.
 MAPA DE MEMORIA (documento de dudas
frecuentes, disponible en (R.San-Segundo 2006a)
Diferencias con SEDG (II)
 Puertos de ENTRADA SALIDA
 No se pueden utilizar los puertos A, B y C del
MCF5272.
 Utilización de puertos ampliados
 PUERTO_S EQU $40000002 *Dirección del puerto S
 PUERTO_E EQU $50000004 *Dirección del puerto E
 Ej: programa “cochefantastico
cochefantastico.asm
asm”
 Puertos digitales (0-5V)
 Optoacoplados para protección: retardo ~ 50us
50us.
 Ojo con el barrido del teclado!!
 Impedancia de salida NO despreciable.
despreciable
Diferencias con SEDG (III)
 Puerto de SALIDA en ensamblador
 Es unidireccional, no puede ser leído
 No se puede usar directamente bset, bclr o bchg
PUERTO_S
EQU $40000002
Puerto_variable DC.W 0
* recibe a través de D0 el nº del bit que poner a 1
PUERTO SET BIT:
PUERTO_SET_BIT:
MOVE L D1,-(A7)
MOVE.L
D1 (A7)
MOVE.W Puerto_variable,D1
BSET.L D0,D1
,
MOVE.W D1,Puerto_variable
MOVE.W D1,PUERTO_S
MOVE.L (A7)+,D1
RTS
Diferencias con SEDG (IV)
 Puerto de SALIDA en C
 Es unidireccional, no puede ser leído
#define MASCARA
MASCARA_TECLADO
TECLADO 0xFFF0
#define EXCIT_TECLADO 0x0001
ttypedef
d f struct
t t { WORD variableAux;
i bl A
… } TpuertoSalida;
T
t S lid
TpuertoSalida puerto;
void puerto_excitaColumnaTeclado(int numColumna)
{ … // falta comprobar que numColumna<4
static WORD excitaTeclado[]={0x1,0x2,0x4,0x8};
excitaTeclado[]={0x1 0x2 0x4 0x8};
// suponemos que variableAux contiene el último dato enviado al puerto
puerto. variableAux= puerto.variableAux & MASCARA_TECLADO;
puerto. variableAux= puerto.variableAux | excitaTeclado[numColumna];
set16_puertoS(puerto.variableAux); // envía el nuevo valor al puerto
… }
Recomendaciones concretas
 Posiciones
P i i
de
d memoria
i



Programa principal: $20000
Variables: $30000
Puntero de pila A7: $30000


No afecta a las variables: acceso con predecremento
Al comienzo
i
d
dell programa situar
it
A7 en $30000
 OBLIGATORIO: MOVEM en Subrutinas de atención a
interrupciones
INTERRUP
FIN_INTERRUP
ADDA.L #-60, A7
MOVEM.L D0-D7/A0-A6,(A7)
....
MOVEM.L (A7),D0-D7/A0-A6
ADDA.L #60,A7
RTE
Partes de un programa
 Z
Zona de
d constantes
t t
 Zona de variables globales
 Programa Principal:
 Llamadas a las subrutinas de configuración de SW y HW
 Termina con un bucle infinito
 Zona de subrutinas:
 Configuración completa del HW.


Tener cuidado
T
id d con lla
inicialización de registros
g
compartidos
Inicialización de variables del SW
 Zona de rutinas de atención a las interrupciones
 Internas y Externas
Depuración de programas
 Ti
Tipos de
d Errores:
E
 NO sistemáticos y ocasionales
 NO sistemáticos
i t áti
pero frecuentes
f
t
 Sistemáticos pero no frecuentes
 Sistemáticos y periódicos
 Pasos en la búsqueda de un error
 PASO 1: Obtención de una prueba fallida y
previsión de salida
 PASO 2: Localización del error
 PASO 3: Determinación de la causa del error
 PASO 4: Corregir
g el error
Descargar