Procesando transacciones SPI usando interrupciones

1

Me pregunto cuál es la mejor manera de manejar las transacciones SPI cuando se usan interrupciones.

Estoy a punto de escribir mi código de interfaz SPI en una parte flash externa utilizando un PIC. Voy a utilizar interrupciones y sé que obtendré una después de que se transfiera mi byte y después de que se reciba una. Una transacción de escritura típica de 16 bits se verá así:

REGISTER_ADDRESS_BYTE | REGISTER_ADDRESS_BYTE | DATA_BYTE | DATA_BYTE | MAYBE_MORE_DATA_BYTES

Normalmente, lo que hago es tener una función como este pseudo código:

SendBytes(num_bytes, *ptr_to_bytes, address, init_true, callback_function_address);

Luego, en mi SendBytes(...) tengo una máquina de estados con dos variables estáticas, una realiza un seguimiento del estado y la otra realiza un seguimiento del número de bytes enviados. Cuando llegan las interrupciones, vuelvo a llamar a SendBytes(...) con init_false y paso a través de mi máquina de estados para cada byte de la transacción. Cuando termine, detengo o llamo al call_back_function almacenado.

Mi pregunta es esta es una forma decente de manejar esto, ¿hay una mejor manera de usar interrupciones? Acabo de hacer esto pensando en el problema, pero asumo que otros también han tenido que manejar esto.

    
pregunta confused

1 respuesta

1

No mencionaste la variante PIC; Los periféricos SPI, así como los controladores de interrupción, son diferentes en diferentes PIC. Aquí hay un ejemplo de cómo manejar un problema similar usando PIC16:

enlace

También muestra el enfoque de la máquina de estado.

    
respondido por el Oleg Mazurov

Lea otras preguntas en las etiquetas