Код
int main()
{
// Initialise
ACSR = (1<<ACD); // Analog Comparator Disable
.................
PORTE = (1<<KEY_INT); // INT6 -> input, pull-up - ON
key_Init();
__enable_interrupt(); // set the Global Interrupt Enable Bit
.....................................
///////////////////////////////////////////
#define ENABLE_INT6 {EIFR |= (1<<INTF6); EIMSK |= (1<<INT6);}// Clear interrupt status flag, Enable external interrupt INT6
#define DISABLE_INT6 EIMSK &= ~(1<<INT6) // Disable external interrupt INT6
void key_Init(void)
{
/* Init ports */
KEYMATRIX_DDR = 0x0f; // Set row lines to input, Set column lines to output
KEYMATRIX_PORT = 0xf0; // Pull row lines high, Drive all column lines low
/* Enable external interrupt */
ENABLE_INT6; // Enable pin change interrupt INT6
}
{
// Initialise
ACSR = (1<<ACD); // Analog Comparator Disable
.................
PORTE = (1<<KEY_INT); // INT6 -> input, pull-up - ON
key_Init();
__enable_interrupt(); // set the Global Interrupt Enable Bit
.....................................
///////////////////////////////////////////
#define ENABLE_INT6 {EIFR |= (1<<INTF6); EIMSK |= (1<<INT6);}// Clear interrupt status flag, Enable external interrupt INT6
#define DISABLE_INT6 EIMSK &= ~(1<<INT6) // Disable external interrupt INT6
void key_Init(void)
{
/* Init ports */
KEYMATRIX_DDR = 0x0f; // Set row lines to input, Set column lines to output
KEYMATRIX_PORT = 0xf0; // Pull row lines high, Drive all column lines low
/* Enable external interrupt */
ENABLE_INT6; // Enable pin change interrupt INT6
}
Выяснилось, что не вызывается обработчик прерывания INT6. Проверяю по звуковому сигналу BEEP.
В симуляторе в AVRSTUDIO тоже прогнал - не вызываются прерывания: ни по низкому уровню, ни по фронтам (заднему и переднему). АЦП (PORTF) не использую. В чем дело?
PS. Схему и код выкладываю, чтобы не возникало лишних вопросов.