Estoy escribiendo un programa en C para ATmega64A que tiene un ISR INT0. Este ISR debe ejecutarse en caso de flanco descendente de INT0 O si el TIMER3 se desborda.
Para evitar duplicar el código, me gustaría activar Int0 ISR en el ISR de desbordamiento del temporizador 3.
Desafortunadamente no hay tal información en la hoja de datos. Al menos en la sección de descripción del registro INTF:
¿Alguien intenta esto? ¿O tal vez alguien sabe esto en teoría?
No.
Escribir un 1 en la bandera la borrará. Escribir un 0 no hará nada.
Sin embargo, si está usando avr-libc
y quiere tener dos (o más) vectores que tengan exactamente el mismo código, esto es posible. Utiliza alias de interrupción. Un ejemplo (de aquí ):
ISR(PCINT0_vect){
...
// Code to handle the event.
}
ISR(PCINT1_vect, ISR_ALIASOF(PCINT0_vect));
En este ejemplo, ambos PCINT0
y PCINT1
compartirán el mismo código de interrupción: ambas entradas en la tabla de vectores apuntarán a la misma función. Esto puede ser suficiente para sus necesidades.
avr-libc
/ avr-gcc
. Puede dar como resultado una sobrecarga adicional de registros adicionales que se empujan y abren, y también agrega una sobrecarga de las instrucciones call/ret. La creación de alias, si está disponible, es un método agradable y limpio que da como resultado una sobrecarga cero además de la rutina de interrupción original.
jimmyb