123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
-
-
-
-
- #include <inttypes.h>
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #include <avr/pgmspace.h>
- #include <stdio.h>
-
- #include "WConstants.h"
- #include "wiring_private.h"
-
- volatile static voidFuncPtr intFunc[EXTERNAL_NUM_INTERRUPTS];
-
-
- void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)
- {
- if(interruptNum < EXTERNAL_NUM_INTERRUPTS)
- {
- intFunc[interruptNum] = userFunc;
-
-
- EICRA &= ~(B00000011 << (interruptNum * 2));
-
-
- EICRA |= (mode << (interruptNum * 2));
-
-
- EIMSK |= (1 << interruptNum);
- }
- }
-
- void detachInterrupt(uint8_t interruptNum)
- {
- if(interruptNum < EXTERNAL_NUM_INTERRUPTS)
- {
-
- EIMSK &= ~(1 << interruptNum);
-
- intFunc[interruptNum] = 0;
- }
- }
-
- ISR(INT0_vect) {
- if(intFunc[EXTERNAL_INT_0])
- intFunc[EXTERNAL_INT_0]();
- }
-
- ISR(INT1_vect) {
- if(intFunc[EXTERNAL_INT_1])
- intFunc[EXTERNAL_INT_1]();
- }
-
- ISR(INT2_vect) {
- if(intFunc[EXTERNAL_INT_2])
- intFunc[EXTERNAL_INT_2]();
- }
-
-
|