Mi software parece estar funcionando como se esperaba, pero el indicador BSY no se está borrando en el registro SPI.
Fondo:
Estoy intentando que SPI trabaje con DMA en el STM32. Después de descubrir que el DMA es exigente sobre qué canal usas para cada periférico, tengo las cosas funcionando como se esperaba. Leí en algún lugar que es importante asegurarse de que el indicador SPI BuSY esté desactivado antes de iniciar otra transferencia. Estoy examinando los registros utilizando ST / LINK v2 y, por el motivo que sea, el indicador SPI BSY se mantiene y, si tengo una declaración IF en mi código para confirmar que está borrada antes de continuar, el código se bloquea. Soy consciente de la "Heisenbug" de observar los registros SPI_SR / DR con un depurador.
Al principio intenté usar dúplex completo con SPI y los dos canales DMA con los pines conectados entre sí y una matriz de TX y RX. Después de la transferencia, la matriz RX es una copia perfecta de la matriz TX. Pensando que el problema podría haber sido la falta de un borde del reloj esperado, desconecté los dos pines, configuré el SPI en TX solamente y comenté todo el código RX DMA y SPI. El problema persiste.
Dos cosas a tener en cuenta son que el indicador BUSY es a menudo lo único establecido en el registro SR. Sin embargo, si deshabilité la verificación del indicador OCUPADO y reinicié la transferencia DMA, en las llamadas subsiguientes a la rutina de servicio de interrupción, los buffers RXNE y TXE parecen cambiar arbitrariamente entre 1 y 0, con el estado esperado de ambos vacíos siendo más común y el SPI_DR parece a veces obtener un valor arbitrario. No veo el conjunto de banderas invadido.
¿Por qué no se borra el indicador BUSY?