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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> stm32F429 и прерывание от таймера
zorromen
сообщение Jul 24 2015, 07:15
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Ну принудительное обновления, я как раз и реализовал, а что такое штатная работа, это когда все на оборот, странно такой фигни например не помню когда програмил AVR и lpc2148.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 24 2015, 08:35
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Ну принудительное обновления, я как раз и реализовал, а что такое штатная работа, это когда все на оборот, странно такой фигни например не помню когда програмил AVR и lpc2148.

В АВР вроде не было, а в LPC кажется были буферные регистры

у вас длина импульсов не съезжает от принудительных обновлений?
Go to the top of the page
 
+Quote Post
zorromen
сообщение Jul 24 2015, 10:15
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



То будет не критично, вообще еще дурной вопрос.
Нужно будет ловить импульс ответа, и измерить его длину, тут особых проблем не обнаружил, но реализация несколько смущает.
Настройка порта на внешнее прерывание, тут настроил на передний фронт, но в самом прерывании после получения переднего фронта перенастраиваю на задний фронт. Сперва делал чтобы прерывание было от обоих фронтов сразу, но зайдя в прерывание тогда не получалось понять какой именно фронт его вызвал, почему-то чтение пина всегда возвращало 0. Сам импульс около 10 mS. Поэтому решил делать с переключением в прерывании.
Код
  /*Configure GPIO pin : PE2 */
  GPIO_InitStruct.Pin = GPIO_PIN_2;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

  /* EXTI interrupt init*/
  HAL_NVIC_SetPriority(EXTI2_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(EXTI2_IRQn);


Код
void EXTI2_IRQHandler(void)
{    
    if ((EXTI->RTSR >> 2) & 1)
        {
                        ...........
            EXTI->RTSR = 0;    //Otkl rising
            EXTI->FTSR = 0x4; //Vkl Filling
        }
        else
        {
                        ...........
         EXTI->RTSR = 4; //Vkl rising
         EXTI->FTSR = 0; //Otkl Filling
        }
    
    EXTI->PR |=0x04;
}
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 24 2015, 10:23
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Нужно будет ловить импульс ответа, и измерить его длину, тут особых проблем не обнаружил, но реализация несколько смущает.

иногда таймеры сами умеют это делать, запускаются по переднему фронту, капчат по заднему, дергуют вас только чтобы сказать ответ, но как вы сделали тоже можно...

почему порт возвращал всегда ноль не понятно, наверное не настроено что-то было

Цитата
То будет не критично,

не факт что будет съезжать, зависит от того как реализовано обновлением, докручиванием счетчика таймера до конца, или просто обновлением без изменения счетчика...
в "штатном" или "все наоборот" режиме точно не будет съезжать как бы ни было реализовано... и джитер входа в прерывание не будет влиять, а тут хз...
Go to the top of the page
 
+Quote Post

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

 


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


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