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

 
 
> GPIO прерывания Rising/Falling edge приходят одновременно?
evgen2
сообщение Jan 10 2014, 17:43
Сообщение #1


Местный
***

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



Есть дивайс для измерения температуры TMP03, с него идет ШИМ с частотой около 30 Гц.
Точнее - два дивайса. Выходы подаются на GPIO ноги, на которые можно назначить прерывания Rising/Falling edge. Микроконтроллер - lpc1768

Меряем одно время прихода Rising edge, меряем время прихода Falling edge, получаем два интервала времени, потом по формуле
Temp= CoeffSensorA + CoeffSensorB * td0 / dt1;

получаем температуру, и всё работает замечательно.

Только вот изредка меряется какая-то ерунда. Стал разбираться.

Сделал тест

Код
int TL[1000];
int TS[1000];
int tln=0;

void EINT3_IRQHandle(void)
{  int ti, v;
    static int tiold=0;
      ti = LPC_TIM1->TC;
        if((LPC_GPIOINT->IO0IntStatR &  0x00000001) || (LPC_GPIOINT->IO0IntStatF &  0x0000001)) // это ШИМ с первого TMP03
      { v = (LPC_GPIOINT->IO0IntStatR &  0x00000001) | (((LPC_GPIOINT->IO0IntStatF &  0x0000001)<<1));
        if(tln == 0)
             TL[tln] = ti;
        else
            TL[tln] = ti - tiold;
                tiold = ti;
        TS[tln] =v;  
        tln++;        
        if(tln == 1000)
           tln = 0;
                LPC_GPIOINT->IO0IntClr =0x00000001;
    }
       if((LPC_GPIOINT->IO0IntStatR &  0x00000002) || (LPC_GPIOINT->IO0IntStatF &  0x0000002)) // это ШИМ с второго TMP03
      {
          LPC_GPIOINT->IO0IntClr =0x00000002;
      }    
}


Смотрю на TS и вижу вот такое:

1
2
1
2
3 <== этого не может быть, потому что не может быть никогда
2
1
2
1

Т.е. одновременно приходит и Rising м Falling edge
причем, если смотреть на TL - никакого дребезга с небольшими временами не видно.
Одновременно Rising и Falling (3) получаются вроде бы точно вместо Rising (1), но это на небольшом интервале измерения. Причем, если Rising и Falling одновременно считать за Rising, то смотри начало - все меряется замечательно, кроме как изредка какая-то фигня. Причем эта фигня систематическая и не лечится усреднением. Связано ли это как-то с одновременным приходом Rising м Falling edge - пока неясно.

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

Сообщений в этой теме
- evgen2   GPIO прерывания Rising/Falling edge приходят одновременно?   Jan 10 2014, 17:43
- - Golikov A.   а сколько времени между падающим и восходящим? пре...   Jan 10 2014, 19:09
|- - alexdos   Цитата(Golikov A. @ Jan 10 2014, 22:09) а...   Jan 10 2014, 19:20
|- - Сергей Борщ   Цитата(alexdos @ Jan 10 2014, 21:20) Напл...   Jan 10 2014, 21:00
|- - evgen2   Цитата(Сергей Борщ @ Jan 11 2014, 01:00) ...   Jan 10 2014, 21:09
- - jcxz   А где у вас чтение IOIntStatus для квитирования пр...   Jan 11 2014, 16:14
|- - evgen2   Цитата(jcxz @ Jan 11 2014, 20:14) А где у...   Jan 11 2014, 16:22
||- - jcxz   Цитата(evgen2 @ Jan 11 2014, 22:22) Чего-...   Jan 11 2014, 16:25
|- - evgen2   Цитата(jcxz @ Jan 11 2014, 20:14) Уж не и...   Jan 11 2014, 16:38
|- - jcxz   Цитата(evgen2 @ Jan 11 2014, 22:38) и что...   Jan 11 2014, 17:13
|- - evgen2   Цитата(jcxz @ Jan 11 2014, 21:13) Я же уж...   Jan 11 2014, 17:42
|- - jcxz   Просто прочитать этот регистр. Чтение его - это и ...   Jan 11 2014, 18:10
|- - evgen2   Цитата(jcxz @ Jan 11 2014, 22:10) Просто ...   Jan 11 2014, 19:31
|- - evgen2   Цитата(jcxz @ Jan 11 2014, 22:10) Просто ...   Jan 13 2014, 16:26
- - evgen2   Пока резюме такое: Пока не включаю I2C2 никакой п...   Jan 22 2014, 13:26
- - KRS   Попробуйте в начале прерывания считать статусы Int...   Jan 22 2014, 18:35


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

 


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


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