Construye tu computadora Mínimum.
Parte 3: Arranque del sistema.
Por: Oscar Toledo Esteva. Septiembre de 2018.
Como generar frecuencias
Derivado de la frecuencia que genera el registro RCC_CR, con Mínimum es posible producir cinco frecuencias precisas utilizando un pin del microprocesador para la salida y lectura de la frecuencia, en la franja de los bits 26:24 del registro RCC_CFGR (Clock Configuration Register) se coloca la clave binaria del divisor de cada frecuencia, mientras que el registro RCC_AHB1ENR (Peripheral Clock Enable Register) activa la puerta de salida que corresponde a la pata 41 del microprocesador, donde se puede comprobar la lectura de la frecuencia con un frecuencímetro, los pulsos de onda cuadrada con un detector lógico, o ver la frecuencia y la forma de onda en un osciloscopio.
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 registro (RCC_CR) 2001:000C MOVT R0,#4002 ; 2001:0010 MOVT R1,#400 ; Bit 26:24 Clave del divisor Ej. Bit 26 = 1 (8 mhz) 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 ; BFC (Bit Field Clear) borra una franja de 16 bits ; (10 hexadecimal) y R0 = 4002:0000 GPIOA MODER 2001:001E MOVT R1,#2 ; Puerta 8 = 10b función alterna para emitir ; la frecuencia 2001:0022 STR R1,[R0] ; Pulso de ondas cuadradas activado 2001:0024 B 6000:0024 ; Fin del programa y salta en el mismo lugar Franjas bit 26, bit 25, bit 24 para las 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
Formato de punto flotante para 32 bits
El conjunto de números racionales y los números irracionales que pertenecen al conjunto de los números reales los manejan las instrucciones de punto flotante del microprocesador Mínimum, donde los algoritmos obtienen una precisión óptima, ya sea números enteros, fraccionarios, naturales y naturales negativos, se procesan en microsegundos.
El formato usa 32 bits fraccionados para colocar un bit como indicador del signo, 8 bits como exponente y 23 bits para la fracción significativa del número procesado. 127 es la constante del exponente y cada cifra produce un desplazamiento que aporta un exceso para ser sumado con la constante, esto facilita codificar la fracción significativa donde cada bit opera como un valor exponencial que son sumados en su conjunto.
En una conversión de un decimal siempre se utilizan números binarios, desde el origen hasta el resultado, un decimal tecleado por un usuario de la computadora oculto por el microprocesador es convertido a binario, si tenemos el decimal 25.25 este de inmediato es fraccionado en dos partes binarias con un punto decimal por las instrucciones del microprocesador de punto flotante para 32 bits, como se indica:
Luego el punto decimal se desplaza a la izquierda hasta situarse junto al bit mas significativo de la cifra binaria.
En esta cifra del binario fraccionado fueron desplazados 4 bits por el punto decimal, el bit mas significativo se guarda temporalmente para ser utilizado al codificar la cifra de 32 bits, quedando solo la fracción significativa.
El valor 4 de los bits desplazados es el exponente que se agrega al constante 127 de 8 bits, de esto 4 se multiplica y luego multiplicado con la suma de la fracción significativa, de acuerdo a la siguiente formula: S es el signo positivo si es 0, o negativo si es 1, e como exponente, 1 es el bit mas significativo guardado temporalmente + F que es la suma de los bits de la fracción significativa (solo el binario indicado con un bit igual a 1).
Programar con punto flotante
El repertorio de las instrucciones de punto flotante cuenta con su propio registro de estatus, 32 registros para intercambiar datos, además de 128 constantes inmediatas de los primeros multiplos de 4, 8, 16 y 31, como un procesador aparte del procesador central. Para usar las instrucciones del punto flotante solo hay que activar el acceso a través de un programa con siete instrucciones, hecho esto, se crean programas como el siguiente:
Programa para inicializar instrucciones de punto flotante MOVW R0,#ED00 ; Registro SCB CPACR (E000:ED00) MOVT R0,#E000 ; LDR R1,[R0] ; SCB CPACR ORR R1,R1,#F00000 ; Clave para habilitar CP10 y CP11 Bit 23:20 STR R1,[R0,#] ; SCB CPACR DSB ; Sincronización de datos LSB ; Sincronización de instrucciones
Manejo de las puertas de entrada y salida
Cada pin del microprocesador es una puerta programable del GPIO (General Purpose Input/Output), que maneja señales de entradas o salidas para una función específica de los periféricos integrados o externos, incluyendo señales analógicas. Los pines funcionan en forma multiplexada, en paralelo o serializado, lo cual facilita la creación de proyectos. Minimum tiene varios procesadores independientes que utilizan los pines del microprocesador central, por ejemplo; un UART requiere por lo menos dos pines del GPIO, mientras un controlador SD para uso profesional utiliza 6 o 8 GPIOs, de esta manera el GPIO será exclusivo para los interfaces elegidos, y lo que resta del GPIO no debe interferir con los GPIO de controladores asignados por el microprocesador. Por ejemplo, los pines para PC12, PC11, PC10, PC9, PC8 y PD2 son exclusivos para el controlador de memoria MicroSD, una vez ocupados para esta función no deben ser utilizados para otra tarea. Es lujoso usar las puertas para conectar en paralelo una memoria externa de 2 megabites, que usaría decenas de pines del microprocesador, es un motivo por el que los fabricantes de microprocesadores incluyen memorias internamente.
Cada GPIO es un grupo de 16 puertas programables con 16 pines indicado por una letra, GPIOA (0) es del grupo A señalando el pin 0 de 0-15 puertas. Cada puerta maneja hasta 16 bits de datos en conexión paralela, o miles de bits en comunicación serializada. Mínimum tiene 10 registros para cada grupo del GPIO, estos programan los parámetros de cada función del microprocesador.
Registros para manejar puertas Indice Función Significado 00 MODER 2 bits para la función entrada o salida de datos 04 OTYPER Función para la salida como Open Colector o Push Pull 08 OSPEEDR Operación para mínima o máxima velocidad de la puerta 0C PUPDR Activa la puerta a nivel lógico 0 o 1 10 IDR Dato con 16 bits de la lectura externa 14 ODR Dato con 16 bits para la escritura externa 18 BSPR Fija y borra los bits de la puerta 1C LCKR Fija un candado de una puerta 20 AFRL 16 bits bajos de la función alterna (AF0-AF15) 24 AFRH 16 bits altos de la función alterna (AF0-AF15)
Al reiniciar el microprocesador la mayoría de los registros de las puertas contienen ceros, por ejemplo: Al principio MODER contiene un par de ceros, que es la clave 00 para el modo de entrada de una señal externa, de las 16 puertas cada una ocupa 32 bit
MODER 00 Modo para entrada de puerta 01 Modo para salida de puerta 10 Modo para una función alterna 11 Modo análogo de la puerta
El registro MODER (Mode Register) usa dos bits para fijar la función de las 16 puertas. El bit 0 y el bit 1 es para la clave del GPIOC puerta 0, el bit 2 y 3 es la clave del GPIOC puerta 1, y así sucesivamente. Cada grupo de puertas tiene una dirección para colocar la clave de cada registro. 4002:0800 es la dirección del registro GPIOC MODER. Al reinicio esta dirección contiene ceros.
Con un programa se fijan los parametros del GPIO para una tarea con los pines del microprocesador, luego se fija la cadencia de la frecuencia con el registro RESET A CLOCK CONTROL (RCC), este activa los periféricos disponibles y los GPIOs. Para trabajar con el GPIOC se utiliza el registro Peripheral Clock 1 Enable (RCC_AHB1ENR), que con el bit 2=1 fija el reloj del grupo GPIOC. El binario equivalente se coloca en la dirección base de RCC = 4002:3800 hexadecimal + 30 hexadecimal, correspondiente a RCC_AHB1ENR = 4002:3830. Al habilitar el GPIOC quedan activadas sus 16 puertas en sus 16 pines.
Por ejemplo: Este programa activa las 16 puertas del GPIOC, luego la puerta 0 se activa como salida para enviar datos, esto se realiza con el registro RCC_AHB1ENR que selecciona al GPIOC para una tarea.
MOVW R0,#3800 MOVT R0,#4002 ; R0 = 4002:3800 dirección base del registro RCC_CR MOVS R1,#04 ; R1 = 0100 binario, el bit 2 = 1 para activar la puerta GPIOC STR R1,[R0,#30] ; Valor de R1 se guarda en la dirección 4002:3830 = registro RCC_AHB1ENR BIC R0,R0,#3000 ; Borra dos bits, ahora R0 = 4002:0800 GPIOC MODER MOVS R1,#01 ; R1 = 01 es la clave de GPIOC(0) para el modo de puerta de salida. STR R1,[R0] ; Valor de R1 se guarda en la dirección 4002:0800 y la puerta de ; salida 0 de GPIOC se activa.
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 para iluminar 8 LEDs
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 hexadecimal se guarda en ; el registro R0. MOVW mueve el valor ; bajo de los 32 bits que maneja R0. 2001:000C C4 F2 02 00 MOVT R0,#4002 ; Un valor hexadecimal se guarda en ; el registro R0. MOVT mueve el 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 45 F2 55 51 MOVW R1,#5555 ; 01 01 01 01 01 01 01 01 = Bit 7:0 ; Modo de salida de GPIOC del bit 7 ; hasta 0 2001:001C 01 60 STR R1,[R0] ; La salida de GPIOC (bit 7-0) están ; activadas y los LEDs iluminados 2000:001E 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 al pin 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
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.
Conector para periféricos
Es necesario tener un conector para crear experimentos externos y que pueda usar las puertas apropiadas para las señales que son frecuentes en las tareas para conectar sensores, pantallas LCD u OLED, teclados y otros periféricos que manejan protocolos de conexión serializados. Los graficadores LCD funcionan con 8 bits de datos (D0-D7), con un pin se habilita el LCD, otro controla la escritura y lectura del dato, con otro pin se activa un dato de orden y el dato visualizado. El conector ilustrado suministra todos los pines, dos de ellos alimentan con 5V los dispositivos conectados.
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 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 que produce nuevos conceptos en mentes brillantes que honran su trabajo. Podemos ignorar la ciencia y la tecnología, pero nunca podremos evitar sus consecuencias.
Bibliografía:
Artículo anterior |
![]() |