Home MundoTec Software Código fuente Tutorial / pdf Minijuegos
Cerrar

Tutorial Microcontroladores

Tutorial Microcontroladores.







Microcontroladores

Memorias Periféricas

Las memoria pueden ser una forma de periféricos. Ya hemos discutido el uso de diferentes tipos de memoria, pero sin considerar la lógica requerida para soportarlas. Las ROM y RAM son muy íntegras y no requieren lógica de soporte más que la lógica de selección de direcciones para distinguir una posición de otra. Esta lógica es provista en el mismo chip que aloja a la memoria.

Las memorias EPROM (PROM borrable) y EEPROM (PROM borrable eléctricamente) requieren una lógica de soporte para grabarlas (y borrarlas en las EPROM). La lógica periférica de soporte para el MC68HC705J1A es similar a un grabador de PROM contenido en la misma MCU. Un registro de control incluye bits de control para seleccionar entre los modos de grabación y lectura, y habilitar la fuente de alimentación de programación de alta tensión.

Revisión del Capítulo 3

Nos figuramos a la memoria como un conjunto de casillas de correo. La revisión de una computadora presenta a la memoria como una serie de valores de 8 bits.

Si una computadora tiene n líneas de dirección, ella puede únicamente direccionar 2 a la n posiciones de memoria. Una computadora con once líneas de dirección puede direccionar 2 a la 11 ó 2048 (10) posiciones.

Un kilobyte (que se escribe 1K byte) es igual a 1024(10) bytes.

Tipos de Memoria
  • RAM. La memoria de acceso aleatorio puede ser leída y escrita por una CPU. Su contenido se mantiene mientras la fuente de alimentación esté encendida.
  • ROM. La memoria de lectura solamente puede ser leída más no escrita. El contenido debe establecerse antes de la fabricación del circuito integrado. No necesitan alimentación para mantener su contenido.
  • EPROM. La memoria ROM programable y borrable pueden cambiar su contenido previo proceso de borrado mediante la exposición a la luz ultravioleta, y entonces programarlas con un nuevo valor. Las operaciones de borrado y grabación pueden realizarse un número limitado de veces desde su fabricación. No necesitan alimentación para mantener su contenido..
  • OTP. El chip en una EPROM programable una única vez es idéntico al de una EPROM, pero su encapsulado es opaco. Así la luz ultravioleta no puede atravesar el encapsulado, esta memoria no puede ser borrada una vez que ha sido grabada.
  • EEPROM. La memoria PROM borrable eléctricamente permite que su contenido sea cambiado usando señales eléctricas y reteniendo su contenido aún sin alimentación. Típicamente una posición de memoria EEPROM puede borrarse y grabarse hasta alrededor de 100.000 o 1.000.000 veces.
  • FLASH este tipo de memoria es similar a las EEPROM pero el proceso de borrado no está orientado al byte sino a la “página” que puede ser de 32 / 64 o 128 bytes según la estructura interna de la memoria FLASH. La principal ventaja de este tipo de memorias es su bajo valor en relación a las EEPROM lo que permite MCUs reprogramables y con capacidad de almacenamiento no-volátil a precios comparables a la tecnología OTP.
  • I/O. Los registros de I/O, de estado y de control, son un tipo especial de memoria puesto que la información puede ser monitoreada y / o alterada por algún otro además de la CPU.

Una memoria no-volátil mantiene su contenido aún cuando se apague su fuente de alimentación.

Una memoria volátil pierde su contenido al apagar su fuente de alimentación.

Un mapa de memoria es una representación gráfica de la totalidad de la memoria de un sistema de computadora.

Las primeras 256 posiciones de memoria en un microcontrolador pueden ser accedidas de un modo especial denominado modo de direccionamiento directo. En este modo la CPU asume que el byte de mayor peso de una dirección es $00 no siendo necesario explicitarlo al escribir un programa (ahorrando el espacio que ocuparía, así como los ciclos de reloj que requeriría su búsqueda).

En especial las memorias tales como EPROM y EEPROM pueden considerarse periféricas en un sistema de computadora. Se requiere una lógica de soporte y control de programación para modificar su contenido. Esto difiere de simples memorias tales como las RAM que pueden ser leídas o escritas en simples ciclos de reloj de la CPU.

Capítulo 4.

Arquitectura de una Computadora.

En este capítulo tomaremos el corazón de una computadora para ver qué hacen sus latidos. Esta será una más detallada revisión de la normalmente necesaria para poder usar una MCU pero nos ayudará a entender por qué algunas cosas se hacen de cierta manera.

Toda actividad de la CPU puede dividirse en secuencias de muy simples etapas. Un reloj oscilador genera un reloj de CPU que es usado para mover a la CPU a través de esas secuencias. El reloj de CPU en términos humanos es muy rápido, nos parece que las cosas ocurren casi instantáneamente.

Siguiendo esta secuencias paso a paso, ganaremos un trabajado entendimiento de cómo una computadora ejecuta los programas. Además de ganar un valioso conocimiento de las capacidades y limitaciones de una computadora.

Arquitectura de una Computadora

Los MCUs de 8 bits de Freescale M68HC05 tienen una organización específica denominada arquitectura de Von Neumann, en honor a un matemático norteamericano. En esta arquitectura, un CPU y un arreglo de memoria se interconectan mediante un conjunto de líneas (bus) de direcciones (address) y otro de líneas de datos (data). El bus de direcciones es usado para indicar qué posición de memoria está siendo accedida y el bus de datos se usa para transportar la información desde el CPU a la posición de memoria (casilla para palomas) o bien desde la posición de memoria al CPU.

En la implementación hecha por Freescale de esta arquitectura, hay algunas pocas casillas para palomas especiales (denominadas registros del CPU) en el interior del CPU, que actúan como pequeños anotadores de borrador y tablero de control del CPU. Los registros del CPU son similares a las memorias en que la información puede ser escrita y retenida en su interior. Es importante recordar que ellos están cableados en el CPU (registros internos) y no forman parte de la memoria direccionable por la CPU (registros externos).

Toda la información (no la de los registros de la CPU) accesible a la CPU es vista (por la CPU) como una única fila de miles de casillas para palomas o más. A veces esta organización es llamada sistema de I/O mapeado en memoria dado que la CPU trata a toda posición de memoria por igual aunque ella contenga instrucciones de programa, variables de datos o entradas / salidas (I/O) de control. Hay otras arquitecturas de computadoras, pero no es el objetivo de este texto explorarlas. Afortunadamente, la arquitectura M68HC05 de Freescale que discutiremos es una de las más fáciles de entender y usar.

Esta arquitectura abarca las más importantes ideas de las computadoras binarias digitales; por lo tanto, la información presentada en este texto será igualmente aplicable si se propone estudiar otras arquitecturas.

El número de líneas del bus de direcciones determina número total de casillas para palomas: el número de líneas del bus de datos determina la cantidad total posible de información que se puede almacenar en cada casilla para palomas. En el M68HC705J1A, el bus de direcciones tiene 11 líneas, que hacen un máximo de 2048 ( ó 2 a la 11) casillas para paloma independientes (en la jerga de los MCU diremos que esta CPU puede acceder 2K posiciones de memoria). Como el bus de datos del MC68HC705J1A es de ocho bits, cada casilla para paloma puede almacenar un byte de información un byte es ocho dígitos binarios, o dos dígitos hexadecimales, o un carácter ASCII, o un valor decimal de 0 á 255.

Registros de la CPU

Diferentes CPU poseen diferentes conjuntos de registros internos. Las diferencias son principalmente el número y el tamaño de estos registros. En la figura 4-1 se presentan los registros de la CPU que encontramos en MC68HC05. Este es un relativamente sencillo conjunto de registros de la CPU, que resulta ser representativo de todos los tipos de registros de la CPU y puede usarse para explicar todo sobre los conceptos fundamentales. Este capítulo brinda una breve descripción de los registros del MC68HC05 como una introducción a la arquitectura de la CPU en general. Veremos información más detallada respecto a los registros del MC68HC05 en otro capítulo de este texto denominado repertorio de instrucciones del MC68HC05.

Microcontroladores

Fig. 4-1 – Registros del CPU MC68HC705

El registro A, es un registro de almacenamiento temporário de 8 bits, se lo llama acumulador ya que se usa a menudo para alojar uno de los operandos o el resultado de una operación aritmética.

El registro X, es un registro índice de 8 bits, que además puede servir como un simple registro de almacenamiento temporario. El principal propósito de un registro índice es apuntar a un área en la memoria desde donde la CPU cargará (leer) o almacenará (escribir) información. Un registro índice suele llamarse registro puntero. Entenderemos más respecto a índices cuando discutamos los modos de direccionamiento indexado.

El registro contador de programa (PC) es usado por la CPU para no perder de vista la dirección de la próxima instrucción a ejecutar. Al resetear la CPU (encenderla), la PC es cargado con el contenido de un par de posiciones de memoria específico denominado vector de reset. Las operaciones del vector de reset contienen la dirección donde está almacenada la lógica interna de la CPU incrementa a la PC de modo tal que siempre apunte a la próxima parte de información que la CPU puede necesitar. El número de bits de la PC coincide exactamente con el número de líneas del bus de direcciones. Esto determina el total espacio de memoria potencialmente disponible que puede ser accedido por la CPU.

En el caso del MC68HC705J1A, la PC es de 11 bits; con el que, su CPU podrá acceder hasta 2K (2048 ó 2 a la 11) bytes de memoria. Los valores para este registro se expresan mediante cuatro dígitos hexadecimales donde los cinco bits más significativos de la correspondiente dirección binaria de 16 bits son siempre ceros.

El registro de código de condición (CCR) es de 8 bits, almacena indicadores de estado que reflejan al resultado de alguna operación previa de la CPU. Los tres bits de más peso de este registro no se usan y siempre son iguales a cero lógico. Las instrucciones de bifurcación usan a los bits de estado para tomar simples decisiones respecto a su estado.

El puntero a la pila (stack pointer, SP) es usado como puntero a la próxima posición disponible de una pila (stack) del tipo último en ingresar / primero en salir (LIFO). El stack puede tomarse como una pila de cartas, en la que cada carta almacena un solo byte de información. En el momento que se desee, la CPU puede poner una carta arriba de la pila o retirar una de arriba de la pila. No podemos retirar una carta del interior de la pila antes de haber retirado todas las cartas que tiene encima. La CPU sigue el comportamiento del stack con el SP. El SP apunta a la posición de memoria (casilla para palomas libre), la que se considera es la dirección de la próxima carta disponible. Cuando la CPU agrega una porción de dato en la pila, el dato es escrito en la casilla para palomas apuntada por el SP y el SP luego se decrementa para apuntar a la posición de memoria previa (casilla para palomas anterior libre). Cuando la CPU retira una porción de dato de la pila, el SP se incrementa para apuntar a la casilla para palomas previamente usada y de ella se retira el dato. Al encender la CPU o bien luego de ejecutar la instrucción reset stack pointer (RSP), el SP apunta a una específica posición de memoria en RAM (a cierta casilla para palomas).

Temporización

Una fuente de reloj de alta frecuencia (típicamente derivada de un cristal conectado al MCU) se usa para controlar el secuenciamiento de las instrucciones de la CPU. Los MCU típicos dividen la frecuencia base del cristal por dos o más para obtener un reloj de frecuencia de bus. Cada lectura o escritura de memoria toma un período (ciclo) de la frecuencia de bus. En el caso del MC68HC705J1A, un reloj oscilador a cristal de 4 MHz (máximo) dividido por 2 obtiene la frecuencia interna de reloj del procesador de frecuencia de bus (500 nS mínimo). La mayoría de las instrucciones toman de dos a cinco de estos pasos; por lo tanto, la CPU es capaz de ejecutar más de 500000 instrucciones por segundo.

Programa visto por la CPU

El listado 4-1 es de un pequeño programa de ejemplo que usaremos en nuestra discusión de la CPU. El capítulo de programación provee mucha más información que la que necesita ka CPU para que una persona pueda leer y entender programas. En la primera columna se presentan direcciones de cuatro dígitos hexadecimales. Las tres columnas que le siguen, son valores de 8 bits (el contenido de una única posición de memoria). El resto de la información del listado es para ayudar a la persona que necesita leer el listado.

El significado de esta información será discutido más detalladamente en el capítulo de programación.

La figura 4-2 es un mapa de memoria del MC68HC705J1A, presenta cómo el programa de ejemplo se aloja en la memoria del MCU. Esta figura es similar a la figura 3-4 excepto que una diferente porción del espacio de memoria ha sido expandida para presentar el contenido de todas las posiciones de memoria en el programa de ejemplo.

La figura 4-2 muestra que la CPU ve al programa de ejemplo como una secuencia lineal de códigos binarios, incluyendo instrucciones y operandos en posiciones de memoria consecutivas. Un operador es cualquier valor, que no es un código de operación, y que la CPU necesita para completar una instrucción. La CPU inicia este programa con su contador de programa (PC) apuntando al primer byte del programa. El código de operación de cada instrucción le dice a la CPU cuántos (si los hay) y de qué tipo son, los operandos que vienen en la instrucción. Así la CPU puede mantenerse en línea con los límites de una instrucción sin mezclar códigos de operación con operandos, lo que se nos presenta confuso.

Microcontroladores
Listado 4-1 – Programa de Ejemplo.
Microcontroladores

La mayoría de los programas de aplicación podrían alojarse en ROM, EPROM u OTPROM / FLASH, aunque no es un requerimiento especial las instrucciones deberán estar en una memoria tipo ROM para ser ejecutadas. En lo que a la CPU respecta, un programa es sólo una serie de patrones de bits que procesará secuencialmente.

Estudiaremos cuidadosamente el listado 4-1 del programa de ejemplo y el mapa de memoria de la figura 4-2. encontraremos la primera instrucción de la subrutina DLY50 en el listado 4-1 y luego encontraremos los mismos dos bytes en la figura 4-2.

Habremos encontrado una línea de la siguiente forma casi al final del listado 4-1.

0323 B7 EO DLY50 STA TEMP1 ; Save accumulator en RAM

La sección resaltada de memoria a la derecha de la figura 4-2 es el área que habremos identificado.