Modelo de Registros
Modelo de Registros
Los microcontroladores de la familia MSP430x2xx poseen un total de 16 registros de propósito general que permiten hacer operaciones tanto con datos, como con direcciones que indiquen donde están esos datos. Estos registros se denominan como Rn, donde n va desde 0 a 15.
Los 4 primeros registros no se pueden utilizar a nivel de programador, ya que tienen funciones preasignadas:
- El R0 es el Contador de Programa o PC.
- El R1 el Puntero de Pila o SP.
- El R2 contiene en Registro de Estado en uno de sus bytes, y utiliza el otro byte para la generación de constantes más usadas en relación con las instrucciones emuladas.
- El R3 también se usa para generación de constantes.
- Del R4 al R15 están disponibles para uso del programador.
Además de los registros, existe una Unidad Aritmético Lógica (Arithmetic and Logic Unit ALU) de 16 bits, gobernada por la señal de reloj MCLK, que permite realizar las operaciones de suma y resta binaria, operaciones lógicas XOR, AND, NOT, operaciones sobre bits, puesta a 0, incrementos, desplazamientos y rotaciones. La operación de multiplicación no está implementada en la ALU, existiendo en algunos microcontroladores de esta familia un periférico específico para llevar a cabo esta operación (el multiplicador Hardware).
Modelo de Registros de la CPU de la familia MSP430x2xx
Contador de Programa R0 (PC)
Es un registro de 16 bits, que apunta siempre a la siguiente instrucción (o trozo de ésta) que se va a ejecutar/traer. Apunta siempre a direcciones pares, ya que las instrucciones tienen tamaño par en número de bytes, y los accesos a partes de ellas son siempre de tamaño palabra. Su valor se incrementa automáticamente a medida que se van leyendo las palabras que componen la instrucción.
Puntero de Pila R1 (SP)
Para entender el puntero de pila es necesario conocer el concepto de PILA.
PILA
La PILA es una zona especial de memoria que se define para que la CPU almacene automáticamente la dirección de retorno del PC en las llamadas a subrutinas, así como la dirección de retorno del PC y el registro de estado (SR) durante el procesado de una interrupción. Además de estos usos, la pila sirve para pasar parámetros a funciones y para guardar variables temporales.
La pila es una estructura de datos en la que el modo de acceso es de tipo LIFO (Last In First Out --> último en entrar, primero en salir), lo que permite almacenar y recuperar datos ordenadamente. Los datos almacenados se estructuran de forma “apilada”, por lo que en todo momento sólo se tiene acceso a la parte superior de la pila o TOS (Top Of Stack), donde se encuentra el último dato almacenado. Para operar con una pila es necesario disponer de un puntero de pila (SP) que apunte a la parte superior de la pila, gracias al cual se pueden llevar a cabo dos operaciones básicas: introducir un nuevo dato en la pila (PUSH) y extraer el último dato de la pila (POP). Cualquiera de estas dos operaciones aumenta o disminuye el tamaño de la pila, por lo que se modifica convenientemente el puntero de pila. Según esta filosofía, los datos almacenados en último lugar son los primeros en ser recuperados.
Funcionamiento de la PILA en la familia MSP430x2xx
El puntero de pila es un registro que almacena la dirección de memoria en donde se almacenó el último dato que se introdujo en la PILA. Como la pila puede almacenar indistintamente palabras o bytes, el puntero de pila siempre apunta a una dirección par, para poder acceder correctamente a las palabras (si se almacena un byte, el puntero de pila se sigue modificando en dos posiciones).
El sentido de crecimiento de la PILA, cuando se introducen nuevos datos en ella, es hacia las direcciones de memoria bajas (disminuye SP) y decrece hacia direcciones de memoria altas (aumenta SP) cuando se extraen datos de ella. En este esquema, cuando se quiere introducir un dato (instrucción PUSH) se hace un predecremento del SP y cuando se quiere extraer un dato (instrucción POP) se hace un postincremento del SP.
Es necesario inicializar el valor del puntero de pila con la posición a partir de la cual se quieren empezar a almacenar valores (posición conocida como base de la pila). Normalmente se utiliza como dicha posición el final de la RAM (0x0600 en el caso del MSP430F2274), ya que la pila crece hacia las direcciones bajas de memoria
Reflexiona: Inicialización del puntero de pila
¿Existe algún problema con inicializar el puntero de pila del microcontrolador MSP430F2274 con la dirección 0x0600?
PISTA
¿Qué tipo de memoria, según el mapa que se expuso anteriormente sobre el MSP430F2274, hay en esa zona de memoria?
Registro de Estado (SR)
El registro de estado es un registro de 16 bits de los cuales sólo se emplean los 8 más bajos. Estos bits permiten indicar y modificar determinados resultados de operaciones realizadas por instrucciones, modos de funcionamiento de bajo consumo (mediante activación/desactivación de distintos elementos internos) y habilitar/deshabilitar las interrupciones del sistema.
Los bits y sus funciones son los siguientes:
- C(arry) (0). Indica que, como resultado de una operación, se ha producido un acarreo o un “borrow”.
- Z(ero) (1). Indica que el resultado de una operación ha sido 0.
- N(egativo) (2). Indica que el resultado de una operación ha sido un número negativo.
- GIE (General Interrupt Enable) (3). Habilita las interrupciones enmascarables cuando vale 1.
- CPU OFF (4). Apaga la CPU (en realidad el reloj principal, MCLK que controla su funcionamiento) a 1. Se activa en cualquiera de los modos de bajo consumo.
- OSC OFF (5). A 1 desactiva el oscilador de cristal (modo LPM4).
- SCG0-1 (6-7). Gobiernan la activación de los diferentes elementos del sistema de relojes interno, excepto el oscilador de cristal y el reloj principal. Esto afecta al funcionamiento de dispositivos que dependen de esos relojes.
- (o)V(erflow) (8). Indica que el resultado de una operación ha desbordado la capacidad de almacenamiento del destino, en operaciones con signo.
Generadores de constantes R2 y R3
Estos registros generan las constantes más comúnmente utilizadas sin necesidad de que aparezcan explícitamente en el código. Este hecho permite, reducir el tamaño del código y acelerar la ejecución del mismo de forma transparente al programador, así como la generación de las instrucciones emuladas a través de las básicas.
Registros de propósito general R4 a R15
Estos registros se utilizan como almacenamiento temporal de información. Tienen tamaño palabra, y no se hace distinción respecto a la información que almacenan (datos o direcciones). Se llaman Rn con n=4-15. Aunque son registros de 16 bits, se puede operar con ellos en formato byte o en formato palabra
Cuando se utilizan como origen de los datos y se opera en formato byte, la parte alta del registro (MSB) se ignora
Cuando
se utilizan como destino de los datos y se opera en formato byte, la parte alta
del registro (MSB) se rellena con cero