Прерывание Arm7 Timer0 отлично работает только в симуляции - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь запустить механизм OSEK-Alarm на arm7 (lpc2292). При моделировании моего демонстрационного приложения с помощью uVision5 IDE все работает нормально. Но при выполнении кода на целевой платформе кажется, что прерывание происходит только один раз. К сожалению, я не могу подключить последовательный интерфейс к этой платформе для отладки ...

Эта функция вызывается из обработчика прерываний верхнего уровня, поскольку мне нужно встроить эту функциональность в ассемблерный код переключения контекста. Как можно видеть, флаг прерывания сбрасывается при каждом прерывании от таймера, которое настроено на запуск при совпадении счетчика с регистром совпадения 0; Больше. Это мой код, как я инициализирую счетчик, а также прерывания:

включение прерывания в VI C:

VICIntEnable |= (1 << TIMER0);

Настройка счетчика:

void initializeHardwareCounter(UINT32 ticktime_ns)       // ticktime 10^6 ns
{
  T0PR    = (SYS_CLOCK / (2 * ticktime_ns / 1000)) - 1;  // SysClk = 36MHz 
  T0MCR  |= (1 << 0) | (1 << 1);                         // Match MR0 and reset
  T0TC    = 0xFFFFFFFF;                                  // reset counter  
  T0TCR  |= (1 << 0);                                    // enable as counter
  T0MR0   = 0;                                           // match value
}

Было ли у кого-нибудь подобное поведение и есть идеи, где я могу ожидать проблемы?

Заранее спасибо

...