Hi Folks

In the past I have handled peripheral interrupts by a simple vector into a
class public method:

ISR(TIMER0_OVF_vect)
{
    Timer0.OverflowInterrupt();
}

However, IMHO a more elegant C++ solution would be to define the interrupt
handler as a private function within the class. The listing below shows an
example. My problem is finding a way to have the compiler provide the link
from the interrupt table. The example works and can be tested by loading the
elf into AVRStudio, switch to the disassemble view to locate the
OverflowInterrupt entry point, and edit the program memory address for the
TIMER0 overflow interrupt.

Hardly practical, so can anyone suggest a declaration that would make this
link automatic within avr-gcc?

Regards, Ron

-----------------------
#include "Types.h"

#define TIMER0_OVERFLOW     0x01
#define TIMER0_TIMEOUT      100

volatile int Flags;

class cTimer0
{
public:
    //---------------------------------------------------------------
    cTimer0()
    {
        TCNT0 = TIMER0_TIMEOUT;
        TCCR0 = 0x06;
        TIMSK |= (1<<TOIE0);        // enable Timer0 timeout interrupt
        Flags &= ~TIMER0_OVERFLOW;
    }

    //---------------------------------------------------------------
    ~cTimer0()
    {
        TIMSK &= ~(1<<TOIE0);       // disable Timer0 timeout interrupt
    }

private:
    //---------------------------------------------------------------
    void OverflowInterrupt(void) __attribute__ ((signal, __INTR_ATTRS))
    {
        Flags |= TIMER0_OVERFLOW;   // indicate the event type
        TCNT0 = TIMER0_TIMEOUT;     // restart the timeout
    }
};

//--------------------------------------------------------------------------
---
//
int main(void)
{
    cTimer0     Timer0;

    sei();            // hello world
    while (TRUE)
    {
        if (Flags & TIMER0_OVERFLOW)
        {
            Flags &= ~TIMER0_OVERFLOW;
            // Action the event here...
        }
        .
        .
        .
    }

    return 0;
}






_______________________________________________
AVR-chat mailing list
AVR-chat@nongnu.org
http://lists.nongnu.org/mailman/listinfo/avr-chat

Reply via email to