Interrupciones con mplab C18

hola buenas, tengo que hacer un programilla usando dos interrupciones, una del timer y otra por cambio de estado en un pin. He estado mirando y visto que hay dos tipos de interrupciones las de alta y baja prioridad, las de baja solo guardan el pc y las de alta guardan todo el contexto (pc, wreg, bsr, status) y mi duda es cuando se usa cada tipo. Tambien tengo dudas en como asignar prioridad teniendo varias interrupciones y como programar la rutina de servicio, si hay que programar varias o dentro de la misma mediante if comprobar los flags y atendiendo la que se ha producido
:rolleyes:
 
Exactamente, tenés que testear los flags de interrupción (xxxIF) para ver cual interrupción es la que se activó.
No quiero dejar de hacer la distinción entre prioridad y cantidad de rutinas de interrupción. La prioridad simplemente establece que interrupción se atiende primero, lo que no está relacionado con cuántas rutinas de interrupción disponibles hay.
La cantidad de rutinas de interrupción viene dada por el vector de interrupciones, que en este caso es de tamaño 2.
En pics de gama alta hay más niveles de prioridad y se escriben rutinas de interrupción por separado para cada módulo (SPI, IC, OC, CN, UART, CAN, Timers, etc).

Las recomendaciones para escribir rutinas de interrupción son a grandes rasgos: que no sean grandes porciones de código, usarlas para escribir algún dato o setear algún flag que sea chequeado por el programa principal, tener cuidado de guardar y recuperar los registros que uno usa (si usas el C18 el compilador se encarga), recuerda declarar como "volatile" los registros SFR que use la interrupción, y no hay mucho más que eso.

Cuando usar uno u otro tipo... bueno, en mi corta experiencia he usado algunos pines para detectar fallas de periféricos, a eso le puse alta prioridad.
Después hay que analizar cada cuanto tiempo se producen las interrupciones y cuanto se tarda en atenderlas, y que tan prioritario es atenderlas.

Por ahí si ponés tus fuentes de interrupción y sus características sería interesante debatir cuál debería tener alta prioridad y cual baja en este tema.

Saludos
 
Atrás
Arriba