SPI Interrupt Handler delay en STM32F303?

3

Estoy trabajando con un microcontrolador STM32F303 configurado en modo esclavo que funciona a 72 MHz, y me he encontrado con un comportamiento extraño del que estoy tratando de rastrear el origen. El maestro primero envía a través de ~ 40 bytes y los registra a ~ 300 KHz. Después de una pausa de 6 ms, el maestro comienza a transmitir ~ 20 bytes a 5 MHz y repite este comportamiento indefinidamente. Desde que tengo un analizador lógico, lo he estado utilizando junto con algunos pines GPIO de depuración para averiguar aproximadamente cuándo se dispara el ISR SPI.

Durante el primer conjunto de bytes, la interrupción del Buffer de Recepción No Vacía (RXNE) nos toma ~ 0.52 para que se active después de que se haya registrado el último bit del primer byte. Supongo que vería un comportamiento similar para el otro conjunto de bytes, pero en cambio, se necesitan 1.3 us para activar los bytes más rápidos.

Este es un problema para mí, porque cuando ya pasamos los 1.3, el segundo byte ya se ha registrado cuando debería haber tenido datos listos para que se sincronice con él. He comprobado mi código y no parece que se haya activado ninguna otra interrupción, y también le he dado a mi controlador SPI la máxima prioridad, por lo que, para comenzar, no debería ser reemplazado por ningún otro ISR. Estoy seguro de que la velocidad no es un problema, porque aunque el periférico SPI que estoy usando en realidad tiene una velocidad de reloj de 36 MHz, debería ser bastante rápido para abordar un reloj maestro en bytes a 5 MHz.

Mi única suposición es que es algo relacionado con el hardware del STM32? ¿Alguien ha visto comportamientos como este, y o conocen el origen de esto? ¿También posibles soluciones?

    
pregunta HD_Mouse

1 respuesta

1

No tengo nada sobre la diferencia de tiempo, pero sí tengo una solución alternativa: si puede preparar su marco de respuesta con antelación, utilice DMA para enviar su marco y capturar el marco transmitido. He encontrado que el DMA en el STM32F4 es un poco incómodo para ponerse en marcha, pero una vez que entiendes la secuencia, tienes que configurar las cosas que funcionan muy bien.

    
respondido por el markt

Lea otras preguntas en las etiquetas