Easyelectronics.ru

Электроника для всех
Текущее время: 23 апр 2018, 06:28

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Скоростной опрос датчиков на прерываниях.
СообщениеДобавлено: 13 мар 2018, 22:36 
Старожил

Зарегистрирован: 16 окт 2013, 01:27
Сообщения: 541
Проект запустил в производство, ну а решением теперь могу поделиться :)

Итак дано куча датчиков на портах (8 штук) скорость опроса превышает 10 кгц, причем могут включаться и выключаться в произвольном порядке.
долго игрался с разными решениями пока не пришел к такому обработчику прерывания.
EXTI->CR1 был настроен на "FALL down" & "Rise Up"

Все выводы настроены на прерывания.
Ну и вот что получилось:
Код:
INTERRUPT_HANDLER(EXTI_PORTC_IRQHandler, 5)
{
 
if (!(GPIOC->IDR & (u8)(GPIO_PIN_7))) {
         if (!flag_ch[0]) {elec_div[0]++; flag_ch[0]=1;}
         }
else {flag_ch[0]=0;}

if (!(GPIOC->IDR & (u8)(GPIO_PIN_6))) {
         if (!flag_ch[1]) {elec_div[1]++; flag_ch[1]=1;}
         }
else {flag_ch[1]=0;}         
   
if (!(GPIOC->IDR & (u8)(GPIO_PIN_5))) {
         if (!flag_ch[2]) {elec_div[2]++; flag_ch[2]=1;}
         }
else {flag_ch[2]=0;}   

if (!(GPIOC->IDR & (u8)(GPIO_PIN_3))) {
         if (!flag_ch[3]) {elec_div[3]++; flag_ch[3]=1;}
         }
else {flag_ch[3]=0;}   

if (!(GPIOC->IDR & (u8)(GPIO_PIN_4))) {
         if (!flag_ch[4]) {elec_div[4]++; flag_ch[4]=1;}
         }
else {flag_ch[4]=0;}

_asm("IRET");
}



В коде нет ничего сложного - пользуйтесь.

P\S
elec_div[ ] - это счетчики на сработку изменения состояния выводов (сработка датчика) в основной программе идет обработка данных и корреляция параметров установки.
flag_ch[] - флаг состояния вывода (защелка)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Скоростной опрос датчиков на прерываниях.
СообщениеДобавлено: 13 мар 2018, 23:11 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1465
Гкхм. Датчиков чего и куда датчиков? В том смысле, что че за интерфейс и че за датчики? По коду - вообще чето ниче не понятно, скорость там нифига не скоростная. Лучше читать состояние порта ЗА ОДИН РАЗ в промежуточную переменную, а потом уже разобрать в ней биты. Причем, лучше не использовать массив, ибо его индексация тоже дает накладные расходы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Скоростной опрос датчиков на прерываниях.
СообщениеДобавлено: 13 мар 2018, 23:26 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1279
По мне так просто набор букв.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB