Autor Tema: Prioridades en interrupciónes externas  (Leído 4179 veces)

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

Desconectado fr4n

  • PIC12
  • **
  • Mensajes: 53
Prioridades en interrupciónes externas
« en: 05 de Diciembre de 2011, 09:47:05 »
Hola a todos, he buscado en el foro y no me ha quedado muy claro este tema, asi que espero vuestra ayuda.

Tengo un PIC18F4550, programo en C con CCS y uso las interrupciones externas RB0 (int_ext0) y RB1 (int_ ext1).
Me gustaría que la interrupción externa RB1 tenga más prioridad que la interrupción externa RB0.

Es posible que mientras atiende la interrupción RB0 (es inevitable que sea un poco larga para ser una interrupción y no se puede hacer con otro método) si se interrume con RB1 durante ese momento (si es cortita) se atienda a ésta y luego siga con la anterior por dónde estaba (con RB0)?
¿Cómo y dónde se programa en el código estas prioridades?

Mucas gracias!
Saludos!

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Prioridades en interrupciónes externas
« Respuesta #1 en: 05 de Diciembre de 2011, 09:56:26 »
si se puede, ese pic tiene 2 vectores de interrupciones, uno high y otro low, el high interrumpe al low en caso de que sea llamada la interrupcion, y el low NO interrumpe al high hasta que este termine.

Sin embargo en CCS no se como va, hace poco hablamos en un post de ello pero no recuerdo cual.

Aqui tienes una web que explica algo:
http://www.ccsinfo.com/faq.php?page=high_and_fast_interrupts

segun he leido por ahi en el manual de ccs viene un apartado para esto, pero nidea yo no he visto nunca ese manual xD

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Prioridades en interrupciónes externas
« Respuesta #2 en: 05 de Diciembre de 2011, 10:01:31 »
si se puede, ese pic tiene 2 vectores de interrupciones, uno high y otro low, el high interrumpe al low en caso de que sea llamada la interrupcion, y el low NO interrumpe al high hasta que este termine.

No lo veo posible, dado que al habilitar las prioridades de interrupción EXT0 es solamente de alta prioridad ( #INT_xxxx HIGH). Podrías invertir el tratamiento, o sea que RB0 trate lo que tendría que tratar RB1 y manejarlo por prioridades vectorizadas.

Saludos!
« Última modificación: 05 de Diciembre de 2011, 10:28:45 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado fr4n

  • PIC12
  • **
  • Mensajes: 53
Re: Prioridades en interrupciónes externas
« Respuesta #3 en: 05 de Diciembre de 2011, 10:05:36 »
Pero mis 2 interrupciones son externas y están asociadas a los pines mencionados en mi anterior post (RB0 y RB1).
He mirado la ayuda y no me queda claro (interrupción fast?) como escribir que la interrupción externa RB1 (#int_EXT1) tenga prioridad sobre la otra interrupción externa RB0 (#int_EXT). No se como configurarlo :oops:

Saludos y gracias!
« Última modificación: 05 de Diciembre de 2011, 10:15:43 por fr4n »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Prioridades en interrupciónes externas
« Respuesta #4 en: 05 de Diciembre de 2011, 10:10:08 »
Pero al utilizar #int_EXT1 HIGH habilitas las interrupciones con prioridades y EXT0 es solamente de alta prioridad y estas en las mismas condiciones que antes. RB1 no va a interrumpir RB1. Se puede solucionar si cambias las funciones, entonces EXT1 queda de baja prioridad y EXT0 seria de alta prioridad.


Saludos
« Última modificación: 05 de Diciembre de 2011, 10:28:30 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado fr4n

  • PIC12
  • **
  • Mensajes: 53
Re: Prioridades en interrupciónes externas
« Respuesta #5 en: 05 de Diciembre de 2011, 10:15:19 »
Ok, muchas gracias.

No puedo cambiar las funciones, porque esas interrupciones externas no dependen de mi, si no de una máquina al que esta todo mi hardware conectado y cada interrupción es para cosas distintas y RB1 siempre se produce dentro de RB0...
Tendría que cambiar el hardware cruzando las entradas de dichas interupciones supongo, ¿no?

Tendría que añadir algo de código a la programación entonces en ese caso?

Saludos y gracias!

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Prioridades en interrupciónes externas
« Respuesta #6 en: 05 de Diciembre de 2011, 10:27:07 »
Citar
Tendría que cambiar el hardware cruzando las entradas de dichas interupciones supongo, ¿no?

Exacto.

Citar
Tendría que añadir algo de código a la programación entonces en ese caso?

Código: C
  1. #int_EXT1
  2. void ISR_externa1(void){
  3.  
  4.  
  5. }
  6.  
  7. #int_EXT0 HIGH
  8. void ISR_externa0(void){
  9.  
  10.  
  11. }

Con eso debería de funcionar.

EDIT: Adicionalmente en #device debe agregarse HIGH_INTS=TRUE
« Última modificación: 05 de Diciembre de 2011, 10:36:05 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado fr4n

  • PIC12
  • **
  • Mensajes: 53
Re: Prioridades en interrupciónes externas
« Respuesta #7 en: 05 de Diciembre de 2011, 11:04:34 »
Muchas gracias! ;-)

Saludos.

Desconectado fr4n

  • PIC12
  • **
  • Mensajes: 53
Re: Prioridades en interrupciónes externas
« Respuesta #8 en: 07 de Diciembre de 2011, 08:15:36 »
Citar
Tendría que cambiar el hardware cruzando las entradas de dichas interupciones supongo, ¿no?

Exacto.

Citar
Tendría que añadir algo de código a la programación entonces en ese caso?

Código: C
  1. #int_EXT1
  2. void ISR_externa1(void){
  3.  
  4.  
  5. }
  6.  
  7. #int_EXT0 HIGH
  8. void ISR_externa0(void){
  9.  
  10.  
  11. }

Con eso debería de funcionar.

EDIT: Adicionalmente en #device debe agregarse HIGH_INTS=TRUE

Solo un detalle,
al poner #int_EXT0 HIGH, al compilar me da error "Expecting a (", pero si le quito el 0 y pongo: #int_EXT HIGH si compila bien.
¿A qué puede ser debido ésto? a la otra interrupción si le pongo el 1 siempre, asi: #int_EXT1

Saludos y gracias!

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Prioridades en interrupciónes externas
« Respuesta #9 en: 07 de Diciembre de 2011, 08:50:15 »
quizas el EXT0 no exista y sea directamente EXT, realmente no se como funciona el CCS bien, pero es un rollo para cosas de este tipo segun estoy viendo...

Desconectado fr4n

  • PIC12
  • **
  • Mensajes: 53
Re: Prioridades en interrupciónes externas
« Respuesta #10 en: 07 de Diciembre de 2011, 09:18:08 »
quizas el EXT0 no exista y sea directamente EXT, realmente no se como funciona el CCS bien, pero es un rollo para cosas de este tipo segun estoy viendo...
Bueno, parace que todo funciona bien así (con el EXT sólo) ;-)
Muchas gracias a todos!

Saludos.