MSP430 es una familia de microcontroladores fabricados por Texas Instruments. Construido con una CPU de 16 bits, 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.

Tarjeta de desarrollo para programar dispositivos de la serie G2.

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 12 bits, 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

editar
 
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 16 bits.

El procesador contiene 16 registros de 16 bits. 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 6 valores 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 27 instrucciones agrupadas en tres familias. La mayoría de las instrucciones son de 8 bit (byte) y 16 bit (palabra), dependiendo del valor de un bit llamado B/W, este bit es 1 para instrucciones de 8 bits y 0 para las de 16 bits. 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 16 bits, seguidas de hasta dos palabras de extensión de 16 bits. Hay cuatro modos de direccionamiento, especificados por el bit 2 como campo. Algunas versiones especiales pueden ser construidas usando R0, y otros modos a parte 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 16 bits 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) 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 1 ciclo para instrucciones de registro a registro a 6 ciclos 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 2 bytes.

El registro de estado ('SR') contiene cuatro bits de estado aritmético, una activado global de las interrupciones, y 4 bits 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

editar

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 8 bits para lectura-escritura.
0x0100–0x01FF
Periféricos de 16-bit. Se debe acceder a estos utilizando 16 bits 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 2048 bytes de RAM. (0x1100–0x18FF es una copia de 0x0200–0x09FF)
0x1100–0xFFFF
Hasta 60 kilobytes de ROM de programa. el inicio de modelos con ROM más pequeña comienzan en direcciones superiores. Los últimos 16 o 32 bytes son para el vector de interrupción.

Algunos modelos incluyen más the 2048 bytes de RAM; en ese caso la RAM comienza en 0x1100 los primeros 2048 bytes (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 16 bits, permitiendo el uso de periféricos de 16-bit en el rango de direcciones de periféricos de 8 bits.

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

editar

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

editar

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

editar

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 8 denominados puertos, que se controlan como un bloque que se puede configurar mediante un conjunto de registros de 8 bits. La familia MSP430 define hasta 11 puertos 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.
PxDIR
Puerto x de dirección de datos. Los bits escritos con un 1 configuran los pines de salida correspondientes. Los bits escritos con 0 configuran los pines para entradas.
PxSEL
Puerto x de selección de función. Los bits escritos con 1 configuran los pines correspondientes para ser utilizados por el periférico especializado. Los bits escritos con 0 configuran los pines para uso de propósito general de E/S. El puerto 0 (solamente los modelos '3xx) no se multiplexa con otros periféricos y no tienen un registro P0SEL.
PxREN
Puerto x para habilitar resistencia (solamente los modelos '2xx). Los bits en este registro habilitan resistencias en pull-up o pull-down en los correspondientes pines siempre que estén configurados como entradas. El tipo de pull se establece con el bit escrito en el registro PxOUT.
PxIES
Puerto x para seleccionar el flanco de interrupción (puertos 0-2 solamente). Selecciona el flanco que causará el bit PxIFG a ser establecido. Cuando el bit de entrada cambia desde la coincidencia con el estado PxIES hacia cuando cambia (es decir cuando un bit en PxIES XOR PxIN cambia desde 0 a 1), el bit correspondiente PxIFG se establece.
PxIFG
Puerto x de bandera de interrupción (puertos 0-2 solamente). Se establece siempre que el pin correspondiente hace que el estado cambie a pedido de PxIES. Puede borrarse solo por software. (Puede también establecerse por software.)
PxIE
Puerto x de habilitación de interrupción (puertos 0-2 solamente). Cuando este bit y el bit correspondiente PxIFG se establecen, se genera una interrupción.

Algunos pines tiene propósitos especiales cuando están como entradas o salidas. (Por ejemplo, los pines de temporizador pueden configurarse para capturar entradas o salidas PWM.) En este caso, el bit PxDIR controla cual de las dos funciones realiza el pin cuando el bit PxSEL se establece. Si hay una sola función especial, entonces generalmente se ignora a PxDIR.

El registro PxIN siempre puede ser leído si se establece el bit PxSEL, pero la generación de interrupción queda deshabilitada. Sise borra PxSEL, las entradas de funciones especiales se congela y se desconecta del pin externo. También, configurando un pin para salida de propósito general no deshabilita la generación de interrupciones.

Mapa de direcciones de los registros de propósito general de E/S
PxIN  PxOUT PxDIR PxSEL PxIES PxIE  PxIFG PxREN
P0 0x10 0x11 0x12 0x13 0x14 0x15
P1 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27
P2 0x28 0x29 0x2a 0x2b 0x2c 0x2d 0x2e 0x2f
P3 0x18 0x19 0x1a 0x1b 0x10
P4 0x1c 0x1d 0x1e 0x1f 0x11
P5 0x30 0x31 0x32 0x33 0x12
P6 0x34 0x35 0x36 0x37 0x13
P7 0x38 0x3a 0x3c 0x3e
P8 0x39 0x3b 0x3d 0x3f
P9 0x08 0x0a 0x0c 0x0e
P10 0x09 0x0b 0x0d 0x0f

Los puertos P7 y P8 se pueden acceder usando cargas y almacenamientos de 16-bit; cuando se usa de esta forma, la combinación se conoce como PA. De forma similar, P9 y P10 pueden combinarse en 16-bit mediante PB.

Multiplicador por hardware

editar

Algunos modelos de MSP430 incluyen un periférico de multiplicación por hardware mapeados por memoria el cual realiza operaciones de multiplicación-acumulación de 16×16+32→33-bits.

En forma inusual para el MSP430, este periférico incluye un registro implícito de 2-bit de solo lectura, el cual lo hace efectivamente imposible para cambio de contexto.

Los 8 registros usados son:

Dirección Nombre Función
0x130 MPY Operando 1 para multiplicación sin signo
0x132 MPYS Operando 1 para multiplicación con signo
0x134 MAC Operando 1 para multiplicación-acumulación sin signo
0x136 MACS Operando 1 para multiplicación-acumulación con signo
0x138 OP2 Segundo operando para operación de multiplicación
0x13a ResLo Palabra menos significativa para el resultado de la multiplicación
0x13c ResHi Palabra más significativa para el resultado de la multiplicación
0x13e SumExt Transporte de la multiplicación-acumulación


Herramientas de desarrollo

editar

Texas Instruments provee herramientas de desarrollo de software que pueden ser descargadas gratuitamente. El toolchain provisto por TI en la edición Kickstart del compilador C/C++ IAR, el cual está limitado a 4K de código C/C++ en el compilador y depurador (programas en lenguaje ensamblador de cualquier tamaño pueden ser desarrollados y depurados con este toolchain gratuito). TI además provee una versión de Eclipse llamada "Code Composer Essentials", para la cual la versión "Kickstart" puede ser descargada gratuitamente. La comunidad del código abierto produce un software de desarrollo "toolset" gratuitamente disponible (MSPGCC) basado en el GNU toolset, aunque el tamaño de tal código y su rapidez no son tan óptimas como los resultados obtenidos por el compilador comercial.[cita requerida] Además varios "toolset" comerciales de desarrollo, los cuales incluyen editor, compilador, "linker", ensamblador, depurador y en casos singulares asistentes de código, están disponibles. VisSim, un lenguaje de diagrama de bloques para desarrollo basado en modelos, puede generar eficiente código-C de punto fijo directamente desde el diagrama. Para un uso inteligente de funciones "inline interrupt", VisSim genera programas de control muy eficientes que pueden acceder a I2C, ADC, PWM etc, en un control de ciclo y usan menos de 1K flash y 128 bytes RAM.

Plataformas de desarrollo

editar

La familia MSP430 destaca por la disponibilidad de plataformas de desarrollo de bajo coste. TI ha desarrollado dispositivos con formato de llave USB, el eZ430-F2013, que contiene un MSP430F2013 con algunos pines de entrada y salida accesibles y hardware para funcionamiento, un sistema de programación y supervisión del procesador y un CD con software de desarrollo. Esta herramienta es muy útil para estudiantes y aficionados a la electrónica así como profesionales para el inicio de pequeños proyectos o aplicaciones.

Existen plataformas de desarrollo que trabajan en GNU/Linux o en otros sistemas abiertos, pero no existe soporte directo de TI en estos entornos y las herramientas para la programación de los nuevos procesadores tardan en aparecer al depender del trabajo de voluntarios.

Se encuentra la herramienta MSP430G Launchpad, en la cual se pueden trabajar 8 conversores análogo-digitales de 10Bits tipo SAR, viene equipada con dos módulos de comunicación seriales, en donde se incluyen el hardware del SPI, I2C, UART, IrDa, dos módulos timer. Con una memoria flash con capacidad de hasta 16Kb.[1]

Interfaz de depuración

editar

Al igual que otros fabricantes de microcontroladores, TI ha desarrollado una interfaz de depuración con dos hilos que está reemplazando el anterior sistema 'JTAG' usado para esa función. La herramienta 'eZ430 Development Tool' contiene un sistema USB 'Flash Emulation Tool' ("FET") para la programación y simulación de esto microcontroladores usando este nuevo sistema simplificado denominado por TI "Spy-Bi-Wire". En la actualidad solamente se encuentra disponible en los modelos MSP430F20xx, MSP430F22x2 y MSP430F22x2.


Referencias

editar

Enlaces externos

editar
Herramientas de desarrollo