Title | 2. ORGANIZACIÓN INTERNA DE LOS MICROCONTROLADORES Microcontroladores |
---|---|
Author | Rodri Carita Aspi |
Pages | 73 |
File Size | 1.5 MB |
File Type | |
Total Downloads | 35 |
Total Views | 171 |
2. ORGANIZACIÓN INTERNA DE LOS MICROCONTROLADORES Microcontroladores M. C. Felipe Santiago Espinosa 1 Marzo / 2017 MICROCONTROLADORES AVR DE ATMEL Arquitectura RISC de 8 bits. Arquitectura Harvard, con memoria Flash para código, SRAM y EEPROM para datos. Su Arquitectura es Cerrada. Por la op...
2. ORGANIZACIÓN INTERNA DE LOS MICROCONTROLADORES
Microcontroladores
1
M. C. Felipe Santiago Espinosa Marzo / 2017
MICROCONTROLADORES AVR DE ATMEL
Arquitectura RISC de 8 bits.
Arquitectura Harvard, con memoria Flash para código, SRAM y EEPROM para datos.
Su Arquitectura es Cerrada.
Por la operación con los datos, la arquitectura es del tipo Registro-Registro. 2
Tamaño
MICROCONTROLADORES AVR DE ATMEL
XMEGA megaAVR tinyAVR
núcleo AVR
Características
AVR: Alf-Egil Bogen, Vegard Wollan, RISC Processor
3
LA FAMILIA DE MICROCONTROLADORES AVR La familia de microcontroladores AVR es muy numerosa, incluye más de 70 dispositivos que comparten el núcleo, pero difieren en recursos. En particular revisaremos el ATMega328, cuyas características técnicas se resumen a continuación: Flash (Kbytes)
32
TWI
Si
EEPROM (bytes)
1K
ISP
Si
SRAM de proposito general (bytes)
2048
ADC de 10 bits (canales)
8 (6 en encapsulado PDIP)
Max Pines I/O
23
Comparador Analógico
Si
F.max (MHz)
20
Watchdog Timer
Si
Vcc (V)
2.7-5.5
Oscilador Interno
Si
16-bit Timers
1
Multiplicador por Hardware
Si
8-bit Timer
2
Interrupciones
26
PWM (canales)
6
Int. Externas
2
RTC
Si
Int. Por cambios en Pines
3 (una por puerto)
USART
1
Autoprogramación
Si
SPI (Maestro/Esclavo)
1
Debug wire
Si 4
ASPECTO EXTERNO ATMEGA328 Incluye 3 puertos, todas las terminales con más de una función alterna.
PB – 8 bits PC – 7 bits PD – 8 bits
5
AVR CPU CORE 6
INTERIOR DEL MICROCONTROLADOR (ATMEGA328)
7
AVR CPU CORE
La función principal de la CPU es asegurar la correcta ejecución de programas. La CPU debe tener acceso a las memorias, realizar cálculos, controlar periféricos y manejar interrupciones. Para maximizar el rendimiento y paralelismo, el AVR usa una arquitectura Harvard – con memorias y buses separados para instrucciones y datos. La ALU soporta operaciones aritméticas y lógicas entre registros o entre un registro y una constante. Aunque también hay operaciones con un solo registro. 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.
8
EJECUCIÓN DE INSTRUCCIONES
El flujo del programa por naturaleza es secuencial. Puede ser modificado por instrucciones de saltos condicionales e incondicionales y llamadas a rutinas, que pueden abarcar completamente el espacio de direcciones.
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 capturada de la memoria de programa. Este concepto hace que se produzca una instrucción por cada ciclo de reloj. 9
EJECUCIÓN DE INSTRUCCIONES
Con esto aparenta que las instrucciones solo requieren de un ciclo de reloj (excepto los saltos). Generando un rendimiento aproximado a 1 MIPS por MHz de la frecuencia de trabajo del oscilador.
10
EJECUCIÓN DE INSTRUCCIONES Para la ejecución de instrucciones aritméticas y lógicas, 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. T1
T2
CLK CPU
Tiempo total de Ejecución Captura de operandos Operación de la ALU Escritura de resultado
11
ARCHIVO DE REGISTROS
El Archivo de Registros contiene 32 registros de propósito general de 8 bits, habilitados para un acceso rápido. 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. Para ello, estos registros se denominan X, Y y Z. El registro Z también puede usarse como apuntador a la memoria de programa. Arquitectura Optimizada para ejecutar código C compilado.
7
X { Y { Z {
0 R0 R1 R2 ... R13 R14 R15 R16 R17 ... R26 (XL) R27 (XH) R28 (YL) R29 (YH) R30 (ZL) R31 (ZH)
Dir. 0x00 0x01 0x02 0x0D 0x0E 0x0F 0x10 0x11 0x1A 0x1B 0x1C 0x1D 0x1E 0x1F
12
AVR CPU CORE Mapa de memoria 13
Memoria de Programa
Memoria Flash cuyo tamaño varia entre procesadores, para el ATMega328 es de 32 Kbytes (16 K x 16 bits). Soporta hasta 10,000 ciclos de escritura/borrado. Se puede dividir en una sección para aplicación y una sección de arranque, donde podría manejarse un cargador para auto programación. Los vectores de interrupción son parte de la memoria de programa e inician en la dirección 0. 14
Vector de interrupciones en el ATMega328 Vect.
Dir.
Fuente
Descripción
1
0x0000
RESET
Reset del sistema (diferentes condiciones)
2
0x0002
INT0
Interrupción Externa 0
3
0x0004
INT1
Interrupción Externa 1
4
0x0006
PCINT0
Int. por cambio de pines 0
5
0x0008
PCINT1
Int. por cambio de pines 1
6
0x000A
PCINT2
Int. por cambio de pines 2
7
0x000C
WDT
Reset por Watchdog Timer
8
0x000E
TIMER2_COMPA
El timer 2 coincide con su comparador A
9
0x0010
TIMER2_COMPB
El timer 2 coincide con su comparador B
10
0x0012
TIMER2_OVF
11
0x0014
TIMER1_CAPT
12
0x0016
TIMER1_COMPA
El timer 1 coincide con su comparador A
13
0x0018
TIMER1_COMPB
El timer 1 coincide con su comparador B
14
0x001A
TIMER1_OVF
Desbordamiento del timer 2 Captura de entrada con el timer 1
Desbordamiento del timer 1
15
Vect. Dir.
Fuente
Descripción
15
0x001C
TIMER0_COMPA
El timer 0 coincide con su comparador A
16
0x001E
TIMER0_COMPB
El timer 0 coincide con su comparador B
17
0x0020
TIMER0_OVF
18
0x0022
SPI_STC
19
0x0024
USART_RX
20
0x0026
USART_UDRE
Registro de Datos de la USART vacío
21
0x0028
USART_TX
Transmisión completa por la USART
22
0x002A
ADC
23
0x002C
EE_READY
24
0x002E
ANALOG_COMP
25
0x0030
TWI
26
0x0032
SPM_READY
Desbordamiento del timer 0 Transferencia completa por SPI Recepción completa por la USART
Conversión del ADC completa EEPROM lista Comparador analógico
Interfaz serial a dos hilos (2-wire) Almacenamiento en memoria de programa
La ubicación de los vectores de interrupción puede modificarse para que el MCU inicie ejecutando instrucciones desde la sección de arranque.
16
Memoria de Datos
SRAM
EEPROM
17
Memoria SRAM de Datos
Es un espacio de 2304 localidades de 8 bits e incluyen:
32 Registros de acceso rápido. 64 Registros I / O. 160 Registros I/O extendidos. 2048 Localidades de propósito general.
Los 32 registros de acceso rápido y los registros I/O tienen direcciones para ser tratados como SRAM de propósito general.
18
Archivo de Registros
El repertorio de instrucciones AVR está optimizado para el archivo de Registros. 7 0 Las instrucciones que operan sobre el Archivo de Registros tienen acceso a todos ellos. Las que operan un registro con una constante sólo trabajan con los registros de R17 a R31. Cada registro tienen una dirección que le permite ser tratado como cualquier otra localidad de RAM (0x000 – 0x01F), utilizando instrucciones de Carga (LD) y almacenamiento (ST). De R26 a R31 pueden usarse como apuntadores para direccionamiento indirecto.
X { Y { Z {
R0 R1 R2 ... R13 R14 R15 R16 R17 ... R26 (XL) R27 (XH) R28 (YL) R29 (YH) R30 (ZL) R31 (ZH)
Dir. 0x00 0x01 0x02 0x0D 0x0E 0x0F 0x10 0x11 0x1A 0x1B 0x1C 0x1D 0x1E 0x1F
19
Registros I/O
El ATMega328 cuenta con un espacio para alojar hasta 64 Registros I/O de 8 bits (aunque no todas las direcciones están ocupadas). Los Registros I/O se emplean para la configuración y el control de recursos internos, así como para conocer su estado. En este espacio están los registros para el manejo de los Puertos de Entrada/Salida. El acceso a los Registros I/O se realiza con las instrucciones IN y OUT, intercambiando datos con el Archivo de Registros. Con estas instrucciones deben usarse las direcciones 0x00 0x3F. Los Registros I/O pueden ser tratados como memoria, con instrucciones de carga (LD) y almacenamiento (ST) (direcciones 0x20 - 0x5F), aunque es menos eficiente. Los Registros I/O en el rango 0x00 - 0x1F son accesibles por bit. Para modificarse, con instrucciones SBI y CBI o para evaluarse, a través de las instrucciones SBIS y SBIC.
20
Registros I/O Extendidos
El espacio para los Registros I/O Extendidos es de 160 localidades; aunque la mayoría están libres, el espacio está disponible para compatibilidad con otras versiones de la familia AVR.
Tienen la misma función que los Registros I/O, es decir, se emplean para la configuración y el control de recursos internos, así como para conocer su estado. Los Registros I/O Extendidos son Registros I/O mapeados en SRAM, por lo que únicamente se pueden tratar con instrucciones de carga (LD) y almacenamiento (ST) (direcciones 0x60 - 0xFF). Como un ejemplo, los registros de los Temporizadores son parte de los Registros I/O Extendidos. Los Registros I/O y Registors I/O Extendidos se revisarán conforme se estudien los diferentes recursos, la lista completa 21 se puede consultar en la Hoja de Especificaciones.
Registro de ESTADO (SREG: 0x3F) Bit Read/Write Valor inicial
– I: Habilitador global de Interrupciones, con un 1 lógico, las interrupciones son habilitadas. – T: Para respaldo de un bit, es usado con la instrucción BLD para Carga y BST para Almacenamiento. – H: Bandera de acarreo de los 4 bits inferiores (Half) – S: Bit de signo (Mantiene una XOR entre N y V) – V: Bandera de Sobreflujo, en operaciones de complemento a dos. – N: Bandera de Negativo – Z: Bandera de Cero
Se generan con operaciones Aritméticas y lógicas
22
– C: Bandera de Acarreo 22
Apuntador de Pila (SP) $3E $3D
La pila está implementada en el espacio de propósito general (que es de 2048 bytes). Es usada durante la llamada de subrutinas, el manejo de interrupciones o para el almacenamiento temporal de variables (con instrucciones PUSH y POP). El registro SP es el apuntador al tope de la pila. Realmente 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 si se manejan rutinas, debe ser inicializado con 0x08FF, para que realice un almacenamiento dentro de un espacio válido. 23
ACCESO AL ESPACIO DE PROPÓSITO GENERAL
La arquitectura AVR es del tipo Registro – Registro, la información de SRAM sólo puede ser operada cuando está en Registros. Existen diversas instrucciones para cargas o almacenamientos, ya sean de manera directa o indirecta.
24
ACCESO AL ESPACIO DE PROPÓSITO GENERAL T1
T2
T3
CLK CPU
Registro IR
Captura
Dirección
Calcula dirección
Dirección válida Dato a escribir
Datos
Almacenamiento (Escritura en SRAM)
WR Dato leído
Datos RD
La etapa de ejecución de un acceso a memoria, ya sea carga o almacenamiento, requiere de dos ciclos de reloj.
Carga (Lectura en SRAM)
25
MEMORIA EEPROM PARA DATOS
Espacio no volátil para el almacenamiento de datos, cuyo tamaño varia entre procesadores. Para el ATMega328 es de 1024 bytes. La memoria EEPROM está en un espacio independiente y se requiere de 3 Registros I/O para su acceso: EEAR - Para el manejo de la dirección.
(dir.)
7
6
5
4
3
2
1
0
0x22
-
-
-
-
-
-
EEAR9
EEAR8
EERH
0x21
EEAR7
EEAR6
EEAR5
EEAR4
EEAR3
EEAR2
EEAR1
EEAR0
EERL 26
EEDR - Para el dato (0x1D)
(dir.)
7
6
5
0x20
4
3
2
1
0
Registro de datos de la EEPROM
EEDR
EECR - Para el control (0x1C)
(dir.) 0x1F
7 -
– EEMP[1:0]
6 -
5 4 EEPM1 EEPM0
3 2 EERIE EEMPE
1 EEPE
0 EERE
EECR
EEPROM Programming Mode Definen qué acción se realizará en la EEPROM, es posible con una operación borrar el viejo valor y escribir el nuevo (operación atómica).
EEMP1
EEMP0
Tiempo
Operación
0
0
3.4 mS
Borra y escribe en una operación
0
1
1.8 mS
Únicamente borra
1
0
1.8 mS
Unicamente escribe
1
1
-
Reservado
27
Bits del registro de CONTROL : (dir.) 0x1F
7 -
6 -
5 4 EEPM1 EEPM0
3 2 EERIE EEMPE
1 EEPE
0 EERE
EECR
– EERIE:
EEPROM Ready Interrupt Enable En alto habilita la interrupción por EEPROM. La EEPROM genera una interrupción cuando EEWE/EEPE es limpiado.
– EEMPE :
EEPROM Master Write Enable Determina si la puesta en alto de EEPE producirá una escritura en la EEPROM. Al ponerse en alto, se cuenta con 4 ciclos para iniciar la escritura con EEPE, de lo contrario se limpiará automáticamente por Hardware.
– EEPE :
EEPROM Write Enable Debe ponerse en alto para dar inicio a un ciclo de escritura. Se limpiará automáticamente por Hardware al finalizar la escritura. Un programa de usuario puede monitorear este bit o si se pone en alto a EERIE se producirá una interrupción.
– EERE:
EEPROM Read Enable Debe ponerse en alto para un ciclo de lectura, se limpiará automáticamente por Hardware. El dato leído está disponible de manera inmediata. No es posible realizar una lectura si hay una escritura en proceso.
28
Rutina de Escritura en EEPROM : ; El dato a escribir está en R16 ; Se escribirá en las direcciones R18:R17 EEPROM_write: ; Asegura que no hay escritura en proceso sbic EECR,EEPE rjmp EEPROM_write
; Establece la dirección out EEARH, r18 out EEARL, r17 ; Coloca el dato out EEDR,r16 ; Pone en alto al habilitador maestro sbi EECR,EEMPE ; Inicia la escritura sbi EECR,EEPE ret
29
Función de Escritura en EEPROM : // Recibe el dato y la dirección a escribir
void
EEPROM_write (unsigned char dato, unsigned int direccion )
{ // Asegura que no hay escritura en proceso while ( EECR & 1...