Construye tu computadora Mínimum.

Parte 3: Arranque del sistema.

Por: Oscar Toledo Esteva.       Septiembre de 2018.


Un modo de implementar funciones en un microprocesador es escribir los algoritmos en lenguaje ensamblador, tiende a resultar ventajoso por la ejecución rápida y eficiente aunque la optimización con ensamblador es un trabajo paciente y extiende el tiempo para concluir el desarrollo. La otra alternativa es usar lenguaje C o C++, por la escritura y mantenimiento fácil, es sencillo implementarlo en otras máquinas o procesadores, pero los compiladores para lenguajes de alto nivel como el C no son amistosos. El compilador puede trasladar el lenguaje escrito a microclaves poco óptimas, con errores de redondeo o programas dificiles de leer que alejan al usuario del lenguaje original del microprocesador. Es como si se dialogara con un nativo diidxazá en idioma inglés y el traductor-compilador lo comunicara en otro idioma.

El iniciado en lenguaje ensamblador gradualmente aprende por repeticiones al operar las instrucciones de los microprocesadores, y descubre que hay otra manera de aplicarlos en los algoritmos clásicos. A la luz de la necesidad de encontrar una mejor solución al procesamiento digital, si realmente se busca rapidez u optimizar un programa, hay que descender hasta el nivel del lenguaje máquina del procesador.

Para comunicarse con Mínimum, se usa un enlace cableado serializado para programar y ejecutar instrucciones. El depurador o debug está incluido dentro del microprocesador. Cada fabricante instala un firmware exclusivo de comunicación, algunos los nombran bootloader o ISP (In-System-Programming). Particularmente, Mínimum tiene un depurador con 12 ordenes: para examinar y escribir en la memoria, ejecutar programas del usuario, listar las ordenes incluidas, además de borrar y programar la memoria flash de 1,048,576 bytes, en 12 sectores que comienzan en la dirección 0800:0000 hexadecimal.

Foto 6. Computador Mínimum con regulador de voltaje e interface RS232. Integrados en una placa impresa.
Foto 7. Nuestra plataforma equipada con conectores USB y DB9 232C, es el anfitrión de la computadora Minimum y del curso anual de la Familia Toledo "Construye y programa tu computadora". Un software de creación propia comunica ordenes e instrucciones de programas, para depurar, listar, ensamblar instrucciones y ejecutar programas para mecatrónica, almacenaje de memoria SD, para usos educativos, autoaprendizaje, calculadora científica, comunicación cableada, sensores o grabar una tarea definitiva en la memoria flash del microprocesador.

El microprocesador tiene seis UART (Universal Asynchronous Receiver And Transmitter), para un enlace cableado serializado, en una comunicación con el debug este examina cada UART hasta seleccionar el que está activado con la computadora anfitrión, y desconecta todos los periféricos restantes de comunicación. Se fija la velocidad de transmisión de la computadora anfitrión a 115200 baudios, y envía la clave 7F hexadecimal para activar Mínimum, cuando el debug del procesador sincroniza la velocidad en baudios del UART anfitrión, responde con la clave 79 hexadecimal como señal de reconocimiento a la computadora anfitrión indicando que el enlace está establecido y el procesador preparado para recibir programas del anfitrión.

El depurador utiliza la W para enviar la orden de escritura (Write), pide al usuario teclear la dirección de la locación donde comienza el volcado de los datos e instrucciones y escribir el programa correspondiente. La orden G es para Ir (Go) a ejecutar en la dirección del programa correspondiente. El volcado del programa inicia con dos datos de 32 bits para fijar los espacios de la memoria del microprocesador, y a continuación las instrucciones del microprocesador para un programa.

Un programa para encender un LED, es una secuencia de instrucciones basada en un algoritmo con los requisitos del microprocesador que vamos a utilizar. El programa comienza con 2 requisitos; colocar el vector donde inicia la pila de memoria que el microprocesador va a usar, inmediato, colocar el vector donde comienza nuestro programa. Con la orden W se inicia el volcado de las claves del programa, y por último se envía la orden G para activar las claves del microprocesador.

W 20010000 = W (Write) Orden del depurador interno y 20010000 (dirección del inicio del programa)

G 20010000 = G (Go) Orden del depurador interno y 20010000 (dirección del inicio del programa)

Una vez depositado el programa, se envía la orden G con 20010000 y se ejecuta el programa. Oprimiendo el botón del RESET se interrumpe el programa.

El microprocesador de Mínimum usa en sus instrucciones la arquitectura de cargar y almacenar (Load and Store) en sus registros, al construir un programa con el repertorio de instrucciones ningún registro se puede utilizar sin antes colocar un dato al registro, que posteriormente se almacena en la memoria, en el proceso mueve el valor binario con el primer operando del registro. Por ejemplo: MOV R1,#04 mueve el valor 4 al registro R1. El valor para la instrucción MOV cubre el rango de un grupo de 8 bits = 1 byte para cubrir la cuarta parte de 32 bits, por lo tanto 04 = 0000 0100 binario, equivalente a dos valores hexadecimales como lo indica la tabla de conversión numérica.

Programa con lenguaje ensamblador para encender un LED

Dirección  Clave máquina  Nemónico        Comentario

2001:0000  00 C0 01 20    Vector con la dirección de la pila
2001:0004  09 00 01 20    Dirección más 1 donde empieza el programa
2001:0008  43 F6 00 00    MOVW R0,#3800   ; Un valor binario representado como
                                          ; valor hexadecimal se carga en el
                                          ; registro R0. MOVW indica el valor
                                          ; bajo de los 32 bits que maneja R0.
2001:000C  C4 F2 02 00    MOVT R0,#4002   ; Un valor binario representado como
                                          ; valor hexadecimal se carga en la parte
                                          ; alta del registro R0. MOVT indica MOV TOP,
                                          ; valor alto de los 32 bits que maneja R0.
2001:0010  04 21          MOVS R1,#04     ; El valor 4 = binario 0100 activa las
                                          ; puertas C. R1 = 0000 0004
2001:0012  01 63          STR R1,[R0,#30] ; El valor colocado en R1 se almacena
                                          ; en la dirección 4002:3800 + 30 hex
                                          ; = 4002:3830. Este valor es la dirección
                                          ; del microprocesador para
                                          ; activar la 16 puertas del GPIO C
2001:0014  20 F4 40 50    BIC R0,R0,#3000 ; Esta instrucción borra los bits 12 y 13
                                          ; del registro R0. BIC significa
                                          ; "borrado de bits", al borrar los 2 bits
                                          ; de R0, su contenido se modifica y
                                          ; R0 = 4002:0800. Esta es la dirección
                                          ; para operar las puertas C
2001:0018  01 21          MOVS R1,#01     ; 01 es el nuevo valor de R1 que indica
                                          ; el modo como salida para GPIOC (0) del
                                          ; grupo C bit 0
2001:001A  01 60          STR R1,[R0]     ; El modo salida de PC0 esta fijado
                                          ; y el LED esta activado.
2000:001C  F2 E7          B 2001:001C     ; Programa detenido

La lógica del programa habilita los 16 bits de la puerta C y activa la puerta C0 como linea de salida (PC0) que corresponde a la pata 8 del microprocesador. Al reiniciar el microprocesador, el registro GPIO ODR contiene por omisión la lógica 0, equivalente al polo negativo de los 3.3V positivos. La corriente de una puerta de salida del GPIO es limitada, en cada microprocesador de diferentes fabricantes varia de 10 mA (miliamperes) a 40 mA. Minimum se alimenta con 3.3 voltios y cada puerta de salida soporta 25 mA. Un led que consume 10 mA. con 1.7 voltios, es adecuado para una puerta de salida, para proporcionar la corriente de consumo solo falta elegir el valor en ohms de la resistencia del led. Para esto se usa la relación matemática entre voltaje (V), corriente (I), y la resistencia (R), esto, con la ley de George Simon Ohm es:

       V    (3.3V - 1.7 V del led)
   R = —                            (R = ohms)
       I    (consumo del led en mA)

        3.3-1.7
 160 =  ———————
         .010

Una resistencia de 160 ohms es un valor difícil de conseguir, se pueden usar 180 ohms, 270 ohms o 330 ohms. Con la máxima resistencia la carga de consumo se reduce a 4.8 mA, lo explica:

       V
   I = —
       R

Conectado a la salida del GPIO, un transistor adecuado manejará corrientes y voltajes elevados, hasta el limite especificado por el transistor.

Volviendo a las primeras computadoras, el primer dato de 32 bits estaría escrito de la siguiente manera al operar 32 apagadores de palancas:

        0000 0000 1100 0000 0000 0000 0001 0010 0000 = 20 00 C0 00 hexadecimal
Fig 5. Conexión del LED controlado por la computadora Mínimum, la resistencia de 330 ohmios limita la corriente a 20 miliamperios que el LED necesita. El LED conectado a PC0 que corresponde a la pata 8 se enciende cuando PC0 es igual a cero, es el lado negativo del voltaje del LED, y el lado positivo es el voltaje de 3.3 voltios.

Al activar o desactivar sincrónicamente varios LEDs, crearemos adornos o imágenes llamativas que pueden ocupar miles de lineas de instrucciones, y un programa bien elaborado cuesta el equivalente a varios barriles de petróleo.

¡Mi laptop solo tiene conector USB y no RS232C! No hay problema, coloque en el circuito impreso un cristal de cuarzo de 8 MHZ y dos condensadores para que el microprocesador tenga una precisión de 20 PPM (Partes por millones) que necesita el interfaz USB. O usar un convertidor de USB a UART RS232C.

Fig 6. Circuitos adicionales para mejorar la computadora Minimum.

Para los aficionados a las tarjetas comerciales con lenguaje C, les será fácil interfazar Mínimum con su laptop, y programar con el arte perdido del lenguaje ensamblador. A los novatos les puede tomar semanas antes de establecer una conexión con el microprocesador, afortunadamente, la computadora no se daña con una mala programación. La instrucción para los nuevos conocimientos es un proceso comunicativo y complejo, en la literatura especializada hay pocos ejemplos prácticos de los nuevos componentes, para que el usuario adopte o rechaze materiales para un diseño inteligente. Hoy los países modernos mueven su economía con sistemas similares a la computadora Mínimum, su ciencia y tecnología son impresionantes, fruto de grandes esfuerzos mentales, y de este lado es notorio como pueblo y gobierno no responden a las circunstancias cambiantes sea por ignorancia o entretenidos en sus intereses particulares, solo compran productos importados de los países que poseen la tecnología digital, que finalmente se cobran con divisas de origen que hunde nuestra economía. Los científicos que trabajan para la humanidad, investigan y diseñan con los algoritmos creados hace cientos de años, continúan en la búsqueda de un procesador del pensamiento humano, descubren nuevos materiales y su transformación, así como la mecánica evolucionó a los relevadores eléctricos, los bulbos a transistores y actualmente circuitos integrados, capaces de proyectar sus respuestas en un anteojo, como cualquier otra rama de la ciencia, es el resultado del trabajo de generaciones de hombres. Para algunas personas la electrónica digital puede ser un proceso vocacional que felizmente les permita estar en el ambiente relacionado con las mentes brillantes que honran su trabajo.

Foto 8. Computadora con pantalla LCD para ilustrar paso a paso los valores de los registros del procesador, para diseñar, optimizar y construir software para descubrir la magia y el misterio que animan la creación de un sistema operativo. Esto es Mínimum, un laboratorio de prácticas del microprocesador para aprender y enseñar en una sola placa.

Bibliografía:

 

Artículo anterior Artículo anterior