miniaturadeimagen|Tarjeta de desarrollo para programar dispositivos de la serie G2. MSP430 es una familia de microcontroladores fabricados por Texas Instruments. Construido con una CPU de 16bits, el MSP430 está diseñado para aplicaciones embebidas de bajo costo, sistemas inalámbricos y/o de ultra bajo consumo de energía. Esta arquitectura tiene semejanzas con la del procesador DEC PDP-11.
Este dispositivo tiene una gran variedad de configuraciones que se agrupan en familias, con velocidades máximas de procesamiento y capacidades de direccionamiento diferentes, y modelos con diferentes selecciones de entre los siguientes periféricos: diferentes bloques y capacidades de memoria, oscilador interno, temporizadores incluyendo un PWM, temporizador watchdog, USART, bus SPI, bus I²C, 10/12/14/16-bit conversores ADC, y circuitos de apagado y reinicio. Algunos periféricos opcionales no tan usuales incluyen comparadores (que se utilizan con el temporizador para funcionar como un ADC simple), amplificadores operacionales dentro del chip para el acondicionamiento de señales, conversores DAC de 12bits, controlador de pantalla LCD, multiplicador hardware, y DMA para el manejo de datos entre zonas de memoria y/o los periféricos. A diferencia de las versiones anteriores con EPROM (PMS430E3xx) y ROM enmascarada (MSP430Cxxx), estos dispositivos son programables en sistema a través de JTAG o a través del bootstrap loader (BSL) usando RS-232.
La CPU del MSP430 thumb|300px|MSP430. La CPU usa una arquitectura von Neumann, con direccionamiento simple para las instrucciones y los datos. La memoria se direcciona por bloque de 1byte, y los pares de byte se combinan en forma endianness para hacer palabras de 16bits.
El procesador contiene 16registros de 16bits. R0 es el contador de programa, R1 es el puntero de pila, R2 es el registro de estado, y R3 es un registro especial denominado generador constante, que provee acceso a 6valores constantes utilizados comúnmente, sin requerir el uso de un operando adicional. Los registros desde el R4 hasta el R15 son para uso general.
El conjunto de instrucciones disponible es muy simple; hay 27instrucciones agrupadas en tres familias. La mayoría de las instrucciones son de 8bit (byte) y 16bit (palabra), dependiendo del valor de un bit llamado B/W, este bit es 1 para instrucciones de 8bits y 0 para las de 16bits. Las operaciones de byte sobre la memoria afectan solo al byte direccionado, mientras que las operaciones de byte sobre los registros al byte más significativo. + Conjunto de instrucciones del MSP430 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Instrucción 0 0 0 1 0 0 opcode B/W As register Single-operand arithmetic 0 0 0 1 0 0 0 0 0 B/W As register RRC Rotate right through carry 0 0 0 1 0 0 0 0 1 0 As register SWPB Swap bytes 0 0 0 1 0 0 0 1 0 B/W As register RRA Rotate right arithmetic 0 0 0 1 0 0 0 1 1 0 As register SXT Sign extend byte to word 0 0 0 1 0 0 1 0 0 B/W As register PUSH Push value onto stack 0 0 0 1 0 0 1 0 1 0 As register CALL Subroutine call; push PC and move source to PC 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 RETI Return from interrupt; pop SR then pop PC 0 0 1 condition 10-bit signed offset Conditional jump; PC = PC + 2×offset 0 0 1 0 0 0 10-bit signed offset JNE/JNZ Jump if not equal/zero 0 0 1 0 0 1 10-bit signed offset JEQ/JZ Jump if equal/zero 0 0 1 0 1 0 10-bit signed offset JNC/JLO Jump if no carry/lower 0 0 1 0 1 1 10-bit signed offset JC/JHS Jump if carry/higher or same 0 0 1 1 0 0 10-bit signed offset JN Jump if negative 0 0 1 1 0 1 10-bit signed offset JGE Jump if greater or equal 0 0 1 1 1 0 10-bit signed offset JL Jump if less 0 0 1 1 1 1 10-bit signed offset JMP Jump (unconditionally) opcode source Ad B/W As destination Two-operand arithmetic 0 1 0 0 source Ad B/W As destination MOV Move source to destination 0 1 0 1 source Ad B/W As destination ADD Add source to destination 0 1 1 0 source Ad B/W As destination ADDC Add source and carry to destination 0 1 1 1 source Ad B/W As destination SUBC Subtract source from destination (with carry) 1 0 0 0 source Ad B/W As destination SUB Subtract source from destination 1 0 0 1 source Ad B/W As destination CMP Compare (pretend to subtract) source from destination 1 0 1 0 source Ad B/W As destination DADD Decimal add source to destination (with carry) 1 0 1 1 source Ad B/W As destination BIT Test bits of source AND destination 1 1 0 0 source Ad B/W As destination BIC Bit clear (dest &= ~src) 1 1 0 1 source Ad B/W As destination BIS Bit set (logical OR) 1 1 1 0 source Ad B/W As destination XOR Exclusive or source with destination 1 1 1 1 source Ad B/W As destination AND Logical AND source with destination (dest &= src)
NdT: "Palabra de extensión" es la traducción de "Extension Word"
Las instrucciones están formadas por 16bits, seguidas de hasta dos palabras de extensión de 16bits. Hay cuatro modos de direccionamiento, especificados por el bit2 como campo. Algunas versiones especiales pueden ser construidas usando R0, y otros modos aparte del acceso directo al registro usando R2 (el registro de estado) y R3 (el generador constante) son interpretados de manera especial.
Los modos de direccionamiento indexado añaden una palabra de extensión de 16bits a la instrucción.
+ Modos de direccionamiento del MSP430 As Register Syntax Description 00 n Rn Register direct. The operand is the contents of Rn. 01 n x(Rn) ||align=left| Indexed. The operand is in memory at address Rn+x. |- | 10 || n || @Rn Register indirect. The operand is in memory at the address held in Rn. 11 n @Rn+ Indirect autoincrement. As above, then the register is incremented by 1 or 2. Addressing modes using R0 (PC) 01 0 (PC) LABEL Symbolic. x(PC) The operand is in memory at address PC+x. 11 0 (PC) #x Immediate. @PC+ The operand is the next word in the instruction stream. Addressing modes using R2 (SP) and R3 (CG), special-case decoding 01 2 (SR) &LABEL Absolute. The operand is in memory at address x. 10 2 (SR) #4 Constant. The operand is the constant 4. 11 2 (SR) #8 Constant. The operand is the constant 8. 00 3 (CG) #0 Constant. The operand is the constant 0. 01 3 (CG) #1 Constant. The operand is the constant 1. There is no index word. 10 3 (CG) #2 Constant. The operand is the constant 2. 11 3 (CG) #-1 Constant. The operand is the constant -1.
Las instrucciones generalmente consumen un ciclo (de reloj) por palabra adquirida o almacenada, por lo que la duración de las instrucciones va desde 1ciclo para instrucciones de registro a registro a 6ciclos para una instrucción con los dos operandos indexados.
Las operaciones de transferencia (Moves) al registro del contador de programa (PC) son posibles y conllevan saltos en el flujo continuo del programa. Los retornos de una subrutina por ejemplo, se implementan así: MOV @SP+, PC. En instrucciones con dos operandos, solo hay un bit "Ad" para especificar el modo de direccionamiento del destino, por lo que solo los modos 00 (directamente a registro) y 01 (indexado) están permitidos. Si tanto el origen como el destino son indexados, la palabra de extensión del origen va primero.
Cuando R0 (PC) o (R1) SP son unsados con el modo de acceso de autoincremeto, siempre son incrementados en dos. Otros registros (desde R4 a R15) son incrementados en el tamaño del operador, 1 o 2bytes.
El registro de estado ('SR') contiene cuatro bits de estado aritmético, una activado global de las interrupciones, y 4bits que desabilitan varios relojes para entrar en los modo de bajo consumo. Cuando se atiende una interrupción, el procesador almacena el registro de estado en la pila y limpia los bits de bajo consumo. Si el vector de interrupción no modifica el registro de estado almacenado, al volver de la interrupción, rehabilitara el modo de bajo consumo que estuviese habilitado previamente.
Mapa de direcciones del MSP430
La disposición general de las direcciones del MSP430 es:
0x0000–0x0007 Registros para funciones especiales del procesador(Registro para el control de interrupciones) 0x0008–0x00FF Periféricos de 8-bit. Se debe acceder a estos utilizando 8bits para lectura-escritura. 0x0100–0x01FF Periféricos de 16-bit. Se debe acceder a estos utilizando 16bits para lectura-escritura. 0x0200–0x09FF Hasta 2048 bytes de Memoria RAM. 0x0C00–0x0FFF 1024 bytes de bootstrap loader ROM (para las versiones que incluyen flash ROM). 0x1000-0x1100 256 bytes de data flash ROM (para las versiones que incluyen flash ROM). 0x1100–0x38FF Extensión de RAM para modelos de más de 2048bytes de RAM. (0x1100–0x18FF es una copia de 0x0200–0x09FF) 0x1100–0xFFFF Hasta 60kilobytes de ROM de programa. el inicio de modelos con ROM más pequeña comienzan en direcciones superiores. Los últimos 16 o 32bytes son para el vector de interrupción.
Algunos modelos incluyen más the 2048bytes de RAM; en ese caso la RAM comienza en 0x1100 los primeros 2048bytes (0x1100–0x18FF) son llevados al intervalo 0x0200–0x09FF para cuestiones de compatibilidad. además, algunos modelos recientes unen las reglas para periféricos de 8 y 16bits, permitiendo el uso de periféricos de 16-bit en el rango de direcciones de periféricos de 8bits.
Existe una nueva versión extendida de esta arquitectura (llamada MSP430X) que permite el uso de un espacio de direcciones de 20 bit. Esto permite iniciar la ROM en la dirección 0x10000.
Familias del MSP430 Existen cuatro familias principales del procesador MSP430. En orden de desarrollo, fueron: La familia '3xx, la familia '1xx, la familia '4xx, y la familia '2xx. Los dígitos después de la letra de familia, identifican el modelo (generalmente un número mayor representa un modelo más potente), el tercer dígito indica la cantidad de memoria integrada, y el cuarto (si es que existe), identifica una variante mínima del modelo.
MSP430x1xx Es la familia básica sin pantalla LCD integrada. Son normalmente más pequeños que el de la familia '3xx.
MSP430F2xx Es similar a la familia '1xx, pero opera con aún menor consumo, soporta velocidades de operación de hasta 16MHz (las otras familias están limitadas a 8MHz), y son más precisas (± 2%) en la sincronía del reloj, lo que los hace más fáciles de operar sin un cristal externo.
MSP430x3xx Es la familia más antigua de esta serie de microcontroladores. Fue diseñada para instrumentos portátiles con pantalla LCD integrada. Incluye un oscilador (frequency-locked loop) que puede sincronizarlo automáticamente con cristales de baja velocidad (32kHz). Esta familia no soporta memorias EEPROM, solamente ROM y EPROM. Familias posteriores proveyeron solamente soporte flash y ROM.
MSP430x4xx Esta familia es muy similar a la '3xx, también incluye un controlador LCD, pero es mejor y más capaz, y viene en versiones de máscara o flash ROM.
Periféricos
Los periféricos del MSP430 generalmente son fáciles de utilizar, con direcciones compatibles para la mayoría de los modelos, y no únicamente con registros de solo escritura. Se detalla algunos periféricos como son los puertos, pero incluye otros como ADC, timer, memorias, etc. Pueden encontrar más detalles de los periféricos en TI_MSP430.
Puertos de entrada-salida (E/S) de propósito general
Tal y como suele ser habitual en microcontroladores, las mayoría de los pines pueden tener varias posibles funcionalidades, asignándose a funciones de periféricos o a pines de entrada/salida ('E/S') de propósito general. Estos pines de entrada/salida se agrupan en grupos de 8denominados puertos, que se controlan como un bloque que se puede configurar mediante un conjunto de registros de 8bits.
La familia MSP430 define hasta 11puertos E/S aunque no todos los modelos cuentan con todos ellos. Los siguientes son algunos de los registros de los pines (distinto a periférico).
PxIN Puerto x de entrada. Este es un registro de solo lectura, y refleja el estado actual del pin. PxOUT Puerto x de salida. Los valores escritos en este registro de lectura/escritura son extraídos a los pines correspondientes cuando están configurados como salida.