Estoy usando 2 interrupciones en el LPC1778. Una para el CAN y otra para el temporizador. La CAN interrumpe cada vez que se recibe un nuevo mensaje. El temporizador interrumpe cada 200uS. La prioridad de la interrupción del temporizador es la más alta (es decir, NVIC Priority=0). Mi duda es, si llega un mensaje CAN, y estoy en el ISR, supongamos que se produce una interrupción del temporizador mientras estamos en el ISR CAN, ¿se ejecutará el ISR de interrupción del temporizador y luego se volverá al ISR CAN? O, ¿se completará la interrupción de la CAN antes de que se ejecute la interrupción del temporizador? ¿Se aplica la prioridad sólo si ambas interrupciones ocurren al mismo tiempo o se aplica la prioridad para establecer qué interrupciones no pueden ser enmascaradas bajo ninguna circunstancia? Porque, es muy crítico que la interrupción del temporizador tiene que ejecutarse cada 200uS bajo cualquier circunstancia.
Respuesta
¿Demasiados anuncios?Consulte la multa Manual del usuario . El microcontrolador LPC1778 contiene un núcleo ARM Cortex-M3 que incluye el controlador de interrupción vectorial anidado (NVIC) periférico. La palabra clave aquí es " anidado ", lo que significa que el controlador de interrupciones soporta excepciones e interrupciones anidadas, lo que significa que una interrupción activa puede ser adelantada por una interrupción de mayor prioridad. Busca en el Manual de Usuario los términos "nest" y "preempt" para saber más.
Tendrás que configurar el controlador de interrupciones y priorizar las interrupciones adecuadamente para que se produzca la preferencia. Tal vez elijas utilizar la excepción SysTick para tu temporizador de modo que tenga mayor prioridad que la interrupción CAN. O si también utilizas una interrupción para el temporizador, tendrás que configurar la prioridad de grupo (ver sección 39.3.3.6) de las interrupciones para asegurar que el ISR del temporizador pueda adelantarse al ISR del CAN.