Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: не работает банально простой фрагмент
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > scmRTOS
nanorobot
На вход Input Capture поступат импульсы от детектора перехода через ноль сетевого напряжения. Цель - определть момен пропадания этого нпряжения. в процессе с наименьшим приоритетом выполняется
следующий фрагмент. Print() выводит на LCD значение счетчика. Счет в плюс выполняется с правильной частотой. Если перемыкаю выход оптрона детектора, счет останавливается, но счетчик не сбрасывается в 0,
как ожидалось. Частота системного тика близка к 1000 Гц. То есть wait() c ненулевым таймаутом ждет event бесконечно... ev_psync - поле класса, но полагаю, это не имеет значения...

Код
  
  bool ok;
  TIMSK= (1 << TICIE1);            // разрешим прерывания PSYNC

  while(1){
      ok = ev_psync.wait(10);
      if(ok){
        psync_cnt++;
        ev_psync.clear();                               // добавил на всякий случай, не помогло
      }
      else  psync_cnt = 0;
      Print();
  }


обработчик прерывания:

Код
OS_INTERRUPT void TIMER1_CAPT_vect()
{
  OS::TISRW_SS ISRW;
  ENABLE_NESTED_INTERRUPTS();
  cc.ev_psync.signal_isr();
}


переделал так:
Код
OS::sleep(10);
      ok = ev_psync.is_signaled();
      if(ok){
          ev_psync.clear();
          psync_cnt++;}
      else{
          psync_cnt = 0;}
      Print();


счета нет совсем. то есть опять таки ненулевой таймаут не отоабатывает
Сергей Борщ
А прерывание системного таймера вызывается?
nanorobot
Цитата(Сергей Борщ @ Jun 7 2017, 14:56) *
А прерывание системного таймера вызывается?

похоже я его запретил, когда разрешал прерывание от IC. посыпаю голову пеплом (надо было TIMSK |= (1 << TICIE1)wink.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.