📄 extint02.c
字号:
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include "global.h"
#include "extint.h"
volatile static voidFuncPtr ExtIntFunc[EXTINT_NUM_INTERRUPTS];
void extintInit(void)
{
u08 intNum;
for(intNum=0; intNum<EXTINT_NUM_INTERRUPTS; intNum++)
extintDetach(intNum);
}
void extintConfigure(u08 interruptNum, u08 configuration)
{
if(interruptNum == EXTINT0)
{
MCUCR &= ~((1<<ISC01) | (1<<ISC00));
MCUCR |= configuration;
}
#ifdef SIG_INTERRUPT1
else if(interruptNum == EXTINT1)
{
MCUCR &= ~((1<<ISC11) | (1<<ISC10));
MCUCR |= configuration<<2;
}
#endif
#ifdef SIG_INTERRUPT2
else if(interruptNum == EXTINT2)
{
if(configuration == EXTINT_EDGE_RISING)
sbi(MCUCSR, ISC2);
else
cbi(MCUCSR, ISC2);
}
#endif
}
void extintAttach(u08 interruptNum, void (*userHandler)(void) )
{
if(interruptNum < EXTINT_NUM_INTERRUPTS)
{
ExtIntFunc[interruptNum] = userHandler;
}
}
void extintDetach(u08 interruptNum)
{
if(interruptNum < EXTINT_NUM_INTERRUPTS)
{
ExtIntFunc[interruptNum] = 0;
}
}
//! Interrupt handler for INT0
EXTINT_INTERRUPT_HANDLER(SIG_INTERRUPT0)
{
// if a user function is defined, execute it
if(ExtIntFunc[EXTINT0])
ExtIntFunc[EXTINT0]();
}
#ifdef SIG_INTERRUPT1
//! Interrupt handler for INT1
EXTINT_INTERRUPT_HANDLER(SIG_INTERRUPT1)
{
// if a user function is defined, execute it
if(ExtIntFunc[EXTINT1])
ExtIntFunc[EXTINT1]();
}
#endif
#ifdef SIG_INTERRUPT2
//! Interrupt handler for INT2
EXTINT_INTERRUPT_HANDLER(SIG_INTERRUPT2)
{
// if a user function is defined, execute it
if(ExtIntFunc[EXTINT2])
ExtIntFunc[EXTINT2]();
}
#endif
#ifdef SIG_INTERRUPT3
//! Interrupt handler for INT3
EXTINT_INTERRUPT_HANDLER(SIG_INTERRUPT3)
{
// if a user function is defined, execute it
if(ExtIntFunc[EXTINT3])
ExtIntFunc[EXTINT3]();
}
#endif
#ifdef SIG_INTERRUPT4
//! Interrupt handler for INT4
EXTINT_INTERRUPT_HANDLER(SIG_INTERRUPT4)
{
// if a user function is defined, execute it
if(ExtIntFunc[EXTINT4])
ExtIntFunc[EXTINT4]();
}
#endif
#ifdef SIG_INTERRUPT5
//! Interrupt handler for INT5
EXTINT_INTERRUPT_HANDLER(SIG_INTERRUPT5)
{
// if a user function is defined, execute it
if(ExtIntFunc[EXTINT5])
ExtIntFunc[EXTINT5]();
}
#endif
#ifdef SIG_INTERRUPT6
//! Interrupt handler for INT6
EXTINT_INTERRUPT_HANDLER(SIG_INTERRUPT6)
{
// if a user function is defined, execute it
if(ExtIntFunc[EXTINT6])
ExtIntFunc[EXTINT6]();
}
#endif
#ifdef SIG_INTERRUPT7
//! Interrupt handler for INT7
EXTINT_INTERRUPT_HANDLER(SIG_INTERRUPT7)
{
// if a user function is defined, execute it
if(ExtIntFunc[EXTINT7])
ExtIntFunc[EXTINT7]();
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -