Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Инициализация векторов прерывания
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
toweroff
Что-то запутался совсем...

Нужно инит IRQ. Итак, по шагам:

0. Адрес IRQ_exeption инитится вот таким:
Код
void __irq IRQ_Exception( void )
{
  U32 regVal, index;
  HandlerAddr irqHandler;

  regVal = INT_VECTOR_1;
  index = regVal >> 3;
  if ( index == 0 )
  {
    /* no-interrupt handler for IRQ */
    return;
  }
  irqHandler = IRQ_VectorTable[index].Isr;
  (*irqHandler)();
  return;
}

1. Заносим в секции Reset таблицу (располагается в RW) в INT_VECTOR_1
2. Инитим таблицу нулями
3. Маска приоритетов = 0
4. инициализация всяких клоков, flash и GPIO (без фанатизьму, частота ядра 120МГц)
5. Устанавливаем прерывание для таймера0 (заносим в таблицу прерываний по смещению 2*2 адрес и приоритет)
6. Включаем прерывание таймера 0 (TIM0_INT_SET_ENABLE = 1;) и стартуем его
7. Прога выполняется

Настройка таймера корректна, проверялось на "родном" стартапе
Но в ту самую IRQ_Exception так и не попадаю

Что я мог упустить ?
aaarrr
Цитата(toweroff @ Aug 2 2011, 00:26) *
Что я мог упустить ?

Глобальное разрешение IRQ, например.
toweroff
Цитата(aaarrr @ Aug 2 2011, 00:31) *
Глобальное разрешение IRQ, например.

включено

Индусы сволочи... как они тестят (и оно вообще есть?) свой софт...

Код
index = regVal >> 3;


а кто оттуда уберет старшую часть, которая содержит адрес таблицы sad.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.