Jag försöker implementera en funktion som orsakar ett avbrott en gång varje millisekund. Detta körs på en ATMega168 som arbetar med frekvensen 18,432 MHz. Så långt inga konstigheter.
Så här ser min kod ut:
Kod: Markera allt
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include "../bits.h"
int main (void) {
// Sätt alla IO-portar till utgångar, logiknivå hög
DDRB = 0xFF;
DDRC = 0xFF;
DDRD = 0xFF;
PORTB = 0xFF;
PORTC = 0xFF;
PORTD = 0xFF;
// Väck logikanalysator
PORTC = 0x00;
_delay_ms(1);
PORTC= 0xFF;
// Ställ in TIMER1 för 1ms-interrupts
TCCR1B |= (1<<WGM12) | (1<<CS10);
TIMSK1 |= (1<<OCIE1A);
TCNT1 = 0;
OCR1A = 18432;
sei();
while(1) {
asm volatile("nop" "\n\t");
asm volatile("nop" "\n\t");
}
}
SIGNAL(TIMER1_COMPA_vect) {
PORTB = 0x00;
_delay_us(10);
PORTB = 0xFF;
}

Båda signalerna är periodiska med 2 ms.
Jag tycker inte att detta stämmer alls med vad jag bett processorn att göra, men troligtvis har jag missat något/tänkt fel. Frågan är bara vad.
Tack på förhand!