Hur får man interrups att fungera på AVR?
Postat: 19 januari 2025, 14:52:36
Jag försöker att skriva ett program för en Arduino UNO i Arduino IDE utan att använda Arduinos inbyggda setup() och loop() funktioner. Men det verkar som att jag inte får några interrupts att inträffa, det känns som att jag glömt nått enkelt.
Jag har oscilloskop på PD4 och om jag lägger togglingen av pinnen direkt i while-loopen så togglas den, men om den ligger i "FastLoop" så togglas den inte. Att jag har två timers och två avbrott var för att felsöka ifall det var bara timer2(som jag tänkt använda) som inte fungerade.
Jag har även provat att inkludera <Arduino.h> men det hjälper inte.
Nån som ser nått uppenbart problem?
Jag har oscilloskop på PD4 och om jag lägger togglingen av pinnen direkt i while-loopen så togglas den, men om den ligger i "FastLoop" så togglas den inte. Att jag har två timers och två avbrott var för att felsöka ifall det var bara timer2(som jag tänkt använda) som inte fungerade.
Jag har även provat att inkludera <Arduino.h> men det hjälper inte.
Nån som ser nått uppenbart problem?
Kod: Markera allt
#include <avr/io.h>
#include <avr/interrupt.h>
#define fastloop 256
#define TestOut1 PD4 //D4
int FastLoopCounter = 0;
int main(void)
{
DDRD = (1 << TestOut1); //Set output pins
TCCR1B = (0 << CS12) | (1 << CS11) | (0 << CS10); //Prescale 8
TIMSK1 = (1 << TOIE1);
TCCR2B = (0 << CS22) | (0 << CS21) | (1 << CS20);
TIMSK2 = (1 << TOIE2);
sei();
while(1)
{
if(FastLoopCounter >= fastloop) //Timed loop 118Hz(236Hz)
{
PORTD = PORTD ^ (1 << TestOut1); //Toggle StepPin
FastLoopCounter = 0;
}
}
return 0;
}
ISR(TIMER1_OVF_vect)
{
FastLoopCounter++;
}
ISR(TIMER2_OVF_vect)
{
FastLoopCounter++;
}