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