3 - Overview Microcontroladores ATMEL

Anuncio
Microcontroladores de Atmel
Familia AVR
Ing. Marone José
Introducción: Historia
Los AVR son una familia de microcontroladores
RISC de 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.
El acronimo AVR fue reportado como Advanced
Virtual RISC, pero hay rumores de que se
debe a sus diseñadores: Alf and Vegard
[RISC]. Aunque Atmel dice que no se refiere a
nada particular
Mas info sobre la arquitectura
http://doru.info/projects/hdl/pavr/index.html
Introducción:
El AVR fue diseñado desde un comienzo para la ejecución
eficiente de código C compilado. Por lo tanto, algunas
instrucciones tales como 'suma inmediata' ('add immediate'
en inglés) faltan, ya que la instrucción 'resta inmediata'
('substract immediate' en inglés) con el complemento dos
puede ser usada como alternativa.
El set de instrucciones de los AVR es más regular que el 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í.
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).
Familia AVR
La familia de microcontroladores AVR es muy numerosa,
incluye 71 dispositivos que comparten el núcleo, pero
difieren en recursos.
Por ejemplo el atemega8:
Arquitectura - Encapsulados
CPU (Core)
Para maximizar el rendimiento y paralelismo, el AVR usa
una arquitectura Harvard – con memorias y buses
separados para instrucciones y datos.
Las instrucciones en la memoria de Programa son
ejecutadas con una segmentación de dos etapas.
Mientras una instrucción está siendo ejecutada, la
siguiente es pre-capturada de la memoria de programa
(fetching).
El Archivo de Registros contiene 32 registros de propósito
general de 8 bits, habilitados para un acceso rápido.
El AVR fue diseñado desde un comienzo para la ejecución
eficiente de código C compilado. Por lo tanto, algunas
instrucciones tales como 'suma inmediata' ('add
immediate' en inglés) faltan, ya que la instrucción 'resta
inmediata' ('substract immediate' en inglés) con el
complemento dos puede ser usada como alternativa.
Arquitectura de la CPU
CPU (Core)
Seis de los 32 registros pueden ser usados como
apuntadores de 16 bits para direccionamiento
indirecto en el espacio de datos, habilitando
cálculos de direcciones eficientes. Uno de estos
apuntadores también puede usarse como apuntador
para tablas de búsqueda (look up tables) en la
memoria de programa. Para ello, estos registros se
denominan X, Y y Z.
Después de una operación aritmética, el registro de
Estado (Status Register) es actualizado, para
reflejar información acerca de la operación.
La mayoría de instrucciones AVR tienen un formato
en una palabra de 16-bits.
En un ciclo de reloj se pueden leer 2 registros que
funcionen como operandos para la ALU, que se
realice la operación y el resultado quede disponible
para escribirse en uno de esos registros.
CPU (Core)
Para la ejecución, la duración del ciclo es suficiente
para permitir la lectura de registros, la operación de
la ALU y la escritura en el registro destino.
Mapa de Memoria
Desde 1
a 256K
Toda la
memoria de
datos se puede
direccionar
directamente
Mapa de Memoria
Memoria de programa
Espacio continuo de memoria
Flash cuyo tamaño varia entre
procesadores, para el ATMega
8 es de 8 Kbytes, organizados
como 4K x 16 bits. Soporta
hasta 10,000 ciclos de
escritura/borrado.
La memoria se puede
particionar en una sección
para aplicación y una sección
de arranque, donde podría
manejarse un cargador para
auto programación
(Boot Loader Support – Read-WhileWrite Self-programming).
Memoria de Programa: (IRQ´s)
En el espacio de almacenamiento se incluyen a los
Vectores de Interrupciones, iniciando en la
dirección $000.
El número de vectores, en la familia AVR, varia de
procesador a procesador, en función de los
recursos existentes. Un programa debería iniciar
en una ubicación, mas allá de estos vectores.
(rjmp Reset)
Memoria de dato
Es un espacio de 1120 localidades de 8 bits e incluyen:
- Un conjunto de 32 localidades (Registros).
- 64 Registros I / O (Puertos, configuración de recursos, etc).
- 1024 localidades de propósito general. (RAM)
Optimizado
para el
repertorio de
instrucciones
AVR.
Son
accedidos
mediante las
instrucciones
IN y
OUT
Memoria de dato (Registros I/O)
La arquitectura asegura el estado de los registros luego
de un reset.
- Mas info en el datasheet
OJO!!! Una rutina de
atención a
interrupciones debe
terminar con la
instrucción RETI, la cual
recupera el valor de la
pila para el PC .
Memoria de dato (EEPROM)
La memoria EEPROM está en un espacio independiente
y se requiere del uso de 3 registros I/O para su
acceso:
Inicialización
El ATmega8 tiene cuatro fuentes de Inicialización
(Reset)
Power-on Reset. El MCU es inicializado cuando el voltaje de la
fuente está por abajo del voltaje de umbral de encendido (VPOT).
Reset Externo. El MCU es inicializado cuando un nivel bajo está
presente en la terminal RESET por un tiempo mayor que la
longitud mínima del pulso.
Watchdog Reset. El MCU es inicializado cuando el Watchdog
Timer está habilitado y su periodo termina.
Brown-out Reset. El MCU es inicializado cuando el detector de
reducción de voltaje está habilitado y el voltaje VCC de la fuente
va por debajo del umbral establecido (VBOT).
Una vez que el MCU se recupera de una condición de
Reset, espera un tiempo de establecimiento (Tout –
con un valor típico de 4 ms), antes de recuperar al
sistema, para garantizar que los registros tienen su
valor inicial.
Pila de programa
La pila es implementada en el espacio de propósito general
(RAM).
Es usada para almacenamiento temporal de variables
(instrucciones PUSH y POP) o durante la llamada de
subrutinas o el manejo de interrupciones.
El registro SP es el apuntador al tope de la pila. Realmente el
SP se compone de 2 registros, para la parte alta (SPH) y para
la parte baja (SPL), esto para direccionar al espacio completo
de memoria.
La pila tiene un crecimiento hacia abajo, es decir, de las
direcciones altas de memoria a las direcciones bajas.
Después de un reset, el apuntador de Pila tiene el valor de
0x0000, por lo que debe ser inicializado dentro del programa
(con 0x0460 para ATMega8), para que realice un
almacenamiento dentro de un espacio válido.
Registro de Estado
Puertos de Entrada/Salida
Para cada puerto se manejan tres registros,
dentro del espacio de registros I/O:
Un registro de lectura/escritura sobre un lacth,
conectado a la terminal del puerto (PORTx).
Un registro de lectura/escritura que define la
dirección del puerto (DDRx). Las direcciones pueden
configurarse de manera independiente, para cada
terminal.
1 – Salida
0 – Entrada
Un registro solo de lectura, para hacer
lecturas directas en las terminales de los
puertos (PINx).
Mucho
Cuidado con
el señor PINx
in RD,PINA
Puertos de Entrada/Salida
Si en PORTx.n se escribe un 1 lógico cuando la terminal es
configurada como entrada, el resistor de pull-up es activado. Para
anular al resistor de pull-up, se debe escribir un 0 en PORTx.n o la
terminal se debe configurar como salida (suponiendo que el bit PUD
tiene 0).
Las terminales están en un treestate cuando una condición de reset
llega a estar activa, aún si no haya señal de reloj.
Si en PORTxn se escribe un uno lógico cuando la terminal se configura
como salida, en PINx.n se tendrá un nivel alto. Si se escribe un cero,
se tendrá un nivel bajo.
Normalmente, el estado con el pull-up habilitado es aceptable, en un
ambiente de alta impedancia no se notará la diferencia entre un nivel
alto y el pull-up. Si este no es el caso, con el bit PUD del registro
SFIOR se pueden deshabilitar los pull-ups en todos los puertos.
Ver manual para conmutar entre estados treestate y salida en alto.
CLOCK
Se tienen diferentes fuentes para manejar al oscilador interno
y a la vez, la señales de reloj se distribuyen por los diferentes
módulos:
Consumo/Modos Sleep
Los modos SLEEP habilitan a la aplicación a apagar
módulos sin usar en el MCU y por lo tanto, ahorrar
energía.
El AVR tiene 5 o 6 modos SLEEP y para entrar en
alguno de ellos, el bit SE (SLEEP enable) del registro
MCUCR (MCU Control Register) debe ponerse en alto.
Los bits SM2, SM1 y SM0 de MCUCR determinan el modo:
Consumo/Modos Sleep
Referencias y a la Práctica….
Sitio oficial de Atmel:
Página de AVR en Atmel
Portales, foros:
AVRFreaks
Guia AVR
Mi recomendado AVRBeginners
Preguntarle a pepe que tiene bocha….
Desarrollo:
Referencias de Wikipedia
Descargar