TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: _CMaGNo_ en 23 de Abril de 2006, 17:17:56
-
Hola! ... existe alguna manera de "limpiar" las banderas del registro de interrupciones perifericas (PIR1), que en ensamblador seria ...
clrf PIR1
O simplemente esa limpieza la hace automaticamente el CCS C cuando llama a las funciones manejadoras de interrupciones (las que van despues de la directivas tipo #INT_XXX).
Otra cosa, se puede en CCS C activar las interrupciones perifericas con una sola instruccion ....
bsf INTCON, PEIE
O hay que activar una por una ....
enable_interrupts(INT_AD);
enable_interrupts(INT_PSP);
.
.
.
enable_interrupts(INT_CCP1);
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_TIMER2);
Gracias!!!
-
Amigo _CMaGNo_
1º.- Los flags de interrupción los limpia automáticamente CCS C.
2º.- Cada interrupción ha de ser habilitada específicamente, así como la habilitación general de interrupciones.
Te pego el trozo dedicado a esto del Manual del CCS C:
ENABLE_INTERRUPTS( )
Syntax: enable_interrupts (level)
Parameters: level - a constant defined in the devices .h file
Returns: undefined
Function: Enables the interrupt at the given level. An interrupt procedure
should have been defined for the indicated interrupt. The GLOBAL level
will not enable any of the specific interrupts but will allow any of the specific
interrupts previously enabled to become active.
Availability: Device with interrupts (PCM and PCH)
Requires: Should have a #int_xxxx, Constants are defined in the devices .h file.
Examples:
enable_interrupts(INT_TIMER0);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
Example Files: ex_sisr.c, ex_stwt.c
Also See: disable_enterrupts(), #int_xxxx
-
Ok redpic, gracias por la respuesta, sos muy amable!
-
Esto de las interrupciones "perifericas" me desorienta un poco... entiendo que PEIE habilita las interrupciones del registro PIR... pero no mucho mas... supongo que PEIE lo habilita automaticamente el CCS, porque acabo de enterarme de que existe, nunca lo habia habilitado y aun asi las interrupciones me funcionaban... pero cual seria el comando para habilitar/deshabilitarlas? en la ayuda del ccs no encontre que trataran este tema.
ademas, a que se le llama interrupcion periferica? porque TMR1 y 2 son perifericas, pero TMR0 no... que caracteristica hace que una interrupcion sea PIR o INTCON?
La verdad que no me urge la respuesta, ya que no tengo ningun problema asociado a esto... solo es curiosidad :-)
Salu2!
-
El TMR0 ya existía en las familias que no usaban interrupciones (PIC16C5X). Sólamente contaba, no generaba interrupciones, por lo mismo no forma parte de la lógica de interrupciones de los periféricos. La interrupción del pin INT así como los cambios en RBX se consideran parte del core, no precisamente son periféricos.
-
Dudas = Dudas - 1 :mrgreen:
Gracias!