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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> stm32 вопрос по приоритетам прерываний
Nikitoc
сообщение May 26 2011, 10:39
Сообщение #16


Местный
***

Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367



Цитата(AHTOXA @ May 26 2011, 13:24) *
Это как это? В прерывании по приёму одного байта вычитываете несколько? Ждёте что ли их? Опрашиваете RXNE? Отключаете прерывание при этом?

Да, ожидаю RXNE. Прерывания не отключаю. Получаю строчку и выхожу.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 26 2011, 12:29
Сообщение #17


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Nikitoc @ May 26 2011, 16:39) *
Да, ожидаю RXNE. Прерывания не отключаю. Получаю строчку и выхожу.

Хм. Как-то это криво, не? А если первый символ - помеха? Да и глухо висеть в прерывании столько времени - не комильфо. Хотя дело ваше конечно.
Ну хорошо. А строчка-то приходит? Целиком?
Если так, то проблема скорее всего в лишней зачистке RXNE. Либо напрямую, либо при вычитывании DR. По идее, каждому новому RXNE должно соответствовать ровно одно чтение DR. Причём первый раз RXNE уже взведён при входе в прерывание.
Больше в голову ничего не приходит.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Nikitoc
сообщение May 26 2011, 14:01
Сообщение #18


Местный
***

Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367



Цитата(AHTOXA @ May 26 2011, 15:29) *
Хм. Как-то это криво, не?

Похоже, что Вы правы. Если просто сохранять символ в буфер, все работает. Но стоит во время работы обработчика поступить еще хотя бы одному символу - как прерывания прекращаются несмотря на все танцы с бубном. Но ведь должно же быть хоть какое-то логическое объяснение происходящему!

Сообщение отредактировал Nikitoc - May 26 2011, 14:02
Go to the top of the page
 
+Quote Post
mdmitry
сообщение May 26 2011, 14:20
Сообщение #19


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Не применительно к данному контроллеру, а по идеологии: прерывание вычитывает только один быйт и помещает его в буфер (скорее кольцевой). В основном потоке идет обработка принятых данных.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 26 2011, 14:35
Сообщение #20


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Nikitoc @ May 26 2011, 20:01) *
Но ведь должно же быть хоть какое-то логическое объяснение происходящему!

Мне тоже интересноsm.gif Давайте посмотрим на код HostProt_Parser()? (желательно упрощённый вариант, при котором ошибка ещё воспроизводится)
Ну или попробуйте сделать ещё один финт - перед каждым чтением DR вычитывайте SR. Это вычистит ошибки, может в них дело.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Nikitoc
сообщение May 28 2011, 14:11
Сообщение #21


Местный
***

Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367



Цитата(AHTOXA @ May 26 2011, 17:35) *
Давайте посмотрим на код HostProt_Parser()

В действительности там нет ничего особенного - я ожидаю RXNE, считываю байт-два оправляю строку в ответ и т.д.
После HostProt_Parser() - вычитываю SR - его значение 0x0280 - т.е. никаких ошибок, установлены только флаги CTS и TXE. И при этом дальнейших прерываний не происходит laughing.gif

Сообщение отредактировал Nikitoc - May 28 2011, 14:12
Go to the top of the page
 
+Quote Post
RusikOk
сообщение Dec 24 2016, 19:35
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 14-01-12
Пользователь №: 69 438




помогите понять в чем дело. выставляю приоритеты так. и в обработчик прерывания от UART системным таймером хоть убей не перебивается
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Dec 24 2016, 19:58
Сообщение #23


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



А вы не забыли вызвать NVIC_SetPriorityGrouping() ?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
RusikOk
сообщение Dec 24 2016, 20:00
Сообщение #24


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 14-01-12
Пользователь №: 69 438



Код
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_3);
не забыл
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Dec 26 2016, 12:58
Сообщение #25


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Я банальную вещь скажу, но либо это место в библиотеке не выполняется, либо поверх кто-то что-то пишет.
Проверяйте значения регистров (благо их немного совсем), потом выясняйте всю иерархию - кто, когда и откуда в них пишет.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post

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

 


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


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