Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: DBGU и PIT, проблема установки обработчиков
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
yura-w
Подскажите пожалуйста:
использую IAR, столкнулся с проблемой установки обработчиков на DBGU и PIT в at91sam7x.
Могу установить (работает в железе) обработчик отдельно на DBGU, могу отдельно на PIT,
но когда устанавливаю их вместе, то обработчик DBGU перестает работать
в программе сначала устанавливаю дбгу затем по мере надобности пит (приоритетность разная).
делаю так:

AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_SYS, USART_SYS_LEVEL, AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, DBGU_irq_handler);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_SYS);


//* Init Real Time Timer
AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_SYS, RTTC_INTERRUPT_LEVEL, AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE, Periodic_Interval_Timer_handler);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_SYS);
aaarrr
PIT и DBGU используют один вектор прерывания - SYS. Вам нужно написать один общий обработчик.
yura-w
Цитата(aaarrr @ Oct 18 2007, 11:27) *
PIT и DBGU используют один вектор прерывания - SYS. Вам нужно написать один общий обработчик.

Спасибо laughing.gif
yura-w
Продолжение темы:
обрабатываю совместно прерывание pit и dbgu:
Код
void DBGU_irq_handler(void)
{
  unsigned int status;

  if((AT91C_BASE_PITC->PITC_PISR & AT91C_PITC_PITS))
  {
    fPIT_DBGU = 1;
    // подтвердить обработку прерывания
    status = AT91C_BASE_PITC->PITC_PIVR;
    // подавить предупреждение компилятора/оптимизатора
    status = status;
  }
  else
  {..........
  }

работают отдельно обработки прерываний dbgu и pit. с флагом pit работаю так:
Код

while(!fPIT_DBGU)
    {...}
    fPIT_DBGU = 0;
    ....

потребовалось перенести обработку флага pit
в ф-ию обработки вызываемой прерыванием dbgu, сразу перестал формироваться fPIT_DBGU = 1!
Решил проблему так:
обрабатка dbgu, формирую флаг, затем по флагу обрабатываю pit.
Подскажите, пожалуйста, можно ли сделать обработку первым способом?
и если нельзя, почему?
aaarrr
Прочитал несколько раз, но мало что понял.

Вы пытаетесь это -
Код
while(!fPIT_DBGU)
    {...}
    fPIT_DBGU = 0;
    ....

сделать в том же прерывании, в котором fPIT_DBGU устанавливается? Так конечно не будет работать.
yura-w
Цитата
cделать в том же прерывании, в котором fPIT_DBGU устанавливается? Так конечно не будет работать.

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