He estado tratando de entender la interrupción SPI, es decir, ¿qué hace y por qué se usa? Leer sobre eso en la web no me ha ayudado. ¿Alguien puede explicarlo en términos simples?
He estado tratando de entender la interrupción SPI, es decir, ¿qué hace y por qué se usa? Leer sobre eso en la web no me ha ayudado. ¿Alguien puede explicarlo en términos simples?
SPIE o "SPI Interrupt Enable" se usa para habilitar la interrupción.
(Suponiendo que estás en modo maestro) Hay dos formas de transferir datos usando SPI:
1.Polling: aquí se escriben los datos en el registro de datos de SPI (SPDR) y luego se encuestan en la bandera para la transmisión de SPI completa (SPIF).
2. Interrupción basada: en este caso, cuando habilita la Interrupción para SPI, escribe datos en SPDR. El controlador transmitirá los datos y provocará una interrupción cuando se complete la transmisión.
Puede surgir una pregunta por la que hay una interrupción para la transmisión pero no para la recepción. Estoy tentado de responder, pero sería mejor si se da cuenta de eso. :-)
Suponiendo que está hablando de AVR, el bit SPIE (SPI Interrupt Enable) habilita las interrupciones relacionadas con SPI.
El número de interrupciones que puede tener un periférico SPI dependerá del dispositivo, pero si tomamos el Atmega8L como ejemplo, solo tiene una interrupción.
Mirando la hoja de datos para lo que hace SPIE, dice lo siguiente:
• Bit 7 - SPIE: habilitación de interrupción SPI Este bit hace que la interrupción SPI se ejecute si se establece el bit SPIF en el Registro SPSR y si el bit de habilitación de interrupción global en SREG está establecido.
Básicamente, cuando se establece SPIE Y SPIF Y el bit de habilitación de interrupción global, se obtiene una interrupción.
¿Cuál es la interrupción? Bueno, veamos lo que hace SPIF. En la hoja de datos, dice lo siguiente:
• Bit 7 - SPIF: marca de interrupción SPI Cuando se completa una transferencia en serie, se establece el indicador SPIF. Se genera una interrupción si SPIE en SPCR está configurado y las interrupciones globales están habilitadas. Si SS es una entrada y se baja cuando el SPI es en modo maestro, esto también establecerá el indicador SPIF. SPIF se borra por hardware al ejecutar el Interrupción correspondiente de manejo de vectores. Alternativamente, el bit SPIF se borra al leer primero SPI Status Register con SPIF configurado, luego accediendo al registro de datos SPI (SPDR).
El texto aquí (creo) es bastante autoexplicativo, así que no lo repetiré.
Si no entiende lo que hace un registro o bit en particular, hojee la hoja de datos. A veces es posible que tengas que saltar de bit en bit para obtener una imagen completa de cómo funciona o qué se supone que está haciendo.
En una aplicación típica que usa comunicaciones SPI, el microcontrolador necesita recibir datos en algún momento. Para recibir datos, el microcontrolador tiene que leer y escribir las señales SPI de una manera específica según lo dictado por el protocolo.
Ahora, como no puede tener al microcontrolador siempre ocupado haciendo esto, los microcontroladores a veces están equipados con un módulo de hardware que es el único responsable de las comunicaciones SPI. Esto permite que el microcontrolador funcione en otras cosas en lugar de manejar SPI.
La interrupción es provocada por el módulo SPI y se usa para notificar al microcontrolador que se recibió un byte (o más) y está listo para su procesamiento.
Lea otras preguntas en las etiquetas microcontroller arduino spi stm32