Tm4c uart anidadas interrupciones- ¿termina cada com que se ejecuta antes de que se ejecute la siguiente?

0

Placa: Tiva ™ C Series TM4C1294

EK-TM4C1294XL

Mi programa está escuchando 2 puertos UART (UART 3 y 7)

Me he encontrado con un problema que estoy perdiendo algunos bytes recibidos y sospecho que este problema se relaciona con las interrupciones de UART.

Entiendo que los UART tienen interrupciones anidadas, pero ¿ambas son seriales?

Por ejemplo: estoy dentro de la función de interrupción de UART 3 y luego, mientras que UART 3 no finalizó la interrupción (simplemente copie sus bytes en el búfer) las interrupciones de UART 7 llegan, el sistema se mueve a UART 7 o terminará primero ¿UART 3 y luego se mueve al UART 7?

Actualmente estoy sufriendo de bytes de error algo así como 45-400 bytes por archivo que su tamaño en 12 Mbytes.

Sospecho que el problema anterior causa estos problemas.

p.s si solo 1 UART está enviando datos, tengo los mismos archivos binarios tanto en el host como en la PC.

    
pregunta MrLevy

3 respuestas

1

Su problema se resolverá si le asigna niveles de prioridad a sus interrupciones, por lo que primero no se molestará en segundo lugar.

Aquí hay un ejemplo:

NVIC_SetPriority (UART3_IRQn, 0);
NVIC_SetPriority (UART7_IRQn, 1);

Mientras se atiende una interrupción, la segunda llegada está en estado pendiente.

    
respondido por el Junior
0

La solución que implementaría es un uDMA. Cuando aumenta la interrupción, deja que el uDMA maneje la transferencia, por lo que puede transferir datos en el uart 2 al mismo tiempo que tm4c129 puede admitir hasta 32 canales uDMA.

Hay un ejemplo de uDMA dado por ti en tivaware. Pero sin ninguna información sobre su dispositivo, no puedo decir mucho más.

    
respondido por el MathieuL
0

Cada controlador de interrupciones se ejecutará hasta su finalización antes de que el otro obtenga cualquier ciclo de CPU. Si cambia las prioridades de interrupción, eso ya no será cierto. En el caso de Tiva UARTS, usted querrá ajustar los umbrales FIFO de manera tal que un UART no se pueda desbordar mientras está prestando servicio al otro. Si los dos FIFO de UART se llenan al mismo tiempo, se eliminarán algunos caracteres.

    
respondido por el Robert Sexton

Lea otras preguntas en las etiquetas