configurando UART como FIQ

-2

Estoy trabajando en LPC2468 y uso UART0 del controlador para la comunicación con sim300 gprs módulo . A veces, si envío un comando para leer la intensidad de la señal del sim, la entrada que recibo no es correcta. Después de analizar el problema, encontré el problema de que a veces cuando el UART recibe información al mismo tiempo que se llama al temporizador y el software pasa al bloque del temporizador. en esa duración, se pierden algunos bytes enviados por el módulo . Para evitar esto, quiero configurar UART0 como FIQ, es decir, interrumpir la prioridad más alta. ¿Puedo configurar UART0 como FIQ? Si sí ¿Cómo?

    
pregunta Eljay

2 respuestas

1

Puedes usar las FIQ para UART (o cualquier otra interrupción); es posible que necesites hacer algunos trucos con el código de inicio de tu compilador para configurarlo. Sin embargo, si está perdiendo caracteres de una UART FIFO, a menos que esté usando una tasa de baudios muy alta, vería por qué las otras interrupciones tardan tanto en completarse y en tratar de mejorar este aspecto de las cosas.

Una búsqueda rápida en la web me dice que la velocidad máxima para este módulo es de 115200 baudios, aproximadamente 86uS por byte. El uso del modo fifo en 8 bytes le brinda casi 800uS para reparar la interrupción UART. Si sus otras interrupciones tardan tanto en completarse, probablemente debería intentar solucionar este problema en lugar de utilizar las FIQ para la interrupción de UART.

¿Realmente ha medido la latencia de interrupción de su peor caso? ¿Estás viendo errores de saturación de UART?

    
respondido por el mikeselectricstuff
1

Sí, puedes asignar UARTs a FIQ.

La mayoría de los fabricantes tienen, además de las hojas de datos, manuales de usuario para familias de microcontroladores, donde se describen las características comunes de esa familia. Entonces, si no puede encontrar algo en la hoja de datos, obtenga el manual del usuario.

En este caso, necesita el LPC24xx User Manual , en particular la tabla 108 en la página 114. En el Registro de selección de interrupción que usted asigna, cuál de las 32 fuentes de interrupción está asignada a FIQ, y cuál a IRQ. La Tabla 117 en la página 118 le dice que UART0 es el bit 6 en ese registro.

  

La latencia FIQ más rápida posible se logra cuando una sola solicitud es   clasificado como FIQ, porque entonces la rutina de servicio de FIQ puede simplemente comenzar a tratar con eso   dispositivo. Pero si se asigna más de una solicitud a la clase FIQ, la rutina de servicio FIQ   puede leer una palabra del VIC que identifica qué fuente (s) de FIQ está solicitando una   interrumpir.

    
respondido por el stevenvh

Lea otras preguntas en las etiquetas