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

 
 
6 страниц V  « < 4 5 6  
Reply to this topicStart new topic
> STM32: сброс всей периферии перед переходом из загрузчика в основную прошивку
Terminator
сообщение May 23 2014, 07:26
Сообщение #76


Местный
***

Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382



Я же сразу сказал про внешнюю flash sm.gif
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение May 23 2014, 07:26
Сообщение #77


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(Golikov A. @ May 23 2014, 02:03) *
так это ваша позиция что так жить нельзя, и надо быть защищенным даже от вероятности 10^-14 sm.gif

Моя позиция - не стоит плодить баги без необходимости.
Все. Больше отвечать "по кругу" не буду.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
vlad_new
сообщение May 24 2014, 00:51
Сообщение #78


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Я в своём загрузчике напоролся на проблемму с SysTick. Как я не старался, мне не удалось его "полностью блокировать". Запретил глобальное прерывание, остановил SysTick, сбросил все флаги в энвике, поставил маленькую задержку и тем не менее после глобального разрешения прерывания, изредко, возникало ещё одно прерывание от SysTick. Собственно проблемму решил добавив ещё один сброс энвика с задержкой.
Я это к тому, что в каждом конкретном случае, подводные камни имеют место быть и "сбросить всё" без резета, не всегда так просто, как кажется на первый взгляд.
Go to the top of the page
 
+Quote Post
adnega
сообщение May 24 2014, 05:11
Сообщение #79


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(vlad_new @ May 24 2014, 09:01) *
Я в своём загрузчике напоролся на проблемму с SysTick. Как я не старался, мне не удалось его "полностью блокировать". Запретил глобальное прерывание, остановил SysTick, сбросил все флаги в энвике, поставил маленькую задержку и тем не менее после глобального разрешения прерывания, изредко, возникало ещё одно прерывание от SysTick. Собственно проблемму решил добавив ещё один сброс энвика с задержкой.
Я это к тому, что в каждом конкретном случае, подводные камни имеют место быть и "сбросить всё" без резета, не всегда так просто, как кажется на первый взгляд.

В NVIC можно сбросить не только разрешение прерывания, но и флаг отложенного прерывания - периферия взвела,
но в данный момент прерывание выполниться не может, т.к. запрещено. "Все не просто", но некоторые вещи вполне можно решить.
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 25 2014, 08:24
Сообщение #80


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Добавлю свои 5 копеек касательно сброса периферии:

Только что напоролся на проблему в LPC1758 с UART1 с включённым аппаратным управлением потока
(в составе UART1 имеются CTS/RTS). И проявилась она именно при рестарте прошивки обычным
переходом на вектор сброса (ну естественно с выполнением всех условий по переключению режимов
thread->handler, текущего стека и пр.).
А именно: если включено управление потоком (UART1 сам формирует RTS) и FIFO заполнилось до
уровня установки RTS-стоп и в этот момент выполнить рестарт, а после рестарта идёт отключение всей
периферии с последующим включением и инициализацией, в том числе - сброс FIFO через FCR, то
после этого после включения управления потоком опять, RTS остаётся в состоянии "стоп" хотя FIFO пуст.
И никакие сбросы UART, отключения его питания в PCONP - не помогают.
Не помогает даже снижение FIFO-level до низкого уровня.
Единственный способ - отключить временно FlowControl, принять N байт в FIFO до его заполнения до
того уровня FIFO, который был ранее и только после этого опять включить - после этого начинает
работать.

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

Ещё аналогичная проблема была у меня давно на техасском CC5502 с FIFO DMA-каналов:
при программном сбросе, если в этот момент в FIFO были данные (DMA-канал успел
выполнить чтение источника, но не успел выполнить запись), DMA-контроллер запрещается, но не
сбрасывается. И, при последующем его разрешении, при старте передачи, перед пересылаемыми данными
вылазили те застрявшие байты.
FIFO DMA-канала программно недоступна и сбросить её нельзя. Так что пришлось при старте ПО, вначале делать одну
фиктивную транзакцию (чтобы "продуть" FIFO), и только потом запускать канал в работу.
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение May 26 2014, 00:07
Сообщение #81


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Цитата
Я в своём загрузчике напоролся на проблемму с SysTick. Как я не старался, мне не удалось его "полностью блокировать".

У меня то же самое было. SysTick я поборол, а вот прыжок из работающей ОС у меня так и не завёлся. То есть бут у меня работает под осью, как и основное приложение, а ось, вероятно, постоянно сидит в режиме обработчика прерывания и прыгнуть толком не может.
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 26 2014, 04:25
Сообщение #82


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(andrewlekar @ May 26 2014, 10:17) *
У меня то же самое было. SysTick я поборол, а вот прыжок из работающей ОС у меня так и не завёлся. То есть бут у меня работает под осью, как и основное приложение, а ось, вероятно, постоянно сидит в режиме обработчика прерывания и прыгнуть толком не может.

ОС не "сидит постоянно в режиме обработчика прерывания". Cortex-M под ОС находится или в handler- или в thread-mode.
И, если это знать, то проблем с Cortex-ядром при перезагрузке быть не должно.
У меня рестарт хоть из под ОС хоть без - работает нормально (за исключением вышеописаной проблемы с периферией). Проблемы могут быть только в периферии.
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение May 26 2014, 06:24
Сообщение #83


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Ну вам виднее. У меня с периферией проблем не было, а у запускаемого приложения - были. Когда стал прыгать до старта оси, всё стало работать как надо.
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 26 2014, 08:00
Сообщение #84


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(jcxz @ May 26 2014, 11:35) *
ОС не "сидит постоянно в режиме обработчика прерывания". Cortex-M под ОС находится или в handler- или в thread-mode.

А также с привилегированным или пользовательским уровнями thread.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 2nd August 2025 - 14:24
Рейтинг@Mail.ru


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