El National Semiconductor COP8 es un microcontrolador de núcleo CISC de 8 bits . El COP8 es una mejora de la anterior familia de microcontroladores de 4 bits COP400 . Las principales características del COP8 son:
- Gran cantidad de pines de E/S
- Hasta 32 KB de memoria Flash / ROM para código y datos.
- EMI muy baja
- Muchos periféricos integrados (diseño de un solo chip)
- Programación en el sistema
- Conjunto de herramientas de ensamblaje gratuito . Compiladores C comerciales disponibles .
- Sistema operativo multitarea gratuito y pila TCP/IP
- Pico de 2 millones de instrucciones por segundo
El COP8 tiene un tiempo de ciclo de instrucción básico de 1/10 de la frecuencia del reloj; un reloj de 10 MHz como máximo dará como resultado una tasa de ejecución de instrucciones de 1 MHz como máximo. ( Algunos periféricos de temporizador utilizan directamente el reloj de 10 MHz). La tasa máxima de ejecución de instrucciones es de 1 ciclo por byte, y la mayoría de las instrucciones de 1 byte se ejecutan en un ciclo de instrucción. Algunas, en particular las instrucciones de salto, tardan uno o dos ciclos más. Algunos modelos incluyen un duplicador de reloj, y aunque siguen aceptando un reloj de entrada de 10 MHz como máximo, lo duplican internamente a un reloj maestro de 20 MHz, lo que da como resultado una tasa de ejecución de instrucciones de 2 MHz. [ 1 ] : 7,32
El chip es un diseño lógico estático que puede tolerar un reloj arbitrariamente lento; [ 1 ] : 10 la mayoría de los modelos incluyen un segundo Oscilador de cristal de cuarzo de 32 768 Hz que puede utilizarse para el reloj de la CPU cuando el reloj de alta velocidad está desactivado para ahorrar energía.
Registros y mapa de memoria
El COP8 utiliza espacios de instrucciones y datos separados ( arquitectura Harvard ). [ 2 ] : 2-1 [ 3 ] : 2-4 El espacio de direcciones de instrucciones es de 15 bits ( máximo 32 KiB), mientras que las direcciones de datos son de 8 bits (máximo 256 bytes, ampliables mediante conmutación de bancos).
Para permitir la detección de errores de software, todas las direcciones de instrucciones no válidas se leen como cero, lo que constituye una instrucción de trampa. La RAM no válida situada por encima de la pila se lee como todos unos, lo que representa una dirección no válida.
La CPU cuenta con un acumulador de 8 bits y un contador de programa de 15 bits . Dieciséis registros adicionales de 8 bits (R0–R15) y una palabra de estado del programa de 8 bits están mapeados en memoria. Existen instrucciones especiales para acceder a ellos, pero también se pueden utilizar instrucciones generales de acceso a la RAM.
El mapa de memoria se divide en la mitad de la RAM y la otra mitad de los registros de control, de la siguiente manera:
Si la RAM no está dividida en bancos, R15 (S) es simplemente otro registro de propósito general. Si la RAM está dividida en bancos, la mitad inferior del espacio de direcciones de datos (direcciones 0x00–7F) se dirige a un banco de RAM seleccionado por S. Los registros de propósito especial en la mitad superior del espacio de direcciones de datos siempre están visibles. Los registros de datos en 0xF x se pueden usar para copiar datos entre bancos.
Los bancos de RAM distintos del banco 0 tienen disponibles los 128 bytes. La pila (a la que se accede mediante el puntero de pila) siempre está en el banco 0, independientemente de cómo esté configurado el registro S.
Transferencias de control
Además de las instrucciones JMPLde 3 bytes JSRLque pueden direccionar todo el espacio de direcciones, las versiones de 2 bytes de estas instrucciones, JMPy JSR, pueden saltar dentro de una página de 4K. La instrucción especifica los 12 bits inferiores, y los 3 bits superiores del PC se conservan. (Estas están destinadas principalmente a modelos con hasta 4K de ROM). Para saltos de corta distancia, hay 63 instrucciones de 1 byte, , JPque realizan saltos relativos al PC desde PC−32 hasta PC+31. Esto es una suma de 15 bits, y no se aplican requisitos de límite de página.
También existen instrucciones de salto indirecto y de carga indirecta del acumulador que utilizan el contenido del acumulador como los 8 bits inferiores de una dirección; los 7 bits superiores del PC actual se conservan.
No existen saltos condicionales propiamente dichos , ni el procesador proporciona los indicadores de estado ZCVN tradicionales , aunque la palabra de estado del programa contiene indicadores de acarreo y medio acarreo para aritmética multibyte. En cambio, existen varias instrucciones de comparación y salto. Por ejemplo, IFEQcompara sus dos operandos y omite la instrucción siguiente si son diferentes. Se puede omitir cualquier instrucción; no se limita a los saltos.
Una extensión interesante de este mecanismo es la RETSKinstrucción de retorno y salto, que permite a cualquier subrutina omitir condicionalmente la instrucción que sigue a la llamada. Esto proporciona una forma muy compacta de devolver un valor booleano desde una subrutina.
Otra característica exclusiva de la arquitectura COP8 es la IFBNEinstrucción. Esta instrucción de un byte compara los 4 bits inferiores del registro B (puntero de memoria) con una constante inmediata de 4 bits, y puede usarse para repetir el proceso hasta que B haya llegado al final de un búfer pequeño (de hasta 16 bytes). También existe una LD B,#imm4instrucción de un byte.
Conjunto de instrucciones
Los operandos de COP8 se enumeran en orden de destino, origen. La mayoría de las instrucciones tienen el acumulador A como uno de los operandos. El otro operando generalmente se elige de un valor inmediato de 8 bits, una dirección de RAM de 8 bits o [B], la dirección de RAM seleccionada por el registro B. Las instrucciones LDy X(intercambio con el acumulador) también admiten el direccionamiento de RAM por el registro X ( [X]) y variantes posteriores de incremento/decremento ( [B+], [B−], [X+], [X−]).
El direccionamiento indirecto a través de B es particularmente rápido y puede realizarse en el mismo ciclo en que se ejecuta la instrucción; incluso X A,[B]es una instrucción de un solo ciclo.
Por otro lado, el direccionamiento absoluto de RAM solo está codificado directamente para cinco instrucciones: , , , , y . Esta última es un prefijo de código de operación de "direccionamiento directo" que puede anteponerse a cualquier instrucción con un operando y cambia el operando a la ubicación de memoria especificada. (Las instrucciones de salto condicional omiten el prefijo y la instrucción siguiente como un par). El uso con las instrucciones , y no está documentado, ya que las instrucciones dedicadas son más eficientes.LD A,addr8X A,addr8IFEQ addr8,#imm8LD addr8,#imm8DIR addr8[B]DIRLD A,[B]X A,[B]LD [B],#imm8
Todas las instrucciones de "movimiento" se llaman LD(carga) incluso si el destino es una dirección de memoria ( ). Curiosamente, no hay instrucciones con el acumulador como fuente; las escrituras deben hacerse con la instrucción que intercambia el acumulador con el operando de memoria, almacenando A y cargando el contenido de memoria anterior. LD addr8,#imm8LDX
Existen instrucciones para obtener datos de tablas en la ROM. Estas combinan los 7 bits superiores del contador de programa (PCU) con el acumulador, obtienen un byte de esa dirección y lo colocan en el acumulador ( LAIDinstrucción) o en los 8 bits inferiores del contador de programa (PCL) ( JIDinstrucción). Dado que la siguiente instrucción ejecutada debe estar en la misma página de ROM de 256 bytes que la tabla, no es posible una tabla de 256 entradas.
- 1 2 3 4 5 6 7 8 9 10 Solo en núcleos de la "familia de características" (COP888/COP8SA); no está presente en núcleos de la "familia básica" (COP800).
- 1 2 Solo en modelos de la "familia flash" (COP8TA/COP8C) con ROM de arranque para programación en el sistema .
- 1 2 3 4 5 6 El operando puede cambiarse
[B]a una dirección absoluta de 8 bits con unDIRprefijo (+2 bytes, +3 ciclos).
Usos notables
- La familia COP8 se emplea en la espoleta de la bomba aérea FMU-139 [ 6 ].
- El COP822 se emplea en la espoleta de artillería M732A2 [ 7 ].
Referencias
- 1 2 3 4 "COP8SBR9/COP8SCR9/COP8SDR9 Microcontrolador basado en memoria flash CMOS de 98 bits con 32k de memoria, EEPROM virtual y protección contra caídas de tensión" (PDF) (hoja de datos). National Semiconductor . Abril de 2002. Consultado el 6 de enero de 2021 .
- 1 2 Manual del usuario de la familia básica COP8 (PDF) . Revisión 002. National Semiconductor . Junio de 1996. Número de documento 620895-002 . Consultado el 2 de enero de 2021 .
- 1 2 Aleaf, Abdul (julio de 1996). "Comparación del COP878x con la familia mejorada COP8SAx7: consideraciones de hardware/software" (PDF) . National Semiconductor . Nota de aplicación 1043.
- ↑ Manual del usuario de la familia de funciones COP8 . Revisión 005. National Semiconductor . Marzo de 1999. Número de documento 620897-005. Extraído de la imagen ISO comprimida 530094-003_COP8_Tools_Docs_Aug1999.zip , obtenida el 7 de enero de 2020.
- ↑ "Guía del diseñador COP8SAx" (PDF) . National Semiconductor . Enero de 1997. Número de documento 620894-001.
- ↑ Liberatore, David (11 de mayo de 2006). Actualización del diseño de la espoleta electrónica de la bomba FMU-139C/B (PDF) . 50.ª Conferencia Anual de Espoletas de la NDIA . Consultado el 7 de noviembre de 2024 .
- ↑ Dennis, Marc; Hanrahan, Bob; Brackmann, Chris (noviembre de 1991). Nota de aplicación 761 - Fusible electrónico (PDF) . Texas Instruments . Consultado el 7 de noviembre de 2024 .
Enlaces externos
- Microcontroladores