¿Qué es la interrupción SPI (SPIE) en el registro de control SPI?

He estado tratando de entender SPI Interrupt, es decir, ¿qué hace y por qué se usa? Leer sobre esto en la web no me ha ayudado. ¿Alguien puede explicarlo en términos simples?

enumeras tanto stm32 como arduino. Estas son plataformas bastante diferentes y, hasta cierto punto, el comportamiento sobre el que está preguntando será específico de la plataforma.

Respuestas (3)

SPIE o "SPI Interrupt Enable" se usa para habilitar la interrupción.

(Suponiendo que esté en modo Maestro) Hay dos formas de transferir datos usando SPI:

1. Sondeo: aquí escribe datos en el registro de datos de SPI (SPDR) y luego sondea en el indicador de Transmisión SPI completa (SPIF).

2. Basado en interrupciones: en este caso, cuando habilita la interrupción para SPI, escribe datos en SPDR. El controlador transmitirá los datos y generará una interrupción cuando se complete la transmisión.

Puede surgir una pregunta de por qué hay interrupción para la transmisión pero no para la recepción, estoy tentado de responder, ¡pero sería mejor si lo averiguas! :-)

Gracias por su respuesta, algunas preguntas de seguimiento: 1. ¿Cada microcontrolador permite 2 formas de transferir datos? 2. ¿Qué sucede si la interrupción no está habilitada (provoca errores)? 3. ¿Por qué la interrupción es para el modo de transmisión pero no para la recepción?
@ user44776 Le sugiero que lea sobre SPI en Wikipedia y algunos otros sitios web.

Suponiendo que está hablando de AVR, el bit SPIE (SPI Interrupt Enable) es para habilitar las interrupciones relacionadas con SPI.

La cantidad de interrupciones que puede tener un periférico SPI variará según el dispositivo, pero si tomamos como ejemplo el Atmega8L , solo tiene una interrupción.

Mirando la hoja de datos de lo que hace SPIE, dice lo siguiente:

• Bit 7 – SPIE: Habilitación de interrupción SPI Este bit hace que se ejecute la interrupción SPI si se establece el bit SPIF en el registro SPSR y si se establece el bit de habilitación de interrupción global en SREG.

Básicamente, cuando SPIE AND SPIF AND el bit de activación de interrupción global está establecido, obtendrá una interrupción.

¿Cuál es la interrupción? Bueno, veamos qué hace SPIF. En la hoja de datos, dice lo siguiente:

• Bit 7 – SPIF: Indicador de interrupción SPI Cuando se completa una transferencia en serie, se establece el indicador SPIF. Se genera una interrupción si se establece SPIE en SPCR y se habilitan las interrupciones globales. Si SS es una entrada y se reduce cuando el SPI está en modo maestro, esto también establecerá el indicador SPIF. SPIF es borrado por hardware cuando se ejecuta el vector de manejo de interrupción correspondiente. Alternativamente, el bit SPIF se borra leyendo primero el registro de estado SPI con SPIF establecido y luego accediendo al registro de datos SPI (SPDR).

El texto aquí (creo) se explica por sí mismo, 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 deba saltar de un bit a otro para obtener una imagen completa de cómo funciona o qué se supone que debe hacer.

En una aplicación típica que utiliza 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 dicte el protocolo.

Ahora, dado que no puede tener el microcontrolador constantemente ocupado haciendo esto, los microcontroladores a veces están equipados con un módulo de hardware exclusivamente responsable de las comunicaciones SPI. Esto permite que el microcontrolador funcione en otras cosas en lugar de manejar SPI.

La interrupción la genera el módulo SPI y se utiliza para notificar al microcontrolador que se recibió un byte (o más) y que está listo para su procesamiento.

Gracias por su respuesta, ¿se genera una interrupción cuando se transmite o recibe un byte? ¿Qué sucede si una interrupción no está habilitada?
Dependiendo del microcontrolador, podría tener una interrupción de recepción o una interrupción de transmisión o ambas. Si no está habilitado, no hay forma de recibir una notificación (alternativamente, puede sondear el indicador recibido) de que ha llegado un byte. Si no puede leer los datos del búfer, podría sobrescribirse o causar un desbordamiento.