Я пытаюсь написать (довольно) базовый бит программного обеспечения для Attiny204, который обрабатывает прерывания, когда уровень входа тактового генератора слишком высок.
Когда я запускаю код в имитаторе отладки в Atmel Studioи установите входной сигнал высокого уровня, флаг прерывания не генерируется.Прерывания запускаются, когда я вручную создаю флаг прерывания.
Я пробовал использовать другие выводы и даже другой порт.Я не могу заставить симулятор генерировать флаг прерывания.
Раньше я использовал AtMega328P в симуляторе с эквивалентным кодом, и он отлично работает.
ISR(PORTA_PORT_vect)
{
//In this function we must:
//1. Shift all data up
shiftUp();
//2. Get new 8th bit
bit8 = VPORTA.IN & (1 << 1);
//3. Set Data Output Pin to bit0
if(bit0 == 0)
VPORTA.OUT &= ~(1 << 3);
else
VPORTA.OUT |= (1 << 3);
//4. Calculate new dimValue and dimMilliseconds
calcDim();
calcDelay();
}
int main(void)
{
initVariables();
/*
Below this, we must set the Data Direction (DD) of each pin we assigned.
*/
//Below, set the ISC of the Zero Cross Pin and the Clock Pin to allow interrupts
PORTA_PIN0CTRL |= 0b00000001; //Zero Cross
//PORTA_PIN1CTRL = 0b00000000; //Data In
//PORTA_PIN2CTRL = 0b00000000; //Data Next
//PORTA_PIN3CTRL = 0b00000000; //Triac Control
PORTB_PIN0CTRL |= 0b00000001; //Clock
//VPORTB.INTFLAGS |= 0b00000001;
//Set Port direction.
VPORTA.DIR = 0x30;
VPORTB.DIR = 0x00;
/*
Below this, we must enable interrupts.
*/
sei();
/* Replace with your application code */
while (1)
{
}
}