Construye tu computadora Mínimum.

Parte 3: Arranque del sistema.

Por: Oscar Toledo Esteva.       Septiembre de 2018.


Al pulsar el botón RESET (Reinicio) de Mínimum, el oscilador interno del microprocesador inicia su frecuencia con 16 megaherzios (MHZ) y distribuye la frecuencia en divisiones prefijadas para cada periférico interno. El microprocesador toma por omisión los 16 MHZ como frecuencia del sistema, hasta que el registro de control del RESET y la oscilación (RESET AND CLOCK CONTROL = RCC) sea programado para elevar y sintetizar esta frecuencia hasta 168,000,000 herzios, con las divisiones de esta frecuencia se elige la cadencia de trabajo de puertas de entradas o salidas, y los demás periféricos para cualquier proyecto del programador. Con Mínimum se pueden leer cinco frecuencias en una pata del microprocesador, con el oscilador del sistema se programa el registro que selecciona la frecuencia (Clock Configuration Register RCC_CFGR), y el registro que activa la frecuencia de los periféricos (Peripheral Clock Enable Register RCC_AHB1ENR). El registro CFGR tiene una franja de una preescala de un divisor de frecuencias en los bits 26:24 para colocar la clave de la frecuencia deseada, y RCC_AHB1ENR activa las puertas de GPIOA para que en el registro GPIOA_MODER se fije la función alterna de la pata 41 del microprocesador como salida de las frecuencias, esto se puede comprobar con un frecuencímetro o un detector de pulsos lógicos.

Programa para leer frecuencias

        MOVW R0,#3800   ; 4002:3800 base del registro RCC
        MOVT R0,#4002   ;
        MOVT R1,#400    ; Bit 26:24 = 100 (8 mhz) Franja para clave del divisor
        STR R1,[R0,#8]  ; 4002:3808 RCC_GFGR
        MOVS R1,#01     ; Bit 0 = 1 activa las puertas de GPIOA
        STR R1[R0,#30]  ; 4002:3830 GPIOA activado
        BFC R0,#0,#10   ; R0 = 4002:0000 = Base GPIOA
        MOVT R1,#2      ; Puerta 8 = 10b función alterna para emitir
                        ; las frecuencias
      X B X             ; Salto en el mismo lugar y fin del programa.

Claves del divisor:

000 Divisor 1 = 16 mhz
100 Divisor 2 = 8 mhz
101 Divisor 3 = 5.333 mhz
110 Divisor 4 = 4 mhz
111 Divisor 5 = 3.2 mhz

Un modo de implementar funciones en el microprocesador es utilizar algoritmos en lenguaje ensamblador, resulta ventajoso por la ejecución rápida y eficiente, aunque la optimización con ensamblador es un trabajo perseverante y laborioso que extiende el tiempo para concluir el desarrollo. Otra alternativa es trabajar con el lenguaje C o C++, por su 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, su compilador puede trasladar el lenguaje escrito a microclaves poco óptimas, con errores de redondeo en cifras con coma flotante o programas que ocupan mas espacio de memoria, además aleja al usuario del lenguaje original del microprocesador, 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 memoriza gradualmente los nemónicos 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.

Foto 6. Computador Mínimum con regulador de voltaje e interface RS232. Integrados en una placa impresa.

De nada sirve la mejor computadora si el usuario no puede comunicarse con el microprocesador, Mínimum utiliza un cableado serializado para programar y ejecutar todas las instrucciones. Un debug o programa monitor está incluido en el 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. 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 elige un UART y 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, la computadora responde al anfitrión con la clave 79 hexadecimal como señal de reconocimiento indicando que el enlace está establecido y el microprocesador preparado para recibir programas del anfitrión.

Foto 7. Nuestra plataforma 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 de todo tipo, como: mecatrónica, almacenaje de memoria SD, usos educativos, autoaprendizaje, calculadora científica, comunicación cableada, sensores o grabar una tarea definitiva en la memoria flash del microprocesador.

El depurador usa W (WRITE) para enviar la orden de escritura, pide al usuario teclear la dirección de la locación donde comienza el volcado de los datos e instrucciones para escribir el programa correspondiente. La orden G (GO) es para Ir a ejecutar en la dirección el programa correspondiente. El volcado del programa inicia con dos datos de 32 bits para fijar espacios de la memoria del microprocesador, y en la siguiente locación ejecuta las instrucciones del 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 parámetros; el vector para la pila de memoria del microprocesador, y el vector +1 que apunta a la dirección donde comienza el programa principal. Con la orden W se inicia el volcado de las claves del programa. La orden G ejecuta el programa.

W 20010000 = Orden W (Write) luego 20010000 (dirección del inicio del programa)

G 20010000 = Orden G (Go) luego 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 y reinicia el microprocesador.

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.
                                          ; La instrucción MOVT no borra el valor
                                          ; bajo del registro.
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 resistencia alta la carga de consumo se reduce a 4.8 mA, lo explica:

       V
   I = —
       R

Con el GPIO conectado a un transistor, puede manejar en su salida cargas inductivas o resistivas con una corriente y voltaje elevado hasta el limite especificado por el transistor.

Volviendo a las primeras computadoras, el primer dato del programa 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 los 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.

Activando o desactivando sincrónicamente varios LEDs, se pueden crear adornos o imágenes llamativas ocupando miles de lineas de código, programas bien elaborados obtienen ganancias equivalentes 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 aquellos que manejan las tarjetas comerciales y utilizan lenguaje C, les será fácil interfazar Mínimum con su laptop. A los programadores novatos les puede tomar semanas establecer una conexión con el microprocesador aplicando el arte perdido del lenguaje ensamblador, 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 no hay muchos ejemplos prácticos para los nuevos componentes y su programación, y que el usuario adopte o rechaze materiales para un diseño inteligente. 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, como toda revolución, los inventos, las innovaciones y las nuevas tecnologías crean nuevos ganadores y perdedores, las verdaderas innovaciones no aparecen en los medios de comunicación, pero cambian el mundo, aunque no las compremos o las utilicemos. 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 consumen productos importados de 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 con tecnología para un mundo mejor, 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, para erradicar enfermedades, descifrar glifos antiguos, o descubrir 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 resultado del trabajo de generaciones de hombres. Minimum es el comienzo de esta aventura de nuevos conceptos sobre la investigación; diseño, producción y venta de productos digitales, y para algunas personas la electrónica digital puede ser un proceso vocacional que les permita estar en el ambiente de las mentes brillantes que honran su trabajo.

Foto 8. Computadora con pantalla LCD que ilustra paso a paso los valores de los registros del procesador, para diseñar, optimizar y construir software que descubre 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