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.