Hi, I am experimenting with the avr embedded compiler from trunk and am trying to set an interrupt. I am not sure how to do it. The interrupt I want to change is TIMER0_COMPA_ISR.

I see in the startup code there is:
.weak TIMER0_COMPA_ISR

and later there is:
.set TIMER0_COMPA_ISR, Default_IRQ_handler

I have in my test project added a procedure:
procedure TIMER0_overflow; public name 'TIMER0_COMPA_ISR';
begin
  ToggleLED;
end;

OK I'll just include my test program. I am using an arduino duemilanove clone. I got most of the code from:
https://sites.google.com/site/qeewiki/books/avr-guide/timers-on-the-atmega328

Anyway there is no LED visible. I have verified using a delay in the main loop toggling the LED works.

What am I not doing, or doing wrong? And btw it's awesome that I can do anything at all on this controller!

Thanks,

Andrew

program test;
{$mode objfpc}{$H-}
{uses
  ATmega328P;}
const
  PIN13 = $20;
  WGM01 = 2;
  CS02 = 2;
procedure ToggleLED;
begin
  PORTB := PORTB xor PIN13;
end;

procedure TIMER0_overflow; public name 'TIMER0_COMPA_ISR';
begin
  ToggleLED;
end;

procedure TimerInit;
begin
  TIMSK0:= 1 shl TOIE0; // 1
  TCNT0:=0;
  TCCR0A := TCCR0A or 1 shl WGM01;
  TCCR0B := TCCR0B or 1 shl CS02; // 1 shl 2 = 4
  OCR0A:=$F9;

  TIMSK0:= TIMSK0 or 1 shl OCIE0A;
  asm
    sei;
  end;
end;

begin
  DDRB := DDRB or $FF;// PIN13;
  TimerInit;
  while True do
  begin
    asm
     nop;
    end;
  end;
end.
_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to