Buceando en el HC908...

Documentos relacionados
Uso de la memoria FLASH de los MCUs HC908 para el Almacenamiento de Datos Temporales.

Grabación de memoria FLASH en el MC908GP32

Curso sobre Microcontroladores Familia HC9S08 de Freescale

Modos de direccionamiento

Buceando en el HC908...

MODOS DIRECCIONAMIENTO CPU08. Curso de Microcontroladores Familia HC908 Flash de Motorola Parte II. ING. DANIEL DI LELLA DDFAE For Motorola Products

Buceando en los MCUs Freescale...

Buceando en los MCUs Freescale...

Buceando en los MCUs Freescale...

Curso sobre Microcontroladores Familia HC9S08 de Freescale

Optimización de código en el 68HC908

Buceando en el HC908...

Problemario: Memoria / Entrada Salida / Buses / Interrupciones

GENERACIÓN DE SUBRUTINA DE RETARDO DE

Curso sobre Microcontroladores Familia HC9S08 de Freescale

Buceando en el HC908...

1.8 PROGRAMACIÓN DEL MICROCONTROLADOR

Control remoto del EDUKIT08 vía PC...

Buceando en el HC908...

Curso sobre Microcontroladores Familia HC9S08 de Freescale

SET de Instrucciones CPU08. Curso de Microcontroladores Familia HC908 Flash de Freescale Parte II ING. DANIEL DI LELLA

Buceando en el HC908...

CU6 FPGA. up16 DIV_CLK CLK_UP16 CLK PC16R MUXMAR BUS MAR RST DIR MEM MEMORIA MEMORIA BUS MUXRX DATA MEM BUS CONTROL CPU ALU BUS MDRO MDRI DATA MEM OUT

- FUNDAMENTOS TEÓRICOS - EJEMPLOS DE APLICACIÓN. 09/01/2009 Ing. José A. Picón - - (0416)

Curso de Microcontroladores Familia HC908 Flash de Freescale Parte II. CPU08 Core ING. DANIEL DI LELLA

2.8 MÓDULO DE INTERRUPCIÓN POR TECLADO KBI

Mapas de Memoria y E/S

1.10 PUERTOS GENERALES DE ENTRADA Y SALIDA

Buceando en el HC908...

Temas Varios del HC908...

Modos de Direccionamiento

NT0106. Notas Técnicas de Uso y Aplicación 2.6 CAPTURA DE ENTRADA INPUT CAPTURE CAPTURA DE EVENTOS EXTERNOS MEDICIÓN DEL PERÍODO. 2.6.

(SPI) Módulo Serial Sincrónico

5 - Lenguaje Ensamblador

Set de Instrucciones del CPU08 Sistemas con Microprocesadores y Microcontroladores

3.11 COMUNICACIÓN SERIAL RS-485 PARA

TIMER INTERFACE MODULE (TIM)

Buceando en los MCUs Freescale...

2.1 CONTROL DE EVENTOS TEMPORIZADOS TIMER

Buceando en el HC908...

NT0112. Notas Técnicas de Uso y Aplicación 2.12 MÓDULO DE AUTORECUPERACIÓN AWU PARA MICROCONTROLADORES DE LA SERIE Q

TUTORIAL: AÑADIR NUEVA FUNCIONALIDAD A UN JUEGO DE NES

Buceando en el HC908...

ORGANIZACIÓN DE LA MEMORIA

Puertos de Entrada/Salida

Microprocesadores, Tema 3:

Curso sobre Microcontroladores Familia HC9S08 de Freescale

PROGRAMACIÓN DEL MICROCONTROLADOR

Controladores de memoria externa

Curso sobre Microcontroladores Familia HC9S08 de Freescale

Tema: Lazos y Control de Flujo en HC12.

Microcontrolador PIC16F84: Arquitectura

Generación de PWM para la familia HC08JL

Ciclos de máquina. Otro ejemplo: decremento de un registro par (donde rp = HL, DE, BC, SP) DCX rp

MÓDULO 2 Sergio Noriega

Formato. Microcontroladores DURACIÓN. Revisó. Aprobó. Coordinador. r de la Carreraa. Gestión de la Calidad. Maestro. Autorizó PLAN DE ESTUDIO

Elección de un microcontrolador

Capítulo 5 5. EJEMPLO DE APLICACIÓN.

INTRODUCCIÓN III. Figura 1. Señal con codificación digital NRZI.

UNIVERSIDAD NACIONAL DE COLOMBIA SEDE BOGOTÁ FACULTAD DE INGENIERÍA INGENIERÍA MECATRÓNICA

Como manejar un Display Inteligente LCD por medio de un Microcontrolador de la Familia HC908..

UPMDIE. 2 - Sistemas embebidos INDUSTRIALES. Sistemas embebidos CPU, Memorias, dispositivos de E/S y buses Sistema microprocesador ejemplo: Arduino

Arquitectura de Computadores

Curso sobre Microcontroladores Familia HC9S08 de Freescale

Microprocesadores, Tema 2:

MICROCONTROLADORES. 1. El PIC 16F84A es un microcontrolador de: a) 16 bits b) 8 bits c) 4 bits d) 32 bits e) 64 bits

Universidad simón Bolívar Departamento de Electrónica y Circuitos / Sección de Sistemas Digitales EC2721 Arquitectura del Computador I

Buceando en el HC908...

Lecture 8. Computer Decisions

Introducción. Modo monitor. Cuaderno técnico 4: Grabación de microcontroladores PIC

2.7 MODOS DE CONFIGURACIÓN PARA ENTRADA A MONITOR PROGRAMADOR UNIVERSAL CON LA TARJETA DE DESARROLLO TD68HC908

Curso de Microcontroladores. Familia HC908 Flash...

Curso sobre Microcontroladores Familia HC9S08 de Freescale

Memoria y Entrada/Salida Tecnología Organización - Expansión

Analog To Digital Converter. Module (ADC) Curso de Microcontroladores Familia HC908 Flash de Freescale Parte II ING.

Tema 0. Introducción a los computadores

Programación de Microcontroladores

Tema 4. Organización de la memoria

MONITOR ROM MODULE (MON08)

Diseño de una Aplicación en 10 Minutos!!...

ARQUITECTURA DEL PIC16F84A

Curso de Microcontroladores. Familia HC908 Flash Freescale. Parte II ING DANIEL DI LELLA

Organización del Computador 1 Entradas / Salidas

ACIÓN DEL MICROCONTROLADOR CPU08 CPU08 DE

Como sacarle mayor provecho a las herramientas disponibles para la familia HC908

Curso sobre Microcontroladores Familia HC9S08 de Freescale

LENGUAJE C PARA SISTEMAS DEDICADOS

Curso sobre Microcontroladores Familia HC9S08 de Freescale

MICROCONTROLADORES PIC

3.1 MÓDULO DE GENERACIÓN DE RELOJ CGMC

Memorias. Docente: Ing. Víctor Cárdenas Schweiger

Problema 5. Cálculo de la temporización. Programación del Lectura de la cuenta del temporizador 0

Guía Didáctica del 68HC08

Arquitectura de computadoras

Transcripción:

COMENTARIO TÉCNICO Buceando en el HC908... Por Ing. Daniel Di Lella Dedicated Distributor Field Application Engineer www.edudevices.com.ar dilella@arnet.com.ar Como sacarle el mayor provecho a la familia HC908APxx 2da. y última parte: Continuando con el artículo anterior, en donde se detallaron los errores en la máscara de la familia de microcontroladores HC908APxx y como solucionarlos, abordaremos en este los errores en las sub rutinas internas en ROM de esta familia. Rutinas Residentes en ROM. La familia HC908AP contiene una serie de rutinas internas implementadas en ROM, estas rutinas nos ayudan a manejar en forma más sencilla los procesos de borrado y programación de la memoria FLASH tanto en el modo monitor, utilizado para programar / borrar al MCU, como en el modo usuario para que nuestros programas tengan la posibilidad de almacenar datos no volátiles como si utilizáramos una EEPROM externa. En numerosos artículos se han explicado las ventajas de ello y lo sencillo de su uso. De todas las rutinas existentes en la ROM de los AP, hay 4 de ellas que presentan errores de código que generan el no funcionamiento de ellas o bien el borrado no buscado de la zona de vectores (más precisamente el Reset Vector) y ellas son:

Para solucionar el problema, sugiero leer atentamente las fe de erratas de freescale anteriormente comentadas. Sin embargo les adjunto dos rutinas que deben ser copiadas en flash (agregadas a vuestros programas) y que permiten realizar borrados muy confiables de páginas (512 bytes por página) Flash y el borrado en masa (Mass Erase) de toda la memoria Flash del microcontrolador. Estas rutinas tienen la virtud de auto copiarse en la memoria RAM en forma automática cuando se las invoca y además ocupan poco espacio (solo 60 bytes) en la misma RAM una vez copiadas allí. base 10T include 'ap32_registers.inc' ;Base Decimal por Default ;Equates grales. p/ AP32 *************** * EQUATES * *************** RAMSPACE EQU $0060 ;Czo de la RAM uso GRAB/BORR. FLASH DATSTRC EQU RAMSPACE+8 ;RAM para uso del "MONITOR ROM" Q_RAM_Blk_Erase EQU $0080 ;Czo RAM para programa LIMPIEZA GRAL. FLASH RAMUSER EQU $00C0 ;Comienzo de la RAM p/ usuario RAMEND EQU $0860 ;Fin de la RAM + 1 en el AP32 / AP64 ROMSTART EQU $7860 ;Czo de la FLASH para PROGRAMA PRGRNGE EQU $FC34 ;Sub-Rutina en ROM escritura datos en FLASH ************ * EQUATES P/ BORRADO DE FLASH * ************ b_erase EQU 2 ;Bits control bomba de carga b_hven EQU 8 b_mass EQU 6 MORVALUE EQU %11111111 ;Valor standard del MOR BLOCKSIZE EQU $200 TESTCOUNT EQU $20 FLASHSTART EQU $860 RAM_BEGIN EQU $60 RAM_END EQU $85F * VARIABLES EN RAM * ORG RAMSPACE ORG DATSTRC ; Comienzo RAM para AP32 ; reservada hasta DATSTRC P/ uso ; rutinas ROM prog/erase FLASH. ; RAM p/ uso en prog/erase flash CPUSPD RMB 1 ; CPU speed -> 4 x Fop aprox. (FOSC) DATASIZE RMB 1 ; Nº de Bytes de datos a grabar. STARTADDR RMB 2 ; Start Address p/ R o W un rango DATA RMB 1 ; DATOS en RAM transitorios V_FLASH_ADDR RMB 2 ; Address czo. página a borrar ; cargar con $FFFF p/ MASS ERASE

--------------------------- --------------------------- *** * MASS_ERASE - Rutina de borrado GRAL. de la FLASH en los HC908APxx * * Toda la rutina está en FLASH y luego se copia a RAM p/ ejecutarla * * desde allí. (FBUS = 2,4576 MHZ) * * VARIABLES INVOLUCRADAS: * * V_FLASH_ADDR - > Dirección de czo. página a borrar (512 bytes) * * En este caso se debe cargar con $FFFF * * ATENCION: Reservar 60 BYTES en la RAM a partir de "Q_RAM_Blk_Erase" * ** MASS_ERASE lda #$FF sta FLBPR ; Without flash protection!! *--- erase block --------------------------------- erase1_m: pshh ; "H:X" content will be corrupted in the jump pshx ; jsr FLASH_ERASE_M pulx ; pulh ICPCLEAN_M NOP ; LOOP infinito hasta P.O.R del MCU BRA ICPCLEAN_M ; RTS ; * Block Erase * FLASH_ERASE_M: bsr BlkErase2RAM_M ldhx V_FLASH_ADDR lda #b_mass jsr Q_RAM_Blk_Erase ; copy block erase routine to RAM ; load H:X with the block address ; MUST load Acc with b_mass (ERASE+MASS=1) ; execute block erase in RAM *------------------------------------------------------------- BlkErase2RAM_M: ldhx #Blk_Erase_Len_M ; get blk erase routine length ; NB: Assume "Blk_Erase_Len" is one byte long

BE2RAM1_M: lda (Block_Erase-1),x ; load from FLASH sta {Q_RAM_Blk_Erase-1},x ; copy to RAM dbnzx BE2RAM1_M ; NB: Assume "Blk_Erase_Len" is one byte long ; need modification if length over 1 byte Block_Erase_M: bsr Dly_5us_M lda FLCR ora #b_hven ; set ERASE bit ; write any data to block ; set HVEN bit Blk_Erase_Time_M: Blk_Erase_Exit_M: ldx #200 ;(2) bsr Dly_1ms_M ;[14] dbnzx Blk_Erase_Time_M ;(3) ldhx #FLCR lda #%00001000 ; clear ERASE bit bsr Dly_100us_M clr,x ; clear HVEN bit ;For 2,5 MHz bus Dly_5us_M: lda #2 ; [2] ; [4] Dly_100us_M: lda #50 ; [2] ; [4] Dly_1ms_M: lda #128 ; [2] dummy for 15 bus clk ; [4] Dly_5us_Exit_M: Blk_Erase_Len_M equ {Dly_5us_Exit_M - Block_Erase_M}

----------------------- ----------------------- ** * PAGE_ERASE - Rutina de borrado de Página en los HC908APxx * * Toda la rutina está en FLASH y luego se copia a RAM p/ ejecutarla * * desde allí. (FBUS = 2,4576 MHZ) * * VARIABLES INVOLUCRADAS: * * V_FLASH_ADDR - > Dirección de czo. página a borrar (512 bytes) * * ATENCION: Reservar 60 BYTES en la RAM a partir de "Q_RAM_Blk_Erase" * ** PAGE_ERASE lda #$FE sta FLBPR ; protect vector table only *--- erase block --------------------------------- erase1: pshh ; "H:X" content will be corrupted in the jump pshx ; jsr FLASH_ERASE pulx ; pulh RTS ; * Block Erase * FLASH_ERASE: bsr BlkErase2RAM ldhx V_FLASH_ADDR lda #b_erase jsr Q_RAM_Blk_Erase ; copy block erase routine to RAM ; load H:X with the block address ; MUST load Acc with b_erase ; execute block erase in RAM *------------------------------------------------------------- BlkErase2RAM: ldhx #Blk_Erase_Len ; get blk erase routine length ; NB: Assume "Blk_Erase_Len" is one byte long BE2RAM1: lda (Block_Erase-1),x ; load from FLASH sta {Q_RAM_Blk_Erase-1},x ; copy to RAM dbnzx BE2RAM1 ; NB: Assume "Blk_Erase_Len" is one byte long ; need modification if length over 1 byte

Block_Erase: bsr Dly_5us lda FLCR ora #b_hven ; set ERASE bit ; write any data to block ; set HVEN bit Blk_Erase_Time: Blk_Erase_Exit: ldx #20 ;(2) bsr Dly_1ms ;[14] dbnzx Blk_Erase_Time ;(3) ldhx #FLCR lda #%00001000 ; clear ERASE bit bsr Dly_5us clr,x ; clear HVEN bit ;For 2,5 MHz bus Dly_5us: lda #2 ; [2] ; [4] Dly_1ms: lda #128 ; [2] dummy for 15 bus clk ; [4] Dly_5us_Exit: Blk_Erase_Len equ {Dly_5us_Exit - Block_Erase} Bien, ahora veremos en un par ejemplos como utilizarlas...

**************** * Borrado de una página cualquier de la Flash * * Cada página está formada por 512 bytes * * Para borrar una página se debe apuntar al * * comienzo de la misma. Por ejemplo: * * $0860, $0A60, $0C60, $xx60... * **************** CLEAN_PAGE! STHX TEMPHX ;Resguardo valor H:X en RAM LDHX #PAGINA_A_BORRAR ;H:X Dir. Czo de la página a borrar!! STHX V_FLASH_ADDR ;la que usted elija... SEI ;Deshabilito INT S antes de borrar!! JSR PAGE_ERASE ;Voy a la rutina de borrado página (512 bytes) CLI ;Habilito las INT S luego de borrar!! END ********************** * Borrado gral. (Mass Erase) de la memoria Flash * * Aquí para borrar toda la memoria Flash solo se debe * * apuntar al final de la misma y listo!! * ********************** CLEAN_ALL! LDHX #$FFFF ; V_FLASH_ADDR <-- $FFFF STHX V_FLASH_ADDR ; JSR MASS_ERASE ; Rutina MASS ERASE p/ AP32 En los próximos artículos, veremos más cositas útiles sobre la familia HC908. Hasta la próxima!! NOTA: Este artículo fue realizado cuando las primeras máscaras de los HC908APxx aparecián en el mercado. En la actualidad ya no se presentan ninguno de los errores aquí citados, pero el documento es válido si se lo utiliza como idea para solucionar problemas o situaciones similares en algún otro dispositivo de la familia HC908. www.edudevices.com.ar