Autor Tema: Problema de prioridad de interrupciones  (Leído 4324 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Medusa

  • PIC18
  • ****
  • Mensajes: 252
Problema de prioridad de interrupciones
« en: 09 de Julio de 2010, 11:25:15 »
Hola, estoy implementando un modulo con un Pic18F452 a 20MHz, que se comunica con un modem GPRS usando el puerto serie, tambien este modulo debe de atenteder algun evento que se presente en RB0 y RB1 como interrupciones externas activados por flancos, mi problema es el siguiente:
Este modem tiene caracteristicas peculiares que hacen que el pic continuemente debe de estar interrogando al modem para verificar si su sensibilidad es la adecuda para poder TX el mensaje,  si el modem tiene una sensibildad baja o muy baja la respesta de esta ante la interrogacion del pic varia de unos pocos milisegundos hasta llegar a los mimutos, por tanto el pic continuamente debe de estar escuchando al modem para eso estoy usando la interrupcion INT_RDA, esta interrupcion tiene la mas alta prioridad, luego estan las interrupciones externas INT0 y INT1,  pero el problema ocurre cuando se presenta un evento en RB0 o RB1 y el pic esta atendiendo la interrupcion INT_RDA, el pic no atiende estas interrupciones por estar ocupado y pierdo el evento pero si cambio el orden de prioridades de interrupciones corro el riesgo de perder algun caracter de respuesta del modem.
Alguien me podria como solucionar este inconveniente..


Código: [Seleccionar]
#priority INT_RDA, INT_RB,  INT_RB1

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Problema de prioridad de interrupciones
« Respuesta #1 en: 09 de Julio de 2010, 13:23:47 »
hola, pues creo que vas a tener que optimizar las rutinas de atencion de las interrupciones si lo que quieres es poder atender todas.

El tema de las prioridades es justamente para eso, para poder priorizar que evento es mas importante.

Si las interrupciones por RB0 y RB1 son del tipo físicas, por decirlo asi que tienes conectado un pulsador, quizas deberias darle prioridad a esas, ya que la rutina de atencion a la interrupcion las puedes hacer bien simple solo seteando un flag o algo así y luego en el programa principal la atiendes. La posibilidad de que te entre una interrupcion INT_RDA en el tiempo que ejecutas el seteo de un bit en un registro (activar un flag) es muy poco probable.

Espero no haberte liado, saludos

Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema de prioridad de interrupciones
« Respuesta #2 en: 09 de Julio de 2010, 15:39:13 »
Esas prioridades que le estás configurando no son más que por cual bandera IF pregunta primero, no está trabajando con los 2 vectores de interrupción (0x08 y 0x18) de los microcontroladores 18F. Para ello hay que indicarle al CCS que la rutina de interrupción es de alta prioridad y habilitar las interrupciones por prioridades en las directivas de preprocesador, buscar en la ayuda de CCS.

Pero lo más ridiculo es que CCS no permite más de 1 interrupción de alta prioridad, así que también es necesario que hagas más eficientes las llamadas a tus interrupciones.


Saludos!
No contesto mensajes privados, las consultas en el foro


 

anything