[fpc-devel] AVR embedded Atmega 328p interrupts
Andrew Haines
andrewd207 at aol.com
Sun Nov 29 23:35:29 CET 2015
On 11/29/2015 02:13 PM, Jeppe Johansen wrote:
> Not sure the timer initialization is right, but it looks ok.
>
> One thing you need is the interrupt procedure directive:
>
> procedure TIMER0_overflow; interrupt; public name 'TIMER0_COMPA_ISR';
>
> Otherwise it'll probably reset at some point.
>
Ok I got it to work. I have an interrupt:
procedure TIMER0_COMPA; noreturn; public name 'TIMER0_COMPA_ISR';
begin
ToggleLED;
end;
and the timer is setup with:
procedure TimerInit;
begin
TCCR0A := TCCR0A or (1 shl WGM01);
OCR0A := $F9;
TIMSK0 := TIMSK0 or (1 shl OCIE0A);
sei;
TCCR0B := TCCR0B or 5;//scale 5 = Clock / 1024
end;
The keywords "interrupt" or "noreturn" seem to have the same effect but
are mutually exclusive.
Without the interrupt or noreturn keyword, TIMER0_COMPA is only called
once and presumably a crash or infinite loop starts somewhere. ( return
is causing an error?)
With the interrupt or noreturn keyword and those timer settings, the led
blinks at the edge of human detection. Success!
Setting interrupts for TIMER0_COMPB and TIMER0_OVC have no effect; they
are never called. I'm probably not understanding some of how to
configure timers.
Regards,
Andrew
More information about the fpc-devel
mailing list