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

 
 
> Множественные прерывания в TimerB, Выполняется только наиболее приоритетное, остальных будто нет
korobov_michael
сообщение Aug 20 2007, 20:06
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 11-03-07
Из: Украина, Харьков
Пользователь №: 26 059



День добрый.
Работаю с F148, хочу использовать два прерывания по захвату (CCR0 и CCR1), а также прерывание по переполнению. Все от TimerВ. Работаю в IAR.
Проблема в том, что если я разрешаю все три типа прерываний, то в обработчике, обрабатывающем прерывание CCR1 (TBIV == 0x02) и переполнения (TBIV == 0x0E) обрабатывается только наиболее приоритетное прерывание (CCR1). Второго контроллер будто не видит. Если отключить обработку CCR1, то переполнение обрабатывается нормально.
Может быть, мало курил документацию... но никто ли не сталкивался с подобным? Что можно сделать?
Огромное спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Aug 20 2007, 20:38
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Приведите фрагмент кода обработчика прерывания. Думаю там у вас ошибка в ветвлении. Для нормального ветвления по значению этого вектора нужно только один раз при входе в прерывание считывать TBIV, иначе каждое его чтение уменьшает вложенность количество запросов прерываний.
Пример.
Код
#pragma vector=TIMERB1_VECTOR
#pragma type_attribute=__interrupt
void TimerB1_ISR(void)
{ unsigned int reg;
  reg=TBIV;
  switch(reg)
  { case 0x02:
     // обработчик от TBCCR1
      break;
    case 0x0E:
    //обработчик прерывания от переполнения
      break;
    default: //все остальные не используем
      break;
  }
}

Ну и не следует забывать, что у таймераB два вектора прерываний. Один для TBCCR0, и второй для всех остальных.
Go to the top of the page
 
+Quote Post
korobov_michael
сообщение Aug 20 2007, 20:52
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 11-03-07
Из: Украина, Харьков
Пользователь №: 26 059



Код
// Timer_B7 Interrupt Vector (TBIV) handler
#pragma vector=TIMERB1_VECTOR
__interrupt void Timer_B1_6(void)
{
    switch( TBIV )
    {
    case  2:
        P1OUT ^= 0x01;//здесь ставится Breakpoint чтобы убедиться что попадаем
                        //по захвату
        break;
    case 14:
        P1OUT ^= 0x01;//здесь ставится Breakpoint чтобы убедиться что попадаем
                        //по переполнению
        break;
    }
}

// Timer_B7 Interrupt Vector (TBIV) handler
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B0(void)
{
    static unsigned char tmp = 0;
    tmp++;    //пока просто дабы убедиться что попадаем сюда
}


Вот примерно так. Реальные обработчики я заменил переключением ножки контроллера, дабы не захламлять код.
Про два вектора знаю. Учел. Прикол с однократным считыванием TBIV вроде тоже учел. Но проблема остается -- если разрешены все прерывания, то обрабатывается только наиболее приоритетное. Как только оно запрещается - обрабатывается следующее по приоритету - в моем случае обработчик переполнения
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- korobov_michael   Множественные прерывания в TimerB   Aug 20 2007, 20:06
- - rezident   Цитата(korobov_michael)если разрешены все прерыван...   Aug 20 2007, 21:19
- - korobov_michael   Цитата(rezident @ Aug 21 2007, 00:19) нес...   Aug 21 2007, 04:25
- - shasik   Цитата(korobov_michael @ Aug 21 2007, 07...   Aug 21 2007, 05:35
|- - korobov_michael   Цитата(shasik @ Aug 21 2007, 08:35) Плохо...   Aug 21 2007, 08:51
|- - korobov_michael   Вопрос в догонку. Я хочу запитать ACLK от 4МГц. Од...   Aug 21 2007, 10:01
||- - jorikdima   Цитата(korobov_michael @ Aug 21 2007, 14...   Aug 21 2007, 11:46
||- - rezident   Цитата(korobov_michael @ Aug 21 2007, 16...   Aug 21 2007, 13:48
|- - shasik   Цитата(korobov_michael @ Aug 21 2007, 11...   Aug 21 2007, 10:20
||- - korobov_michael   Цитата(shasik @ Aug 21 2007, 13:20) Когда...   Aug 21 2007, 12:53
||- - shasik   Цитата(korobov_michael @ Aug 21 2007, 15...   Aug 21 2007, 13:41
|- - exSSerge   Цитата(korobov_michael @ Aug 21 2007, 15...   Aug 21 2007, 15:22
|- - korobov_michael   Большое спасибо всем принявшим участие в обсуждени...   Aug 24 2007, 20:35
- - Dog Pawlowa   Цитата(korobov_michael @ Aug 21 2007, 07...   Aug 21 2007, 06:19


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

 


RSS Текстовая версия Сейчас: 12th August 2025 - 01:31
Рейтинг@Mail.ru


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