Цитата(Vitaliy_ARM @ May 22 2008, 11:07)

Ошибка таже:
Error[Pa073]: invalid type conversion (from "__code __interwork void ()" to "DWORD*")
Странная ошибка. он должен был ругаться на конвертацию адреса функции-члена в указатель, а он ругается на нее как на обычную функцию. Дело в том, что при вызове функции-члена первым параметром неявно передается указатель на объект. Прерывание не может передать этот указатель. Поэтому, или обработчик должен быть статической функцией-членом (которой не нужен this) или надо написать обычную функцию как обертку:
Код
__arm void TIMER1_Isr_wrapper()
{
TIMER1.Isr(); // Тут мы явно указываем передать адрес TIMER1 как this
}
OpenIsr(TIMER1,(DWORD*)TIMER1_Isr_wrapper,HIGH_PR); // определяем обработчик прерывания
при этом функцию-член-обработчик лучше сделать встраиваимой.
Чтобы было легче понять: Вы объявили 5 экземпляров этого класса (TIMER1, TIMER2, ... TIMER5). Попав в ваш _TIMER::Isr(), откуда он будет знать, какой конкретно из этих 5 таймеров надо обрабатывать? И при инициализации ваш _TIMER:Init() настраивает только первый таймер, а как настраивать остальные? Если вы пишете этот класс под один конкретный таймер, то можно все функции-члены и данные-члены сделать статическими, но тогда появится неудобство - придется явно заводить каждый статический член-данное.
Ой... Вы же передаете TIMER1 в OpenIsr. Видимо где-то дальше оно у вас используется для вызова обработчика. Тогда про статическое не читайте, почитайте это:
указатель на функцию-член. И покажите объявление (а лучше и текст) OpenIsr()