Алексей ВМ1 1 18 июня, 2023 Опубликовано 18 июня, 2023 (изменено) · Жалоба Добрый день Необходимо измерить период входного сигнала, для этого для таймера задается режим input capture mode. Чтобы было удобно считать период, этот таймер загоняется в slave mode reset mode, по входному сигналу значение счетчика сохраняется в регистр, а сам счетчик сбрасывается. Все работает, но есть нюанс - наряду с флагом CC1IF выставляется флаг UIF, при этом период сигнала меньше периода таймера, то есть физически переполнения таймера быть не может. Вопрос - по какой причине выставляется UIF? Изменено 18 июня, 2023 пользователем Алексей ВМ1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 37 18 июня, 2023 Опубликовано 18 июня, 2023 · Жалоба "Подопытный" не обозначен, по сему будем по RefMan STM32F101..107 RM0008 rev16: стр. 410 UIF: Update interupt flag - this bit set by hardware on an update event... ну и дальше три причины. CNT обновился? PS: смущает UIF - не разрешайте прерывание от него и "всех делов". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 18 июня, 2023 Опубликовано 18 июня, 2023 · Жалоба 4 минуты назад, Obam сказал: PS: смущает UIF - не разрешайте прерывание от него и "всех делов". Но если прерывание от переполнения все-таки нужно? Тогда читаем чуть раньше: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 37 18 июня, 2023 Опубликовано 18 июня, 2023 · Жалоба Но если прерывание от переполнения все-таки нужно? А тут моя "телепатилка" выдохлась, (((-8Ж угадывать кого ТС "имеет" - это даже тяжелее чем "мешки ворочать" (((-8Ж Да и чтение доки вслух online не педагогично (((-8Ж PS: все необходимые прерывания - обрабатывать! Ну 2 * 2 == 4, "мойте руки, перед и зад едой" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ1 1 20 июня, 2023 Опубликовано 20 июня, 2023 (изменено) · Жалоба Контроллер - stm32mp157. Прерывание UEV нужно, на нем строится логика отслеживания пропадания сигнала. CNT сбрасывается аппаратно по входному сигналу, таймер в slave mode. Выходит, причина генерации UEV - это сброс таймера, но не по переполнению счетчика? The update event can be generated at each counter overflow and at each counter underflow or by setting the UG bit in the TIMx_EGR register (by software or by using the slave mode controller) also generates an update event. Таймер сконфигурирован таким образом Particular case To facilitate the input capture measurement, the timer counter is reset after each rising edge detected on the timer input channel by: • Selecting TIxFPx as the input trigger by setting the TS bits in the SMCR register • Selecting the reset mode as the slave mode by configuring the SMS bits in the SMCR register. Using this configuration, when an edge is detected, the counter is reset and the period of the external signal is automatically given by the value on the CCRx register. This method is used only with channel 1 or channel 2. TIMx_SMCR SMS[3:0]: Slave mode selection When external signals are selected the active edge of the trigger signal (TRGI) is linked to the polarity selected on the external input (see Input Control register and Control Register description. ... 0100: Reset Mode - Rising edge of the selected trigger input (TRGI) reinitializes the counter and generates an update of the registers ... TIMx_CR2 MMS[2:0]: Master mode selection These bits allow selected information to be sent in master mode to slave timers for synchronization (TRGO). The combination is as follows: 000: Reset - the UG bit from the TIMx_EGR register is used as trigger output (TRGO). If the reset is generated by the trigger input (slave mode controller configured in reset mode) then the signal on TRGO is delayed compared to the actual reset. То есть цепочка такая - по входному сигналу сбрасывается счетчик, выставляется бит UG bit from the TIMx_EGR, генерится UEV , возникает прерывание? Хотя про UG написано, что он устанавливается программно TIMx_EGR Bit 0 UG: Update generation This bit can be set by software, it is automatically cleared by hardware. 0: No action 1: Reinitialize the counter and generates an update of the registers. The prescaler internal counter is also cleared (the prescaler ratio is not affected). The counter is cleared if the center-aligned mode is selected or if DIR=0 (upcounting), else it takes the auto-reload value (TIMx_ARR) if DIR=1 (downcounting). Ответ на вопрос лежал на поверхности, благодарю. TIMx_SR Bit 0 UIF: Update interrupt flag This bit is set by hardware on an update event. It is cleared by software. 0: No update occurred 1: Update interrupt pending. This bit is set by hardware when the registers are updated: At overflow or underflow (for TIM2 to TIM4) and if UDIS=0 in the TIMx_CR1 register. When CNT is reinitialized by software using the UG bit in TIMx_EGR register, if URS=0 and UDIS=0 in the TIMx_CR1 register. When CNT is reinitialized by a trigger event (refer to the synchro control register description), if URS=0 and UDIS=0 in the TIMx_CR1 register. Теперь вопрос, как тогда отслеживать пропадание сигнала в этом режиме таймера. PS Уведомления об ответах не приходили, странно... Изменено 20 июня, 2023 пользователем Алексей ВМ1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 20 июня, 2023 Опубликовано 20 июня, 2023 · Жалоба 7 часов назад, Алексей ВМ1 сказал: Теперь вопрос, как тогда отслеживать пропадание сигнала в этом режиме таймера. В 19.06.2023 в 00:54, Сергей Борщ сказал: Но если прерывание от переполнения все-таки нужно? Тогда читаем чуть раньше: Поставить URS = 1? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ1 1 20 июня, 2023 Опубликовано 20 июня, 2023 · Жалоба 1 час назад, Сергей Борщ сказал: Поставить URS = 1? Гениально, благодарю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться