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

 
 
> повторные прерывания LPC17xx
evgen2
сообщение Jan 14 2014, 23:32
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688



Вот похожая тема В прерываниях CM0/CM3 в конце нужен ClearPending?

Имеем такой простой до невозможности код
Код
/* таймер T2  25 МГц */
   LPC_TIM2->MR0 = 782/2;           // 782 = 32 кHz
   LPC_TIM2->MCR = 3;                
   LPC_TIM2->TCR=  0x01;
   NVIC_EnableIRQ(TIMER2_IRQn);

void TIMER2_IRQHandler(void)
{    static int raz=0;
     if(raz == 0)
     {  LPC_GPIO2->FIOSET = 0x1000;raz = 1;
     } else {
       LPC_GPIO2->FIOCLR = 0x1000; raz = 0;
   }
    LPC_TIM2->IR = 1; // Clear interrupt flag
}


смотрим осциилографом, что получается:

___|___|___|___

Или наоборот

— — |— — |— — |— —

Вместо ожидаемого — — |___|— — |___|— — |___

При этом, если поставить брякпойнт на FIOSET или FIOCLR, а потом убрать и продолжить, то картина меняется
если мерять время этого второго паразита, то это будет 12-14 клоков
Однако, если перенести IR = 1; в начало
Код
void TIMER2_IRQHandler(void)
{    static int raz=0;
      LPC_TIM2->IR = 1; // Clear interrupt flag
     if(raz == 0)
     {  LPC_GPIO2->FIOSET = 0x1000;raz = 1;
     } else {
       LPC_GPIO2->FIOCLR = 0x1000; raz = 0;
   }
}


То все налаживается....

Теперь смотрю на все остальные прервывания, в том числе GPI прерывания GPIO прерывания Rising/Falling edge приходят одновременно? (2 ноги * прерывания по фронту и спаду) - там тоже получается какое-то левое повторное прерывание.. однако манипуляции с выносом очистки прерывания как можно раньше не прокатывают и, кажется, наоборот, от выноса очистки в конец количество левых прерываний уменьшается

ЗЫ: а в эмуляторе это не вылазит

Сообщение отредактировал evgen2 - Jan 15 2014, 00:07
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- evgen2   повторные прерывания LPC17xx   Jan 14 2014, 23:32
- - _Артём_   Цитата(evgen2 @ Jan 15 2014, 01:32) Вот п...   Jan 14 2014, 23:50
- - Сергей Борщ   Цитата(evgen2 @ Jan 15 2014, 01:32) То вс...   Jan 15 2014, 07:54
|- - evgen2   Цитата(Сергей Борщ @ Jan 15 2014, 11:54) ...   Jan 15 2014, 09:41
|- - Сергей Борщ   Цитата(evgen2 @ Jan 15 2014, 11:41) ...   Jan 15 2014, 09:50
|- - evgen2   Цитата(Сергей Борщ @ Jan 15 2014, 13:50) ...   Jan 15 2014, 18:33
- - Aleksandr Baranov   Due to the processor pipeline, the Cortex-M proces...   Jan 15 2014, 22:32
|- - jcxz   Цитата(Aleksandr Baranov @ Jan 16 2014, 04...   Jan 16 2014, 06:48
- - swisst   Доброго дня ! на контроллере 1768 с MC0 и тайм...   Jan 16 2014, 09:55
|- - jcxz   1. Вот потому, что "дальше код", потому ...   Jan 16 2014, 10:48
|- - swisst   Цитата(jcxz @ Jan 16 2014, 12:48) 1. Вот ...   Jan 16 2014, 12:30
- - sidy   Допустим, у меня есть следующий обработчик прерыва...   Jan 16 2014, 16:13
|- - jcxz   Цитата(sidy @ Jan 16 2014, 22:13) нужно л...   Jan 16 2014, 16:54
|- - sidy   Цитата(jcxz @ Jan 16 2014, 20:54) Скажем ...   Jan 16 2014, 17:18
|- - jcxz   Как же можно ответить ответить на Ваш вопрос, если...   Jan 16 2014, 18:24
|- - sidy   Цитата(jcxz @ Jan 16 2014, 22:24) Как же ...   Jan 16 2014, 18:57
|- - jcxz   Только в LPC флаги прерываний квтируются не запись...   Jan 16 2014, 19:39
|- - sidy   Цитата(jcxz @ Jan 16 2014, 23:39) И опять...   Jan 16 2014, 19:44
- - Golikov A.   это стандартная ошибка при сбросах флагов REG |= ...   Jan 17 2014, 07:06
- - sidy   Понял, т.е. мы прочитали, изменили, записали в рег...   Jan 17 2014, 07:33
|- - Сергей Борщ   Цитата(sidy @ Jan 17 2014, 09:33) Т.е. оп...   Jan 17 2014, 10:50
|- - Golikov A.   Цитата(Сергей Борщ @ Jan 17 2014, 14:50) ...   Jan 17 2014, 20:17
- - Golikov A.   скорее так REG&=~FLAG => REG=REG&(~FLA...   Jan 17 2014, 10:18


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

 


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


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