Construye tu computadora Mínimum.

Parte 3: Arranque del sistema.

Por: Oscar Toledo Esteva.       Septiembre de 2018.


Pulsando el botón RESET (Reinicio) de Mínimum, el oscilador interno del microprocesador inicia por omisión a una frecuencia base de 16 megaherzios (MHZ) y en pasos prefijados divide la frecuencia para cada periférico interno. Con un programa interno se puede sintetizar la frecuencia base (16 MHZ) para elevarla hasta 168,000,000 herzios, se utilizan principalmente los registros de control del RESET y la oscilación (RESET AND CLOCK CONTROL = RCC), las divisiones de esta frecuencia eligen la cadencia de trabajo de las puertas de entradas o salidas, y los demás periféricos que elija el programador. Con Mínimum se pueden leen 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 RCC_CFGR tiene una franja en los bits 26:24 para colocar la escala del divisor de frecuencias, y RCC_AHB1ENR activa las puertas del GPIOA para que en el registro GPIOA_MODER fije la función de salida de la frecuencia en la pata 41 del microprocesador, esto se puede comprobar con un frecuencímetro o un detector de pulsos lógicos.

Programa para leer frecuencias en la pata 41 de Minimum

2001:0000 00 C0 01 20     ; Vector a la dirección de la pila
2001:0004 09 00 01 20     ; Dirección + 1 donde empieza el programa

2001:0008 MOVW R0,#3800   ; 4002:3800 base del registro RCC
2001:000C MOVT R0,#4002   ;
2001:0010 MOVT R1,#400    ; Bit 26:24 = 100 (8 mhz) Franja para clave del divisor
2001:0014 STR R1,[R0,#8]  ; 4002:3808 RCC_GFGR
2001:0016 MOVS R1,#01     ; Bit 0 = 1 activa las puertas de GPIOA
2001:0018 STR R1[R0,#30]  ; 4002:3830 GPIOA activado
2001:001A BFC R0,#0,#10   ; Borra una franja de 16 bits para que
                          ; R0 = 4002:0000 = Base GPIOA
2001:001E MOVT R1,#2      ; Puerta 8 = 10b modo de la función alterna para emitir
                          ; las frecuencias
2001:0022 STR R1,[R0]     ; LED activado
2001:0024 B 6000:0024     ; 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 con lenguaje ensamblador, resulta ventajoso por la ejecución rápida y eficiente, aunque la optimización con ensamblador puede ser 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 microprocesadores, 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 en el diálogo del idioma diidxazá al idioma inglés un compilador-traductor usara un exceso de palabras.

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 con el lenguaje ensamblador.

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

De nada sirve una 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 cualquier tipo; mecatrónica, 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 WRITE (W) envía 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 GO (G) es para 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. Oprimir el botón del RESET apaga el LED, interrumpe el programa y reinicia el microprocesador.

Programa con lenguaje ensamblador para encender un diodo de luz (LED)

Dirección  Clave máquina  Nemónico        Comentario

2001:0000  00 C0 01 20    Vector a la dirección de la pila
2001:0004  09 00 01 20    Dirección + 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 está activo
                                          ; y el LED está encendido.
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 se elige el valor en ohms de la resistencia del led. Usando 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 difícil de conseguir, en su caso 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

Si se conecta un transistor al GPIO, 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 con números binarios para operar 32 interruptores 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 similares 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 de 20 picofaradios para que el microprocesador sea preciso en 20 PPM (Partes por millones) que requiere el interfaz USB. O también usar un convertidor comercial de USB a UART RS232C.

Fig 6. Circuitos adicionales para mejorar la computadora Minimum.

Para las personas que manejan 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 con 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 hay pocos ejemplos prácticos para programar determinados microprocesadores, para que el usuario elija adecuadamente sus materiales del diseño. 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 y como en toda revolución: los inventos, las innovaciones y las nuevas tecnologías crean nuevos ganadores y perdedores, las verdaderas innovaciones se crean en pequeños laboratorios y raras veces aparecen en los medios de comunicación, pero transforman 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 se cobran con divisas de origen hundiendo la economía nacional. Los científicos que trabajan con tecnología para un mundo mejor, investigan y diseñan incluso con algoritmos creados hace cientos de años, continúan en la búsqueda de un procesador del pensamiento humano, para combatir virus o 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 hoy los 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 la herramienta adecuada para aventurarse en la investigación, diseño, producción y venta de productos digitales, la electrónica digital puede ser una vivencia vocacional, para produce nuevos conceptos en mentes brillantes que honran su trabajo. Podemos ignorar la ciencia y la tecnología, pero nunca podremos evitar sus consecuencias.

Foto 8. Computadora Minimum 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 un laboratorio de prácticas con software para aprender y enseñar en una sola placa.

Bibliografía:

 

Artículo anterior Artículo anterior