Los AVR son una familia de microcontroladores RISC del fabricante
estadounidense Atmel. La arquitectura de los AVR fue concebida por dos
estudiantes en el Norwegian
Institute
of Technology,
y posteriormente refinada y desarrollada en Atmel Norway,
la empresa subsidiaria de Atmel, fundada por los dos arquitectos del chip.
Cuenta con bastantes aficionados debido a su diseño simple y la facilidad de
programación. Se pueden dividir en los siguientes grupos
ATmega
microcontroladores
AVR grandes con 4 a 256 kB de memoria flash programable, encapsulados
de 28 a 100 pines, conjunto de instrucciones extendido
(multiplicación y direccionamiento de programas mayores) y amplio conjunto de
periféricos
ATtiny
pequeños
microcontroladores AVR con 0,5 a 8 kB de memoria flash programable,
encapsulados de 6 a 20 pines y un limitado set de periféricos.
Bajo
el nombre AVR32, Atmel tiene una arquitectura RISC de 32
bits con soporte de DSP y SIMD. A pesar de la similitud de sus nombres y
logotipos, las dos arquitecturas tienen poco en común.
El
AVR es una CPU de arquitectura Harvard. Tiene 32 registros de 8 bits.
Algunas instrucciones sólo operan en un subconjunto de estos registros. La
concatenación de los 32 registros, los registros de entrada/salida y la memoria
de datos conforman un espacio de direcciones unificado, al cual se accede a
través de operaciones de carga/almacenamiento. A diferencia de los
microcontroladores PIC, el stack se ubica en este espacio de
memoria unificado, y no está limitado a un tamaño fijo.
El
AVR fue diseñado desde un comienzo para la ejecución eficiente de código C
compilado. Como este lenguaje utiliza profusamente punteros para el manejo de
variables en memoria, los tres últimos pares de registros internos del
procesador son usados como punteros de 16 bit al espacio de memoria externa,
bajo los nombres X, Y y
Z.
Set
AVR
El
set de instrucciones de los AVR es más regular que la de la mayoría de los
microcontroladores de 8-bit (por ejemplo, los PIC). Sin embargo, no es
completamente ortogonal:
Los
registros punteros X, Y y
Z tienen capacidades de direccionamiento diferentes entre sí (ver más arriba
por qué).
Los
registros 0 al 15 tienen diferentes capacidades de direccionamiento que los
registros 16 al 31.
Las
registros de I/O 0 al 31 tienen distintas características que las posiciones 32
al 63.
La
instrucción CLR afecta los 'flag',
mientras que la instrucción SER no lo hace, a pesar de que parecen ser
instrucciones complementarias (dejar todos los bits en 1, y dejar todos los
bits en 0, respectivamente).
Los
códigos de operación 0x95C8 y 0x9004 hacen exactamente lo mismo (LPM).
No hay comentarios:
Publicar un comentario