Atmel ATmega164P/V Manual De Usuario página 239

Microcontrolador avr de 8 bits de alto rendimiento y bajo consumo.
Tabla de contenido

Publicidad

1. Si no se necesita la actualización para el Boot Loader en el sistema, programar
los bits de bloqueo del Boot Loader para prevenir cualquier actualización de
software en el Boot Loader.
2. Guardar el AVR RESET activo (bajo) durante periodos con suficiente voltaje.
Esto puede ser hecho habilitando el BOD (internal Brown-out Detector) if the
operating voltage matches the detection level. Si no, el reset externo puede ser
usado. Si el reset ocurre mientras la operación de escritura esta en progreso,
esta operación sería completada si la fuente de energía es suficiente.
25.8.12 Programando el tiempo de la Flash cuando se esta usando SPM
La calibración del Oscilador RC es usada en el tiempo de acceso de la Flash. La
Tabla 25-6 muestra el tiempo de programación típica para la Flash desde la
CPU.
25.8.13 Simple Assembly Code Example for a Boot Loader
;-the routine writes one page of data from RAM to Flash
; the first data location in RAM is pointed to by the Y pointer
; the first data location in Flash is pointed to by the Z-pointer
;-error handling is not included
;-the routine must be placed inside the Boot space
; (at least the Do_spm sub routine). Only code inside NRWW section can
; be read during Self-Programming (Page Erase and Page Write).
;-registers used: r0, r1, temp1 (r16), temp2 (r17), looplo (r24),
; loophi (r25), spmcrval (r20)
; storing and restoring of registers is not included in the routine
; register usage can be optimized at the expense of code size
;-It is assumed that either the interrupt table is moved to the Boot
; loader section or that the interrupts are disabled.
.equ PAGESIZEB = PAGESIZE*2 ;PAGESIZEB is page size in BYTES, not words
.org SMALLBOOTSTART
Write_page:
; Page Erase
ldi spmcrval, (1<<PGERS) | (1<<SPMEN)
call Do_spm
; re-enable the RWW section
ldi spmcrval, (1<<RWWSRE) | (1<<SPMEN)
call Do_spm
; transfer data from RAM to Flash page buffer
ldi looplo, low(PAGESIZEB) ;init loop variable
ldi loophi, high(PAGESIZEB) ;not required for PAGESIZEB<=256
Wrloop:
ld r0, Y+
ld r1, Y+
ldi spmcrval, (1<<SPMEN)
call Do_spm
adiw ZH:ZL, 2
sbiw loophi:looplo, 2 ;use subi for PAGESIZEB<=256
brne Wrloop

Publicidad

Tabla de contenido
loading

Este manual también es adecuado para:

Atmega324p/vAtmega644p/v

Tabla de contenido