Prubuję uruchomić taki program:
<code>#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
SIGNAL(SIG_OVERFLOW0) { PORTB = 0xff; PORTD = 0xff; __asm__ __volatile__ ("reti" ::); }
int main() { MCUCSR |= 0x80; MCUCSR |= 0x80; DDRA = 0xFF; DDRB = 0xFF; DDRC = 0xFF; DDRD = 0xFF; PORTB = 0x00; PORTD = 0x00; TCNT0 = 0x00; /* CTC; clk_IO/1024 (From prescaler) */ TCCR0 = 0 | (0 << WGM00) | (1 << WGM01) | (5 << CS00); /* 4194304Hz / (2 * 1024 * (1 + (OCR0)1)) = 1024Hz */ OCR0 = 1; /* Timer/Counter0 Output Compare Match Interrupt Enable */ TIMSK = 0 | (1 << OCIE0) | (0 << TOIE0); SREG |= (1 << SREG_I); while(1) { asm volatile("nop" ::); } return 0; }
</code>Niestety stan linii portu B i D nie zmienia się (pozostaje 0 na wszystkich liniach). Porty są sprawne, bo po umieszczeniu PORTB = 0xff i PORTD = 0xff w main() wszystko działa poprawnie (porty przechodzą w stan H).
Docelowo program ma podawać odpowiednio spreparowane dane z częstotliwością ok. 1000Hz (1024Hz jest ok). Utknąłem jednak w trakcie "odpalenia" przerwań.
Z góry dziękuję za wszelkie sugestie i informacje. Być może robię jakiś trywialny błąd, ale siędzę nad tym już od dłuższego czasu i brak mi pomysłów.
Pozdrawiam!