¿Qué instrucciones están escritas para los conductores y en qué idioma están programadas?

Los controladores generalmente se programan en C, porque es necesario acceder al hardware directamente, y C es muy bueno para hacerlo. La otra alternativa es el lenguaje ensamblador.

Los periféricos a menudo se conectan a un microprocesador o microcontroladores a través de protocolos de bus serie como SPI, I²C, I²S, UART, USB, etc., que requieren solo unas pocas conexiones entre el procesador y el periférico. El periférico generalmente tendrá un conjunto de registros escritos (para controlarlo o enviarle datos) o leídos (para obtener datos de él, incluido el estado). Estos registros tendrán bits definidos en ellos que son específicos de la funcionalidad periférica.

Por ejemplo, un DAC de audio (convertidor digital a analógico, utilizado en sistemas de audio) puede tener una interfaz I²C e I²S. La interfaz I²C, que puede ser de solo escritura (sin estado devuelto), se usaría para activar o desactivar el silencio, configurar el volumen, etc. La interfaz I²S realmente tendría los datos de audio, por ejemplo, 16 bits por dos canales estéreo , actualizado a 44,1 kHz (44100 muestras por segundo, que es audio con calidad de CD).

Cada uno de los protocolos en serie también tendrá un conjunto de registros dentro del microprocesador o microcontrolador, que será exclusivo del protocolo pero genérico con respecto al periférico. En general, habrá un registro para escribir datos, otro registro para leer datos, un registro para indicar el estado (está ocupado o hubo un error) y uno o más registros para controlar el protocolo del bus (si no está habilitado, cuál es la velocidad, etc.).

Entonces, cuando quiera escribir un comando en el DAC, usando I²C, especificaré la dirección I²C del DAC (para abordarlo de manera única ya que puede haber varios periféricos I²C en el mismo bus), y luego incluiré el comando (o registro número) y datos. Pero la interfaz I²C ve solo una dirección y uno o más bytes de datos, no sabe lo que está controlando.

Estos registros periféricos generalmente se escriben y leen a través de instrucciones generales de almacenamiento y carga en una arquitectura de E / S mapeada en memoria (donde los registros periféricos se mapean en el mismo espacio de direcciones que la memoria). Aquí es donde entra C (o lenguaje ensamblador, o algún otro lenguaje de bajo nivel), ya que es necesario especificar la dirección exacta de cada registro. Los lenguajes de nivel superior como Java no pueden hacer esto (a propósito, para proteger al programador de desordenar las cosas).

Como ejemplo simple, digamos que quiero escribir un carácter en un UART (periférico serial conectado a una interfaz RS-232). Los procesadores Microchip PIC32, con los que más trabajo, tienen varios UART. La dirección de cada registro UART se define en un archivo de encabezado (p32mz2048efh144.h) para el procesador particular, p. Ej.

volátil externo sin signo int U2TXREG
__attribute __ ((sección (“sfrs”), dirección (0xBF822220)));

declara que el registro de transmisión (TX) para UART # 2 está ubicado en la dirección hexadecimal SFR (registro de función especial) 0xBF822220.

Los parámetros “__attribute__” serán exclusivos de un compilador y procesador en particular, y no forman parte del estándar C.

Para escribir un carácter ch para el UART, simplemente podría escribir,

#include “p32mz2048efh144.h”

anular UART2PutChar (char ch)
{
U2TXREG = ch;
while (U2STAbits.TRMT == 0);
}

que escribe el byte en el registro y luego espera a que se envíe (indicado por el bit TRMT en el registro de estado UART2 U2STA para que se establezca en 1). Este es un ejemplo simplificado; la mayoría de los programas reales usarían interrupciones y no esperarían a que se enviara el personaje, ya que eso solo desperdicia los ciclos del procesador.

Además de los protocolos en serie, un microprocesador o microcontrolador también puede tener uno o más puertos paralelos que pueden conectarse a periféricos. En un esquema de E / S mapeado en memoria, estos puertos también aparecerían en el mapa de E / S normal.

Es posible que los microprocesadores no tengan periféricos internos, o que tengan muy pocos, y en su lugar solo usen E / S externas. Este fue especialmente el caso con los primeros microprocesadores como los 6502, 6800 y 8080. Los dos primeros usaban E / S mapeadas en memoria, por lo que los periféricos se decodificarían de manera muy similar a la memoria. El 8080 usaba direccionamiento de puerto de E / S, por lo que los periféricos se direccionarían utilizando instrucciones especiales de entrada / salida, como las instrucciones de carga y almacenamiento, excepto que la dirección en la instrucción de E / S se envía y decodifica para seleccionar un periférico específico en lugar de un dirección de memoria

More Interesting

¿Qué son los temporizadores suaves y las ruedas de sincronización?

Soy un experimentado ingeniero de software embebido. Me gustaría aprender a diseñar hardware: placas basadas en microcontroladores. ¿Qué habilidades necesito aprender? ¿Qué cursos posibles necesito tomar?

¿Qué cuidado se debe tener al conectar el microcontrolador con la memoria?

¿Cuál es el concepto principal de los sistemas integrados y cómo se relacionan con un proyecto?

Cómo aprender rtos y arm, qué kit es adecuado para esto

¿Vale la pena el precio de Industruino por tener Arduino incrustado en un gabinete de riel DIN estándar o se puede hacer más barato y mejor?

¿Qué microcontroladores pueden admitir la programación inalámbrica (OTA)?

¿Qué instituto es el mejor para la capacitación en circuito integrado en Delhi?

Cómo usar un temporizador de microcontrolador 8051 para calcular el tiempo entre dos eventos configurando SFR con ejemplo

¿Cuáles son las ventajas y desventajas de usar C ++ para sistemas integrados en comparación con la programación en C?

¿Cuál es el futuro y el crecimiento de los sistemas integrados?

¿Cuáles son los microcontroladores comunes utilizados para los robots industriales?

¿Puedes explicar sobre Linux embebido? ¿Hará grandes cambios en el campo de incrustado?

¿Cómo comenzar con 8051 para hacer mi primer proyecto? Cómo hacer un diagrama de circuito EXTERNO que se requiere para el funcionamiento del microcontrolador

¿La programación funcional no es adecuada para sistemas embebidos debido al uso extensivo de la recursividad?