

El STM8 es una familia de microcontroladores de 8 bits de STMicroelectronics . Los microcontroladores STM8 utilizan una variante extendida de la arquitectura del microcontrolador ST7 . Los microcontroladores STM8 tienen un costo particularmente bajo para ser un microcontrolador de 8 bits con todas las funciones. [ 1 ]
Arquitectura
El STM8 es muy similar al ST7 anterior, pero es más adecuado como destino para C debido a sus registros de índice de 16 bits y modo de direccionamiento relativo al puntero de pila . Aunque internamente es una arquitectura Harvard, tiene un "puente de memoria" que crea un espacio de direcciones unificado de 24 bits, lo que permite ejecutar código desde la RAM (útil para la programación en sistema de la ROM flash ) y acceder a datos (como tablas de búsqueda ) desde la ROM. Al acceder, el "puente de memoria" detiene la CPU si es necesario para que sea posible el acceso de escritura a la ROM flash como en la RAM. La ejecución de código desde la EEPROM está denegada y crea un evento de reinicio. El acceso aleatorio a datos por encima de 64 KB está limitado a instrucciones especiales de "carga lejana"; los operandos de memoria de la mayoría de las operaciones pueden acceder como máximo a 128 KB (una dirección base de 16 bits más un desplazamiento de 16 bits).
Dependiendo del tipo de dispositivo, la cantidad de RAM oscila entre 1 y 6 KiB, y la cantidad de ROM es de 4 a 8 KiB (baja densidad), de 16 a 32 KiB (densidad media) o de 32 a 96 KiB (alta densidad).
Tiene los mismos seis registros (A, X, Y, SP, PC, CC) que el ST7, pero los registros de índice X e Y se han ampliado a 16 bits, y el contador de programa se ha ampliado a 24 bits. El acumulador A y el puntero de pila siguen siendo de 8 y 16 bits, respectivamente. [ 2 ]
El registro de código de condición tiene dos bits definidos más, para un total de siete. Hay un indicador de desbordamiento y un segundo bit de habilitación de interrupción, lo que permite cuatro niveles de prioridad de interrupción .
Subfamilias
- Automóvil STM8AF
- STM8AL para automóviles de baja potencia
- STM8L de bajo consumo
- STM8S de propósito general
- Sensor táctil STM8T
- Control de iluminación STLUX
- Controladores de modulación por ancho de pulso STNRG
Soporte del compilador
El STM8 es compatible con el compilador C de código abierto Small Device , además de C existe el STM8 eForth de código abierto, [ 3 ] un sistema Forth interactivo para el STM8.
Cambios en comparación con ST7
El conjunto de instrucciones del STM8 es en su mayor parte un superconjunto del del ST7, pero no es completamente compatible a nivel binario.
Las operaciones en los registros X e Y se extienden a 16 bits. Por lo tanto, las operaciones de carga y almacenamiento acceden a dos bytes de memoria en lugar de uno. (Además, el indicador de medio acarreo se ha modificado para reflejar el acarreo del bit 7 al bit 8 del resultado de 16 bits, en lugar del acarreo del bit 3 al 4).
Las interrupciones envían nueve bytes de estado en lugar de cinco, como en el ST7.
La instrucción de multiplicación almacena el producto de 16 bits en el registro de índice especificado (por ejemplo, X), en lugar de dividirlo entre X y A.
Se han eliminado los modos de direccionamiento indirecto que obtienen una dirección de 8 bits de la memoria (códigos de operación 92 2x, 92 3x, 92 Bx, 92 6x, 92 Ex, 91 6x, y ); todos los modos de direccionamiento indirecto obtienen direcciones de 16 bits. Se ha añadido un nuevo byte de prefijo , que se utiliza para codificar el direccionamiento indirecto a partir de una dirección de 16 bits.91 Ex72
Las instrucciones de manipulación de bits se han modificado para aceptar una dirección de 16 bits y requerir el 72byte de prefijo. Los códigos de operación sin prefijo 0xque 1xocupaban anteriormente se utilizan ahora para el direccionamiento relativo al puntero de pila.
Algunas instrucciones de salto poco utilizadas han visto modificados sus códigos de operación para que requieran un 90prefijo, y los códigos de operación sin prefijo se han reasignado a saltos con signo que dependen del indicador V.
Las instrucciones de carga y comparación dirigidas al registro X son de poca utilidad en el ST7, cuyos modos de direccionamiento están indexados por dicho registro. En el STM8, cuando estas operaciones especifican un operando de memoria indexado por el registro X, el operando de registro se cambia a Y. Con un 90prefijo, los registros se invierten, de modo que el registro de índice es Y y el registro de operando es X.
Una diferencia importante en el rendimiento es que el STM8 obtiene 32 bits de la ROM por ciclo, y muchas instrucciones tardan un ciclo en ejecutarse. Dependiendo de la longitud de la instrucción y del número de ciclos necesarios, la ejecución desde la RAM es algo más lenta. El ST7, en cambio, obtiene 8 bits por ciclo y tarda un ciclo por byte de instrucción.
Conjunto de instrucciones
La mayoría de los bytes de código de operación del STM8 constan de 1 bit de tipo (uno o dos operandos), tres bits de modo de direccionamiento y cuatro bits de código de operación. Solo se asignan 6 modos de direccionamiento y 12 códigos de operación de un operando, dejando espacio de codificación donde se colocan otras instrucciones.
Las instrucciones STM8 constan de un byte de prefijo opcional ( , , , o ), un byte de código de operación y algunos (hasta cuatro, pero rara vez más de dos) bytes de operandos. Los bytes de prefijo modifican principalmente el modo de direccionamiento utilizado para especificar el operando de memoria, pero en algunos casos, los prefijos y cambian completamente el significado del byte de código de operación.72169016911692167290
El prefijo 90intercambia X e Y en la instrucción siguiente. En la tabla a continuación, estas variantes se combinan en una sola línea escribiendo "X/Y", que significa "X" o "Y". El prefijo 90también se usa en dos lugares para introducir nuevos códigos de operación: las instrucciones BCPL y BCCM, y algunas condiciones de salto.
La función Prefix 92convierte las instrucciones con un operando de desplazamiento ( addr16 , X) en direccionamiento indirecto ([ addr8 ], X). El desplazamiento se reemplaza por la dirección de 8 bits de un valor de desplazamiento de 16 bits en memoria. Se utiliza únicamente para esta función.
El prefijo 91tiene ambos efectos anteriores, convirtiendo los modos de direccionamiento ( addr16 , X) a ([ addr8 ], Y).
El prefijo 72se utiliza en varios lugares, con un patrón mucho menos regular. En algunos casos, introduce nuevos modos de direccionamiento (en particular, un modo indirecto de 16 bits ([ addr16 ],X)), pero también introduce muchas operaciones completamente nuevas.
Para las instrucciones CPW y LDW, donde el modo de direccionamiento del operando se indexa mediante X, el STM8 utiliza el registro Y por defecto en lugar de X. Al aplicar un 90prefijo, se intercambian X e Y, de modo que el registro pasa a ser X y el modo de direccionamiento se indexa mediante Y.
Referencias
- ↑ Carlson, Jay (15 de septiembre de 2017). "ST STM8" . Recuperado el 12 de junio de 2018 .
- 1 2 3 "PM0044: Manual de programación de la CPU STM8" (PDF) . STMicroelectronics. Septiembre de 2011. Documento 13590 Rev 3. Recuperado el 10 de junio de 2018 .
- ↑ "STM8 eForth: un lenguaje Forth fácil de usar para microcontroladores sencillos con documentación" . GitHub . 18 de noviembre de 2022.
Enlaces externos
- Sitio web del fabricante en STM8
- Comparación de compiladores C para STM8
- eForth para STM8
- Artículos de Hackaday relacionados con STM8
- Proyectos de Hackaday que utilizan STM8
- Microcontroladores