Перейти к содержанию
    

GD32F103RBT6. Пропуск прерываний в режиме захвата

Внимательно читайте документацию. Биты флагов помечены как rc_w0

К сожалению китайцы не описали, что это значит,

но в документации STM сказано "read/clear (rc_w0) Software can read as well as clear this bit by writing 0. Writing ‘1’ has
no effect on the bit value."

Я поступаю так: 

  if(TIMER_INTF(TIMER1) & TIMER_INTF_CH0IF )
    {    
        TIMER_INTF(TIMER1) = ~TIMER_INTF_CH0IF;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

29 minutes ago, dOb said:

Внимательно читайте документацию. Биты флагов помечены как rc_w0

К сожалению китайцы не описали, что это значит,

но в документации STM сказано "read/clear (rc_w0) Software can read as well as clear this bit by writing 0. Writing ‘1’ has
no effect on the bit value."

Я поступаю так: 

  if(TIMER_INTF(TIMER1) & TIMER_INTF_CH0IF )
    {    
        TIMER_INTF(TIMER1) = ~TIMER_INTF_CH0IF;

 

ОК. Не спорю. Код переписал. Проблема не ушла.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, LAS9891 сказал:

Только никому не говорите из какой pdf вы это взяли.

image.thumb.png.6c020878e4974937b0c742148293495b.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

image.thumb.jpeg.f4d06d973329ab8c36ffe6668ece8758.jpeg

Так пропуск прерываний выглядит на осциллографе.

Жёлтый - источник сигнала. 

Голубой - пин микроконтроллера -> вход канала 3 в Timer1.

Розовый - пин микроконтроллера. Пин настроен на выход и меняет своё значение на противоположное в обработчике прерывания каждый раз при обработке этого прерывания.

Большинство таких пакетов совпадает бит в бит, но бывают и такие как на картинке. Из пакетов с пропусками, чаще пропущено 1 и 2 фронта/среза. На картинке самый неудачный случай из полученных.

 

Изменено пользователем LAS9891

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/13/2024 at 4:48 PM, LAS9891 said:

Розовый - пин микроконтроллера. Пин настроен на выход и меняет своё значение на противоположное в обработчике прерывания каждый раз при обработке этого прерывания.

Измерьте с помощью этого пина время обработки прерывания.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, LAS9891 сказал:

Но это не решило проблему.

Вы учли то, о чём я писал в: 

?

Если нет, то спады/фронты будут теряться обязательно. Вроде как это очевидно.  :unknw:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 hours ago, jcxz said:

Вы учли то

Я учёл, но что с этим делать не знаю. Как это сделать правильно? Подозреваю предложите ловить фронты каналом 0, а срезы ловить каналом 1. Такое решение сократит функционал платы вдвое.

Есть ещё идея в обработчике прерывания проверять значение захвата и если оно меньше минимального (ширина минимально допустимого импульса известна), то не учитывать его, и полярность не менять.

Уточнение: ранее проект жил на STM32F072. Там для таймера в режиме захвата можно выбрать режим: noninverted/both edges. Circuit is sensitive to both TIxFP1 rising and falling edges. И там проблемы смены полярности не было.

Изменено пользователем LAS9891

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/13/2024 at 7:25 PM, jcxz said:

Если нет, то спады/фронты будут теряться обязательно. Вроде как это очевидно.  :unknw:

Но не шесть фронтов подряд.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, LAS9891 said:

Есть ещё идея в обработчике прерывания проверять значение захвата и если оно меньше минимального (ширина минимально допустимого импульса известна), то не учитывать его, и полярность не менять.

Идея дохлая. Попробовал поймать поймать длительность импульса меньше минимальной в отладке. Не поймал, пропуски фронтов присутствуют.

Попробовал менять полярность в самом начале обработчика прерывания (раньше было в самом конце) - без изменений.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 hours ago, dimka76 said:

Измерьте с помощью этого пина время обработки прерывания.

Жёлтый - источник сигнала. 

Голубой - пин микроконтроллера -> вход канала 3 в Timer1.

Розовый - пин микроконтроллера. Пин настроен на выход и меняет своё значение в начале обработчика прерывания и в конце.

photo_2024-02-14_09-49-06.thumb.jpg.add67e219c8f8193c9392f184962a95c.jpg

 

Вот картинки крупнее:

photo_2024-02-14_09-49-16.thumb.jpg.a3006da10a6904687a6ae20d30165a45.jpgphoto_2024-02-14_09-49-10.thumb.jpg.56efe1a848814ab5aebd682bd96abd95.jpgphoto_2024-02-14_09-49-13.thumb.jpg.e1ade4a659943af06d7ed8535dc612aa.jpg

 

Длительность импульса и, я полагаю, время обработки прерывания составляет 1,6857 us.

Изменено пользователем LAS9891

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/14/2024 at 9:53 AM, LAS9891 said:

Розовый - пин микроконтроллера. Пин настроен на выход и меняет своё значение в начале обработчика прерывания и в конце.

Вот видите, у вас прерывание срабатывает на каждый фронт входной последовательности.

Периферия отрабатывает четко.

А почему у вас тогда на предыдущей осцилограмме пропуски были видны ? 

Вот тут

Quote

Розовый - пин микроконтроллера. Пин настроен на выход и меняет своё значение на противоположное в обработчике прерывания каждый раз при обработке этого прерывания.


Значит ошибка у вас чисто программная, алгоритмическая.

И фронты у вас какие уж больно пологие.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 minutes ago, dimka76 said:

Вот видите, у вас прерывание срабатывает на каждый фронт входной последовательности.

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

Изменено пользователем LAS9891

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...