реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> DBGU и PIT, проблема установки обработчиков
yura-w
сообщение Oct 18 2007, 07:16
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 22-06-07
Из: Санкт-Петербург
Пользователь №: 28 617



Подскажите пожалуйста:
использую 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);
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 18 2007, 07:27
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



PIT и DBGU используют один вектор прерывания - SYS. Вам нужно написать один общий обработчик.
Go to the top of the page
 
+Quote Post
yura-w
сообщение Oct 18 2007, 07:29
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 22-06-07
Из: Санкт-Петербург
Пользователь №: 28 617



Цитата(aaarrr @ Oct 18 2007, 11:27) *
PIT и DBGU используют один вектор прерывания - SYS. Вам нужно написать один общий обработчик.

Спасибо laughing.gif
Go to the top of the page
 
+Quote Post
yura-w
сообщение Apr 21 2008, 12:40
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 22-06-07
Из: Санкт-Петербург
Пользователь №: 28 617



Продолжение темы:
обрабатываю совместно прерывание 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.
Подскажите, пожалуйста, можно ли сделать обработку первым способом?
и если нельзя, почему?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 21 2008, 13:10
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Прочитал несколько раз, но мало что понял.

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

сделать в том же прерывании, в котором fPIT_DBGU устанавливается? Так конечно не будет работать.
Go to the top of the page
 
+Quote Post
yura-w
сообщение Apr 22 2008, 05:14
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 22-06-07
Из: Санкт-Петербург
Пользователь №: 28 617



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

спасибо, понял!
как-то я упустил из виду, что хочу в отработчик вложить обработку результатов повторного вызова этого же обработчика wacko.gif .
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 12:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01387 секунд с 7
ELECTRONIX ©2004-2016