Este artículo incluye contenido que está escrito como un anuncio . ( Enero de 2017 ) |
Diseñador | Instrumentos Texas |
---|---|
Bits | 16 bits |
Escribe | Memoria-memoria |
Endianidad | pequeño endian |
Extensiones | MSP430X |
Registros | |
16, R0 - Contador de programa, R1 - Puntero de pila, R2 - Registro de estado, R2 / R3 - Generador de constantes |
El MSP430 es una familia de microcontroladores de señal mixta de Texas Instruments , presentada por primera vez el 14 de febrero de 1992. [1] Construido alrededor de una CPU de 16 bits , el MSP430 está diseñado para aplicaciones integradas de bajo costo y, específicamente, bajo consumo de energía [2] .
El MSP430 se puede utilizar para dispositivos integrados de baja potencia . La corriente consumida en modo inactivo puede ser inferior a 1 µA. La velocidad máxima de la CPU es de 25 MHz. Puede estrangularse para reducir el consumo de energía. El MSP430 también usa seis modos diferentes de bajo consumo, que pueden deshabilitar relojes y CPU innecesarios. Además, el MSP430 es capaz de despertarse por debajo de 1 microsegundo, lo que permite que el microcontrolador permanezca en modo de suspensión por más tiempo, minimizando su consumo de corriente promedio. El dispositivo viene en una variedad de configuraciones con los periféricos habituales: oscilador interno , temporizador que incluye PWM , perro guardián , USART , SPI , I²C, ADC de 10/12/14/16/24 bits y circuitos de reinicio de caída de voltaje . Algunas opciones de periféricos menos habituales incluyen comparadores (que se pueden usar con los temporizadores para hacer ADC simple), amplificadores operacionales en chip para acondicionamiento de señal , DAC de 12 bits , controlador LCD , multiplicador de hardware , USB y DMA para resultados de ADC. Aparte de algunas versiones anteriores de EPROM (MSP430E3xx) y ROM de máscara de alto volumen (MSP430Cxxx), todos los dispositivos son programables en el sistema a través de JTAG (cuatro cables completos oSpy-Bi-Wire ), un cargador de arranque (BSL) integrado que utiliza UART como RS232 o USB en dispositivos con soporte USB. (No se incluye BSL en los dispositivos de la familia F20xx, G2xx0, G2xx1, G2xx2 e I20xx).
Sin embargo, existen limitaciones que excluyen su uso en sistemas embebidos más complejos. El MSP430 no tiene un bus de memoria externo , por lo que está limitado a la memoria en chip (hasta 512 KB de memoria flash y 66 KB de RAM ) que puede ser demasiado pequeña para aplicaciones que requieren grandes búferes o tablas de datos. Además, aunque tiene un controlador DMA, es muy difícil usarlo para mover datos fuera del chip debido a la falta de una luz estroboscópica de salida DMA. [3]
Hay seis generaciones generales de procesadores MSP430. En orden de desarrollo, son la generación '3xx, la generación' 1xx, la generación '4xx, la generación' 2xx, la generación '5xx y la generación' 6xx. El dígito después de la generación identifica el modelo (generalmente los números de modelo más altos son más grandes y más capaces), el tercer dígito identifica la cantidad de memoria a bordo y el cuarto, si está presente, identifica una variante menor del modelo. La variación más común es un convertidor de analógico a digital en chip diferente .
Las generaciones 3xx y 1xx están limitadas a un espacio de direcciones de 16 bits. En las generaciones posteriores, esto se amplió para incluir instrucciones '430X' que permiten un espacio de direcciones de 20 bits. Como sucedió con otras arquitecturas de procesador (por ejemplo, el procesador del PDP-11 ), extender el rango de direccionamiento más allá del tamaño de palabra de 16 bits introdujo algunas peculiaridades e ineficiencias para programas mayores de 64 kBytes.
En la siguiente lista, es útil pensar en la capacidad típica de 200 mA · Hr de una celda de botón de litio CR2032 como 200.000 μA · Hr, o 22,8 μA · año. Por lo tanto, considerando solo el consumo de CPU, dicha batería podría suministrar un consumo de corriente de 0,7 μA durante 32 años. (En realidad, la autodescarga de la batería reduciría este número).
La importancia de la 'retención de RAM' frente al 'modo de reloj de tiempo real' es que en el modo de reloj de tiempo real la CPU puede ir a dormir con un reloj en funcionamiento que lo despertará en un momento futuro específico. En el modo de retención de RAM, se requiere alguna señal externa para activarlo, por ejemplo, señal de pin de E / S o interrupción de recepción de esclavo SPI.
La serie MSP430x1xx es la generación básica sin un controlador LCD integrado. Por lo general, son más pequeños que la generación '3xx'. Estas MCU de potencia ultrabaja basadas en flash o ROM ofrecen 8 MIPS, funcionamiento de 1,8 a 3,6 V, flash de hasta 60 KB y una amplia gama de periféricos analógicos y digitales.
La serie MSP430F2xx es similar a la generación '1xx, pero funciona a una potencia aún menor, admite un funcionamiento de hasta 16 MHz y tiene un reloj en chip más preciso (± 2%) que facilita el funcionamiento sin un cristal externo. Estos dispositivos de potencia ultrabaja basados en flash ofrecen un funcionamiento de 1,8 a 3,6 V. Incluye el oscilador de muy baja potencia (VLO), resistencias internas pull-up / pull-down y opciones de recuento de pines bajo.
La serie Value MSP430G2xx cuenta con MCU de potencia ultrabaja basados en flash de hasta 16 MIPS con funcionamiento de 1,8 a 3,6 V. Incluye el oscilador de muy baja potencia (VLO), resistencias internas pull-up / pull-down y opciones de recuento de pines bajo, a precios más bajos que la serie MSP430F2xx.
La serie MSP430x3xx es la generación más antigua, diseñada para instrumentación portátil con un controlador LCD integrado. Esto también incluye un oscilador de bucle con bloqueo de frecuencia que se puede sincronizar automáticamente con un cristal de baja velocidad (32 kHz). Esta generación no admite memoria EEPROM , solo ROM de máscara y EPROM programable de una sola vez y borrable UV . Las generaciones posteriores solo proporcionan opciones de memoria flash y ROM de máscara . Estos dispositivos ofrecen un funcionamiento de 2,5 a 5,5 V, hasta 32 KB de ROM.
La serie MSP430x4xx es similar a la generación '3xx, pero incluye un controlador LCD integrado y es más grande y más capaz. Estos dispositivos basados en flash o ROM ofrecen un funcionamiento de 8 a 16 MIPS a 1,8 a 3,6 V, con FLL y SVS. Ideal para aplicaciones médicas y de medición de baja potencia.
La serie MSP430x5xx puede funcionar hasta 25 MHz, tener hasta 512 KB de memoria flash y hasta 66 KB de RAM. Esta familia basada en flash presenta un bajo consumo de energía activa con hasta 25 MIPS a una operación de 1.8–3.6 V (165 uA / MIPS). Incluye un módulo de administración de energía innovador para un consumo de energía óptimo y USB integrado. [4]
La serie MSP430x6xx puede funcionar hasta 25 MHz, tener hasta 512 KB de memoria flash y hasta 66 KB de RAM. Esta familia basada en flash presenta un bajo consumo de energía activa con hasta 25 MIPS a una operación de 1.8–3.6 V (165 uA / MIPS). Incluye un módulo de administración de energía innovador para un consumo de energía óptimo y USB integrado.
La serie RF SoC (CC430) proporciona una estrecha integración entre el núcleo del microcontrolador, los periféricos, el software y el transceptor de RF. Cuenta con un transceptor de RF de <1 GHz, con funcionamiento de 1,8 V a 3,6 V. La programación usando Arduino IDE es posible a través de la API panStamp .
La serie FRAM de Texas Instruments proporciona memoria unificada con particiones dinámicas y velocidades de acceso a la memoria 100 veces más rápidas que flash. FRAM también es capaz de retención de estado de energía cero en todos los modos de energía, lo que significa que las escrituras están garantizadas, incluso en el caso de una pérdida de energía. Con una resistencia de escritura de más de 100 billones de ciclos, EEPROM ya no es necesaria. Consumo de energía activa a menos de 100μA / MHz.
La serie de bajo voltaje incluye las piezas MSP430C09x y MSP430L092. Estas 2 series de microcontroladores de bajo voltaje de 16 bits tienen configuraciones con dos temporizadores de 16 bits, un convertidor de analógico a digital (A / D) de 8 bits, un convertidor de digital a analógico (D / A) de 8 bits, y hasta 11 pines de E / S.
Las familias adicionales dentro de MSP430 incluyen piezas de función fija , automotriz y de temperatura extendida .
Función fija : el microcontrolador MSP430BQ1010 de 16 bits es un dispositivo avanzado de función fija que forma la unidad de control y comunicaciones en el lado del receptor para la transferencia de energía inalámbrica en aplicaciones portátiles. MSP430BQ1010 cumple con la especificación Wireless Power Consortium (WPC). Para obtener más información, consulte Energía sin contacto [ enlace muerto permanente ] .
Automotriz : Los microcontroladores (MCU) automotrices MSP430 de Texas Instruments (TI) son procesadores de señal mixta basados en RISC de 16 bits que cuentan con la certificación AEC-Q100 y son adecuados para aplicaciones automotrices en entornos de hasta 105 ° C de temperatura ambiente. Controladores compatibles con LIN para la MCU MSP430 proporcionados por IHR GmbH.
Temperatura extendida : los dispositivos MSP430 son muy populares en entornos hostiles, como la detección industrial, por su bajo consumo de energía y su innovadora integración analógica. Algunas aplicaciones para entornos hostiles incluyen transporte / automoción, energía renovable, militar / espacial / aviónica, exploración de minerales, industrial y seguridad y protección.
Tenga en cuenta que cuando el tamaño de la memoria flash es superior a 64 K palabras (128 KBytes), las direcciones de instrucción ya no se pueden codificar en solo dos bytes. Este cambio en el tamaño del puntero provoca algunas incompatibilidades con las piezas anteriores.
Los periféricos MSP430 son generalmente fáciles de usar, con direcciones (en su mayoría) consistentes entre modelos y sin registros de solo escritura (excepto por el multiplicador de hardware).
Si no se necesita el periférico, el pin puede usarse para E / S de propósito general. Los pines se dividen en grupos de 8 bits llamados "puertos", cada uno de los cuales está controlado por un número de registros de 8 bits. En algunos casos, los puertos están dispuestos en pares a los que se puede acceder como registros de 16 bits.
La familia MSP430 define 11 puertos de E / S, P0 a P10, aunque ningún chip implementa más de 10 de ellos. P0 solo se implementa en la familia '3xx. P7 a P10 solo se implementan en los miembros más grandes (y versiones de mayor número de pines) de las familias '4xx y' 2xx. Las familias '5xx y' 6xx más nuevas tienen P1 a P11, y los registros de control se reasignan para proporcionar más pares de puertos. Cada puerto está controlado por los siguientes registros. Los puertos que no implementan características particulares (como interrupción en el cambio de estado) no implementan los registros correspondientes.
Los puertos 0–2 pueden producir interrupciones cuando cambian las entradas. Los registros adicionales configuran esta capacidad:
Algunos pines tienen propósitos especiales como entradas o salidas. (Por ejemplo, los pines del temporizador se pueden configurar como entradas de captura o salidas PWM). En este caso, el bit P x DIR controla cuál de las dos funciones realiza el pin cuando se establece el bit P x SEL. Si solo hay una función especial, generalmente se ignora P x DIR. El registro P x IN aún se puede leer si el bit P x SEL está establecido, pero la generación de interrupciones está deshabilitada. Si P x SEL está limpio, la entrada de la función especial se congela y se desconecta del pin externo. Además, configurar un pin para salida de propósito general no deshabilita la generación de interrupciones.
|
|
Dirección | Nombre | Función |
---|---|---|
0x130 | MPY | Operand1 para multiplicar sin firmar |
0x132 | MPYS | Operand1 para multiplicar con signo |
0x134 | MAC | Operand1 para acumulación múltiple sin firmar |
0x136 | MACS | Operand1 para multiplicar-acumular con signo |
0x138 | OP2 | Segundo operando para operación de multiplicación |
0x13A | ResLo | Resultado bajo de palabra de multiplicación |
0x13C | ResHi | Resultado de multiplicación de palabra alta |
0x13E | SumExt | Realizar multiplicar-acumular |
ResLo
y ResHi
también deben inicializarse.OP2
registro, se realiza una multiplicación y el resultado se almacena o se agrega a los registros de resultados. El SumExt
registro es un registro de solo lectura que contiene la realización de la suma (0 o 1) en caso de una multiplicación sin signo), o la extensión de signo de la suma de 32 bits (0 o -1) en caso de una multiplicar. En el caso de una multiplicación-acumulación con signo, el SumExt
valor debe combinarse con el bit más significativo del SumHi
contenido anterior para determinar el resultado real de ejecución (-1, 0 o +1).Texas Instruments proporciona varias placas de experimentación de hardware que admiten chips MSP430 grandes (aproximadamente dos centímetros cuadrados) y pequeños (aproximadamente un milímetro cuadrado). TI también proporciona herramientas de desarrollo de software, tanto directamente como en conjunto con socios (consulte la lista completa de compiladores, ensambladores e IDE ). Una de esas herramientas es el compilador IAR C / C ++ y el entorno de desarrollo integrado , o IDE. Se puede descargar una edición Kickstart de forma gratuita desde TI o IAR; está limitado a 8 KB de código C / C ++ en el compilador y el depurador ( se pueden desarrollar y depurar programas en lenguaje ensamblador de cualquier tamaño con esta cadena de herramientas gratuita).
TI también combina una versión de su propio compilador y herramientas con su IDE Code Composer Studio ("CCS") basado en Eclipse . Vende versiones con todas las funciones y ofrece una versión gratuita para descargar que tiene un límite de tamaño de código de 16 KB. CCS admite emuladores en circuito e incluye un simulador y otras herramientas; también puede funcionar con otros procesadores vendidos por TI.
Para aquellos que se sienten más cómodos con Arduino , también hay otro software Energia Energia , una plataforma de creación de prototipos de electrónica de código abierto con el objetivo de llevar el marco de cableado y Arduino al LaunchPad basado en Texas Instruments MSP430, donde el código Arduino se puede exportar para programar MSP430. papas fritas. La última versión de Energia es compatible con MSP-EXP430G2xxx, MSP-EXP430FR5739, MSP-EXP430FR5969, MSP-EXP430FR5994, MSP-EXP430F5529LP, Stellaris EK-LM4F120XL, Tiva-C EK-TM4C4C123GXL, CC-C123GXL. [6]
La comunidad de código abierto produce un conjunto de herramientas de desarrollo de software de libre acceso basado en el conjunto de herramientas GNU . El compilador GNU está actualmente rechazado en tres versiones:
( MSPGCC )
( Uniarca MSPGCC )
TI consultó con RedHat para proporcionar soporte oficial para la arquitectura MSP430 al compilador GNU Compiler Collection C / C ++. Este compilador msp430-elf-gcc es compatible con Code Composer Studio versión 6.0 y superior de TI.
Existe un proyecto llvm-msp430 muy temprano , que eventualmente puede proporcionar un mejor soporte para MSP430 en LLVM .
Se encuentran disponibles otros conjuntos de herramientas de desarrollo comercial, que incluyen editor, compilador, enlazador, ensamblador, depurador y, en algunos casos, asistentes de código. VisSim , un lenguaje de diagrama de bloques para el desarrollo basado en modelos, genera un código C de punto fijo eficiente directamente desde el diagrama. [7] El código generado por VisSim para un control PID basado en ADC + PWM de bucle cerrado en el F2013 se compila en menos de 1 KB de memoria flash y 100 bytes de RAM. [8] VisSim tiene bloques periféricos en chip para toda la familia MSP430 I²C, ADC, SD16, PWM.
El MSP430F2013 y sus hermanos se distinguen por el hecho de que (excepto por el MSP430G2 Value Line ) es la única pieza del MSP430 que está disponible en un paquete dual en línea (DIP). Otras variantes de esta familia solo están disponibles en varios paquetes de montaje en superficie. TI se ha tomado algunas molestias para respaldar la plataforma de desarrollo eZ430 al hacer que los chips en bruto sean fáciles de usar para los aficionados en los prototipos.
TI ha abordado el problema del bajo presupuesto ofreciendo una placa de experimentación muy pequeña, la eZ430-F2013 , en una memoria USB. Esto facilita a los diseñadores la elección del chip MSP430 para plataformas de desarrollo económicas que se pueden utilizar con una computadora. El eZ430-F2013 contiene un microcontrolador MSP430F2013 en una placa de prototipos desmontable y un CD adjunto con el software de desarrollo. Es útil [ cita requerida ] para escuelas, aficionados e inventores de garaje. También es bienvenido [ cita requerida ] por ingenieros de grandes empresas que crean prototipos de proyectos con problemas de presupuesto de capital.
Texas Instruments lanzó el MSP430 LaunchPad en julio de 2010. El MSP430 LaunchPad tiene un emulador flash integrado , USB , 2 LED programables y 1 botón pulsador programable. [9] Como complemento a la experimentación con el LaunchPad, se encuentra disponible una placa protectora .
Desde entonces, TI ha proporcionado varios LaunchPads nuevos basados en la plataforma MSP430:
Los tres LaunchPads incluyen un depurador eZ-FET JTAG con canal de retorno UART capaz de velocidades de 1 Mbit / s. Los FRAM LaunchPads (por ejemplo, MSP-EXP430FR5969, MSP-EXP430FR4133) incluyen EnergyTrace, una función compatible con Code Composer Studio IDE de TI para monitorear y analizar el consumo de energía.
Al igual que otros proveedores de microcontroladores, TI ha desarrollado una interfaz de depuración de dos cables que se encuentra en algunas de sus partes MSP430 y que puede reemplazar la interfaz JTAG más grande. La herramienta de desarrollo eZ430 contiene una herramienta de emulación flash completa conectada por USB ("FET") para este nuevo protocolo de dos cables, denominado " Spy-Bi-Wire " de TI. Spy-Bi-Wire se introdujo inicialmente solo en los dispositivos más pequeños de la familia 'F2xx con un número limitado de pines de E / S, como MSP430F20xx, MSP430F21x2 y MSP430F22x2. El soporte para Spy-Bi-Wire se ha ampliado con la introducción de la última familia '5xx, donde todos los dispositivos son compatibles con la interfaz Spy-Bi-Wire además de JTAG.
La ventaja del protocolo Spy-Bi-Wire es que utiliza solo dos líneas de comunicación, una de las cuales es la línea _RESET dedicada. La interfaz JTAG en las partes del MSP430 de menor cantidad de pines está multiplexada con líneas de E / S de uso general. Esto hace que sea relativamente difícil depurar circuitos construidos alrededor de chips pequeños de bajo presupuesto de E / S, ya que el hardware JTAG completo de 4 pines entrará en conflicto con cualquier otra cosa conectada a esas líneas de E / S. Este problema se alivia con los chips compatibles con Spy-Bi-Wire, que siguen siendo compatibles con la interfaz JTAG normal para la compatibilidad con las antiguas herramientas de desarrollo.
Las herramientas de depuración y programación flash de JTAG basadas en OpenOCD y ampliamente utilizadas en la comunidad ARM no están disponibles para el MSP430. Las herramientas de programación especialmente diseñadas para MSP430 son ligeramente menos costosas que las interfaces JTAG que usan OpenOCD. Sin embargo, si un proyecto descubre a mitad de camino que se necesitan más MIPS, más memoria y más periféricos de E / S, esas herramientas no se transferirán a un procesador de otro proveedor.
La CPU MSP430 utiliza una arquitectura von Neumann , con un solo espacio de direcciones para instrucciones y datos. La memoria se direcciona por bytes y los pares de bytes se combinan en little-endian para formar palabras de 16 bits .
El procesador contiene 16 registros de 16 bits, [10] de los cuales cuatro están dedicados a propósitos especiales: R0 es el contador del programa , R1 es el puntero de la pila , R2 es el registro de estado y R3 es un "generador constante" que se lee como cero e ignora las escrituras. Las codificaciones de modo de dirección adicionales que utilizan R3 y R2 permiten un total de seis valores constantes de uso común (0, 1, 2, 4, 8 y -1) sin requerir una palabra de operando inmediata. R4 a R15 están disponibles para uso general.
El conjunto de instrucciones es muy simple; hay 27 instrucciones en tres familias. La mayoría de las instrucciones están disponibles en versiones con sufijo .B (bytes de 8 bits) y .W (palabra de 16 bits), según el valor de un bit B / W: el bit se establece en 1 para 8 bits y 0 para 16 -poco. Un sufijo faltante es equivalente a .W. Las operaciones de bytes a la memoria afectan solo al byte direccionado, mientras que las operaciones de bytes a los registros borran el byte más significativo.
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Instrucción |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 1 | 0 | 0 | código de operación | B / N | Como | Registrarse | Aritmética de un solo operando | ||||||
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | B / N | Como | Registrarse | RRC Girar a la derecha (1 bit) mediante acarreo | ||||
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | Como | Registrarse | Bytes de intercambio SWPB | ||||
0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | B / N | Como | Registrarse | RRA Girar a la derecha (1 bit) aritmética | ||||
0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | Como | Registrarse | Signo SXT extender byte a palabra | ||||
0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | B / N | Como | Registrarse | PUSH Empuje el valor en la pila | ||||
0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | Como | Registrarse | CALL Llamada a subrutina; presione PC y mueva la fuente a la PC | ||||
0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | RETI Retorno de la interrupción; pop SR y luego pop PC |
0 | 0 | 1 | condición | Desplazamiento con signo de 10 bits | Salto condicional; PC = PC + 2 × desplazamiento | |||||||||||
0 | 0 | 1 | 0 | 0 | 0 | Desplazamiento con signo de 10 bits | JNE / JNZ Saltar si no es igual / cero | |||||||||
0 | 0 | 1 | 0 | 0 | 1 | Desplazamiento con signo de 10 bits | JEQ / JZ Saltar si es igual / cero | |||||||||
0 | 0 | 1 | 0 | 1 | 0 | Desplazamiento con signo de 10 bits | JNC / JLO Saltar si no hay acarreo / bajar | |||||||||
0 | 0 | 1 | 0 | 1 | 1 | Desplazamiento con signo de 10 bits | JC / JHS Saltar si lleva / más alto o igual | |||||||||
0 | 0 | 1 | 1 | 0 | 0 | Desplazamiento con signo de 10 bits | JN Saltar si es negativo | |||||||||
0 | 0 | 1 | 1 | 0 | 1 | Desplazamiento con signo de 10 bits | JGE Jump si es mayor o igual | |||||||||
0 | 0 | 1 | 1 | 1 | 0 | Desplazamiento con signo de 10 bits | JL Jump si es menos | |||||||||
0 | 0 | 1 | 1 | 1 | 1 | Desplazamiento con signo de 10 bits | JMP Jump (incondicionalmente) | |||||||||
código de operación | fuente | Anuncio | B / N | Como | destino | Aritmética de dos operandos | ||||||||||
0 | 1 | 0 | 0 | fuente | Anuncio | B / N | Como | destino | MOV Mover origen a destino | |||||||
0 | 1 | 0 | 1 | fuente | Anuncio | B / N | Como | destino | AÑADIR Añadir origen al destino | |||||||
0 | 1 | 1 | 0 | fuente | Anuncio | B / N | Como | destino | ADDC Agregar origen y llevar al destino | |||||||
0 | 1 | 1 | 1 | fuente | Anuncio | B / N | Como | destino | SUBC Restar origen del destino (con acarreo) | |||||||
1 | 0 | 0 | 0 | fuente | Anuncio | B / N | Como | destino | SUB Restar origen del destino | |||||||
1 | 0 | 0 | 1 | fuente | Anuncio | B / N | Como | destino | CMP Comparar (pretender restar) origen del destino | |||||||
1 | 0 | 1 | 0 | fuente | Anuncio | B / N | Como | destino | DADD Decimal agregar origen al destino (con acarreo) | |||||||
1 | 0 | 1 | 1 | fuente | Anuncio | B / N | Como | destino | BIT Bits de prueba de origen Y destino | |||||||
1 | 1 | 0 | 0 | fuente | Anuncio | B / N | Como | destino | Bit BIC borrado (dest & = ~ src) | |||||||
1 | 1 | 0 | 1 | fuente | Anuncio | B / N | Como | destino | Conjunto de bits BIS (lógico OR) | |||||||
1 | 1 | 1 | 0 | fuente | Anuncio | B / N | Como | destino | XOR Exclusivo o origen con destino | |||||||
1 | 1 | 1 | 1 | fuente | Anuncio | B / N | Como | destino | AND Origen AND lógico con destino (dest & = src) |
Las instrucciones son de 16 bits, seguidas de hasta dos palabras de extensión de 16 bits. Los modos de direccionamiento se especifican mediante el campo As de 2 bits y el campo Anuncio de 1 bit. Algunas versiones especiales se pueden construir usando R0, y los modos distintos al registro directo usando R2 (el registro de estado) y R3 (el generador constante) se interpretan especialmente. El anuncio solo puede usar un subconjunto de los modos de direccionamiento para As.
Los modos de direccionamiento indexado agregan una palabra de extensión de 16 bits a la instrucción. Si tanto la fuente como el destino están indexados, la palabra de extensión de la fuente es lo primero. x se refiere a la siguiente palabra de extensión en el flujo de instrucciones en la tabla siguiente.
Como | Anuncio | Registrarse | Sintaxis | Descripción |
---|---|---|---|---|
00 | 0 | norte | R n | Regístrese directamente. El operando es el contenido de R n . |
01 | 1 | norte | x (R n ) | Indexado. El operando está en la memoria en la dirección R n + x . |
10 | - | norte | @R n | Registro indirecto. El operando está en la memoria en la dirección contenida en R n . |
11 | - | norte | @R n + | Autoincremento indirecto. Como se indicó anteriormente, el registro se incrementa en 1 o 2. |
Modos de direccionamiento mediante R0 (PC) | ||||
01 | 1 | 0 (PC) | DIRECCIÓN | Simbólico. Equivalente ax (PC). El operando está en la memoria en la dirección PC + x . |
11 | - | 0 (PC) | # x | Inmediato. Equivalente a @ PC +. El operando es la siguiente palabra en el flujo de instrucciones. |
Modos de direccionamiento usando R2 (SR) y R3 (CG), decodificación de casos especiales | ||||
01 | 1 | 2 (SR) | & ADDR | Absoluto. El operando está en la memoria en la dirección x . |
10 | - | 2 (SR) | # 4 | Constante. El operando es la constante 4. |
11 | - | 2 (SR) | # 8 | Constante. El operando es la constante 8. |
00 | - | 3 (CG) | # 0 | Constante. El operando es la constante 0. |
01 | - | 3 (CG) | # 1 | Constante. El operando es la constante 1. No hay palabra de índice. |
10 | - | 3 (CG) | # 2 | Constante. El operando es la constante 2. |
11 | - | 3 (CG) | # −1 | Constante. El operando es la constante -1. |
Las instrucciones generalmente toman 1 ciclo por palabra obtenida o almacenada, por lo que los tiempos de instrucción van desde 1 ciclo para una instrucción simple registro-registro hasta 6 ciclos para una instrucción con el origen y el destino indexados.
La extensión MSP430X con direccionamiento de 20 bits agrega instrucciones adicionales que pueden requerir hasta 10 ciclos de reloj. Establecer o borrar un bit periférico requiere dos relojes. Un salto, dado o no, requiere dos relojes. Con la serie 2xx, 2 MCLK es de 125 ns a 16 MHz.
Se permiten movimientos al contador del programa y realizar saltos. El retorno de la subrutina, por ejemplo, se implementa como MOV @ SP +, PC .
Cuando se utilizan R0 (PC) o R1 (SP) con el modo de direccionamiento de aumento automático, siempre se incrementan en dos. Otros registros (R4 a R15) se incrementan por el tamaño del operando, ya sea 1 o 2 bytes.
El registro de estado contiene 4 bits de estado aritméticos, una habilitación de interrupción global y 4 bits que deshabilitan varios relojes para ingresar al modo de bajo consumo. Al manejar una interrupción, el procesador guarda el registro de estado en la pila y borra los bits de bajo consumo. Si el manejador de interrupciones no modifica el registro de estado guardado, al regresar de la interrupción se reanudará el modo original de bajo consumo.
Se implementan varias instrucciones adicionales como alias para los formularios anteriores. Por ejemplo, no hay una instrucción específica de "retorno de subrutina", pero se implementa como "MOV @ SP +, PC". Las instrucciones emuladas son:
Emulado | Real | Descripción |
---|---|---|
ADC . x dst | ADDC. x # 0, dst | Agregar transporte al destino |
BR dst | MOV dst , PC | Sucursal a destino |
CLR . x dst | MOV. x # 0, dst | Destino claro |
CLRC | BIC # 1, SR | Bit de transporte claro |
CLRN | BIC # 4, SR | Pedazo negativo claro |
CLRZ | BIC # 2, SR | Borrar bit cero |
DADC . x dst | DADD. x # 0, dst | Decimal agregar llevar al destino |
DIC . x dst | SUB. x # 1, dst | Decremento |
DECD . x dst | SUB. x # 2, dst | Decremento doble |
FUERZA DE | BIC # 8, SR | Deshabilitar interrupciones |
EINT | BIS # 8, SR | Habilitar interrupciones |
INC . x dst | AGREGAR. x # 1, dst | Incremento |
INCD . x dst | AGREGAR. x # 2, dst | Incremento doble |
INV . x dst | XOR. x # −1, dst | Invertir |
NOP | MOV # 0, R3 | No operacion |
POP dst | MOV @ SP +, dst | Pop de la pila |
RETIRADO | MOV @ SP +, PC | Regreso de subrutina |
RLA . x dst | AGREGAR. x dst , dst | Girar aritmética a la izquierda (desplazar 1 bit a la izquierda) |
RLC . x dst | ADDC. x dst , dst | Girar a la izquierda a través del transporte |
SBC . x dst | SUBC. x # 0, dst | Restar prestado (1-acarreo) del destino |
SETC | BIS # 1, SR | Establecer bit de transporte |
SETN | BIS # 4, SR | Establecer bit negativo |
SETZ | BIS # 2, SR | Establecer bit cero |
TST . x dst | CMP. x # 0, dst | Destino de prueba |
Tenga en cuenta que las constantes inmediatas -1 (0xffff), 0, 1, 2, 4 y 8 se pueden especificar en una instrucción de una sola palabra sin necesidad de un operando inmediato separado.
El MSP430 básico no puede admitir más memoria (ROM + RAM + periféricos) que su espacio de direcciones de 64K. Para admitir esto, una forma extendida del MSP430 utiliza registros de 20 bits y un espacio de direcciones de 20 bits, lo que permite hasta 1 MB de memoria. Utiliza el mismo conjunto de instrucciones que el formulario básico, pero con dos extensiones:
Las instrucciones extendidas incluyen algunas capacidades adicionales, en particular cambios de bits múltiples y operaciones de carga / almacenamiento de múltiples registros.
Las operaciones de 20 bits utilizan el sufijo de longitud "A" (para la dirección) en lugar de .B o .W. .W sigue siendo el predeterminado. En general, las operaciones más cortas borran los bits de orden superior del registro de destino.
Las nuevas instrucciones son las siguientes:
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Segunda palabra | Instrucción |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | fuente | 0 | 0 | código de operación | destino | Movimientos de registro de memoria extendido | ||||||||
0 | 0 | 0 | 0 | src | 0 | 0 | 0 | 0 | dst | - | MOVA @R src , R dst | ||||||
0 | 0 | 0 | 0 | src | 0 | 0 | 0 | 1 | dst | - | MOVA @R src +, R dst | ||||||
0 | 0 | 0 | 0 | addr [19:16] | 0 | 0 | 1 | 0 | dst | addr [15: 0] | MOVA y abs20, R dst | ||||||
0 | 0 | 0 | 0 | src | 0 | 0 | 1 | 1 | dst | x [15: 0] | MOVA x (R src ), R dst | ||||||
0 | 0 | 0 | 0 | n − 1 | op. | 0 | 1 | 0 | WASHINGTON | destino | Desplazamientos de bits (posiciones de 1 a 4 bits) | ||||||
0 | 0 | 0 | 0 | n − 1 | 0 | 0 | 0 | 1 | 0 | WASHINGTON | dst | - | RRCM . x # n , R dst (Girar a la derecha a través del acarreo). | ||||
0 | 0 | 0 | 0 | n − 1 | 0 | 1 | 0 | 1 | 0 | WASHINGTON | dst | - | RRAM . x # n , R dst (Girar aritmética a la derecha, también conocido como desplazamiento con signo a la derecha). | ||||
0 | 0 | 0 | 0 | n − 1 | 1 | 0 | 0 | 1 | 0 | WASHINGTON | dst | - | RLAM . x # n , R dst (Girar aritmética a la izquierda, también conocido como desplazamiento a la izquierda). | ||||
0 | 0 | 0 | 0 | n − 1 | 1 | 1 | 0 | 1 | 0 | WASHINGTON | dst | - | RRUM . x # n , R dst (Girar a la derecha sin firmar, también conocido como desplazamiento lógico a la derecha). | ||||
0 | 0 | 0 | 0 | fuente | 0 | 1 | 1 | op. | destino | Movimientos de memoria de registro extendidos | |||||||
0 | 0 | 0 | 0 | src | 0 | 1 | 1 | 0 | addr [19:16] | addr [15: 0] | MOVA R src y abs20 | ||||||
0 | 0 | 0 | 0 | src | 0 | 1 | 1 | 1 | dst | x [15: 0] | MOVA R src , x (R dst ) | ||||||
0 | 0 | 0 | 0 | fuente | 1 | código de operación | destino | Operaciones de ALU extendidas | |||||||||
0 | 0 | 0 | 0 | imm [19:16] | 1 | 0 | 0 | 0 | dst | imm [15: 0] | MOVA # imm20, R dst | ||||||
0 | 0 | 0 | 0 | imm [19:16] | 1 | 0 | 0 | 1 | dst | imm [15: 0] | CMPA # imm20, R dst | ||||||
0 | 0 | 0 | 0 | imm [19:16] | 1 | 0 | 1 | 0 | dst | imm [15: 0] | ADDA # imm20, R dst | ||||||
0 | 0 | 0 | 0 | imm [19:16] | 1 | 0 | 1 | 1 | dst | imm [15: 0] | SUBA # imm20, R dst | ||||||
0 | 0 | 0 | 0 | src | 1 | 1 | 0 | 0 | dst | - | MOVA R src , R dst | ||||||
0 | 0 | 0 | 0 | src | 1 | 1 | 0 | 1 | dst | - | CMPA R src , R dst | ||||||
0 | 0 | 0 | 0 | src | 1 | 1 | 1 | 0 | dst | - | ADDA R src , R dst | ||||||
0 | 0 | 0 | 0 | src | 1 | 1 | 1 | 1 | dst | - | SUBA R src , R dst | ||||||
0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | op. | modo | varía | CALLA | ||||||
0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | RETI (igual que MSP430) |
0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | Como | Registrarse | Fuente CALLA | |||||
0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | abs [19:16] | abs [15: 0] | CALLA y abs20 | |||
0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | x [19:16] | x [15: 0] | CALLA x (PC) | |||
0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | - | - | (reservado) | |||
0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | imm [19:16] | imm [15: 0] | CALLA # imm20 | |||
0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | - | - | (reservado) | |||||
0 | 0 | 0 | 1 | 0 | 1 | dir | WASHINGTON | n − 1 | Registrarse | Push / pop n registros que terminan con especificado | |||||||
0 | 0 | 0 | 1 | 0 | 1 | 0 | WASHINGTON | n − 1 | src | - | PUSHM . x # n , R src Pulse R src , R ( src −1), ... R ( src - n +1) | ||||||
0 | 0 | 0 | 1 | 0 | 1 | 1 | WASHINGTON | n − 1 | dst − n + 1 | - | POPM . x # n , R dst Pop R ( dst - n +1), R ( dst - n +2), ... R dst |
Todas las demás instrucciones pueden tener una palabra de prefijo agregada que las amplíe a 20 bits. La palabra de prefijo contiene un bit de tamaño de operando adicional, que se combina con el bit B / W existente para especificar el tamaño del operando. Hay una combinación de tamaño sin usar; hay indicios de que esto podría usarse en el futuro para un tamaño de operando de 32 bits. [11]
La palabra de prefijo viene en dos formatos, y la elección entre ellos depende de la instrucción que sigue. Si la instrucción tiene operandos que no son de registro, entonces se usa la forma simple, que proporciona 2 campos de 4 bits para extender cualquier desplazamiento o constante inmediata en el flujo de instrucciones a 20 bits.
Si la instrucción es de registro a registro, se utiliza una palabra de extensión diferente. Esto incluye una bandera "ZC" que suprime el acarreo (útil para instrucciones como DADD que siempre usan el bit de acarreo) y un recuento de repetición. Un campo de 4 bits en la palabra de extensión codifica un recuento de repeticiones (de 0 a 15 repeticiones además de la ejecución inicial) o un número de registro que contiene un recuento de repeticiones de 4 bits.
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Instrucción |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 1 | 1 | - | ALABAMA | 0 | 0 | - | Palabra de extensión | ||||||
0 | 0 | 0 | 1 | 1 | src [19:16] | ALABAMA | 0 | 0 | dst [19:16] | Extensión del operando de memoria | ||||||
0 | 0 | 0 | 1 | 1 | 0 | 0 | ZC | 0 | ALABAMA | 0 | 0 | n − 1 | Registrar extensión de operando (recuento de repetición inmediata) | |||
0 | 0 | 0 | 1 | 1 | 0 | 0 | ZC | 1 | ALABAMA | 0 | 0 | Rn | Registrar extensión de operando (registrar recuento de repetición) |
El diseño general del espacio de direcciones del MSP430 es:
Algunos modelos incluyen más de 2048 bytes de RAM; en ese caso, la RAM comienza en 0x1100. Los primeros 2048 bytes (0x1100–0x18FF) se reflejan en 0x0200–0x09FF para compatibilidad. Además, algunos modelos recientes modifican las reglas de los periféricos de 8 y 16 bits, lo que permite el acceso de 16 bits a los periféricos en el rango de direcciones de periféricos de 8 bits.
Existe una nueva versión extendida de la arquitectura (llamada MSP430X) que permite un espacio de direcciones de 20 bits . Permite ROM de programa adicional a partir de 0x10000.
La serie '5xx tiene un espacio de direcciones muy rediseñado, con el primer 4K dedicado a periféricos y hasta 16K de RAM.
Nombre | Fabricante | Interfaz | Protocolo (s) | Estado |
---|---|---|---|---|
MSP-FET430PIF | TI | Puerto paralelo | JTAG | |
MSP-FET430UIF | TI | Interfaz USB | JTAG, Spy-Bi-Wire | |
MSP-FET | TI | Interfaz USB | JTAG, Spy-Bi-Wire | |
LaunchPad MSP-430 | TI | Interfaz USB | Espía-Bi-Wire | |
MSP-430 LaunchPad eZ-FET | TI | Interfaz USB | Espía-Bi-Wire | |
eZ430-F2013 | TI | Interfaz USB | Espía-Bi-Wire | |
eZ430-RF2500 | TI | Interfaz USB | Espía-Bi-Wire | |
FETP | SoftBaugh | Puerto paralelo | JTAG | |
USBP | SoftBaugh | Interfaz USB | JTAG, Spy-Bi-Wire | interrumpido |
MSP430-JTAG | Olimex | Puerto paralelo | JTAG | |
MSP430-JTAG-ISO | Olimex | Interfaz USB | JTAG, Spy-Bi-Wire | obsoleto |
MSP430-JTAG-ISO-MK2 | Olimex | Interfaz USB | JTAG, Spy-Bi-Wire | |
MSP430-JTAG-Diminuto | Olimex | Interfaz USB | JTAG, Spy-Bi-Wire | extraviado |
MSP430-JTAG-PEQUEÑO-V2 | Olimex | Interfaz USB | JTAG ?, Spy-Bi-Wire | |
MSP430-JTAG-RF | Olimex | Interfaz USB | JTAG, Spy-Bi-Wire | |
FlashPro-CC | Elprotronic | Interfaz USB | JTAG, Spy-Bi-Wire, BSL | |
VisSim / ECD | Soluciones visuales | Interfaz USB | JTAG, Spy-Bi-Wire | |
LA-3713 | Lauterbach | Interfaz USB / Ethernet | JTAG, Spy-bi-Wire |