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

 
 
> STM32L151 инструкции dsb isb и т.п., Хочу понять, зачем нужны.
MiklPolikov
сообщение May 4 2014, 04:50
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Посматривал код операционки freeRTOS , и обнаружил там
__dsb( portSY_FULL_READ_WRITE );
__wfi();
__isb( portSY_FULL_READ_WRITE );
как я понимаю, перед остановкой процессора команда dsb дожидается завершения всех текущих команд в конвеере.
что делает isb после выхода из сна понимаю совсем смутно.
Не понимаю, почему именно эти две команды, ведь в описании ядра есть и другие подобные команды-барьеры.
Очень хотелось бы понять эту премудрость.

И вот ещё:
При переключении тактовой частоты с 1MHz на 16MHz и обратно процессор иногда зависает. А если между 1 и 16 МГц включать "промежуточную" 4МГц, то проблемы нет.
Может как раз при переключении частоты и нужно применить какую-то барьерную команду ?

Заранее спасибо за ответы !


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SII
сообщение May 7 2014, 07:13
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



Пока PLL не "устаканилась" на новой частоте, на её выходе может твориться любое безобразие. Соответственно, на время перенастройки PLL необходимо переходить на тактирование процессора от другого источника. 4 МГц, если память не изменяет, выдаёт MSI, но можно использовать и внешний кварц/осциллятор (HSE), если он уже был запущен: переключение же режимов PLL не влияет на собственно генератор синхронизации. Так что в общем случае с одной частоты на другую действительно не перейдёшь без промежуточной частоты, получаемой без PLL.
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение May 7 2014, 12:21
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(SII @ May 7 2014, 11:13) *
Пока PLL не "устаканилась" на новой частоте, на её выходе может твориться любое безобразие. Соответственно, на время перенастройки PLL необходимо переходить на тактирование процессора от другого источника. 4 МГц, если память не изменяет, выдаёт MSI, но можно использовать и внешний кварц/осциллятор (HSE), если он уже был запущен: переключение же режимов PLL не влияет на собственно генератор синхронизации. Так что в общем случае с одной частоты на другую действительно не перейдёшь без промежуточной частоты, получаемой без PLL.


Разумеется я это понимаю, и в точности так и обращаюсь с PLL
В данном случае наблюдаю глюк при переключении c давно работающих HSI 16 МГц на MSI 1 МГц и обратно.
Возможно, дело в "состыковке" фронтов двух несинхронизированных геренаторов. В момент переключения появляется очень короткий такт, он и вызывает сбой.


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 7 2014, 15:33
Сообщение #4


Гуру
******

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



Цитата(MiklPolikov @ May 7 2014, 18:21) *
Возможно, дело в "состыковке" фронтов двух несинхронизированных геренаторов. В момент переключения появляется очень короткий такт, он и вызывает сбой.

Если Вы "в точности так и обращаетесь", то в момент такой состыковки если даже это есть, ядро у вас будет работать от
дефолтного источника (не от PLL), и на него этот такт никак не должен повлиять.

А почему бы Вам переключение частоты не делать с предварительной перезагрузкой всего МК (аппаратным ресетом)?
Я в своём проекте, где тоже нужно переключать частоту PLL, не стал усложнять, и просто делаю аппаратный ресет,
а старт ПО и инициализация PLL идёт уже на новой clk.
Всё работает прекрасно с какой-бы на какую-бы частоту не пробовал переключаться. LPC1758
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MiklPolikov   STM32L151 инструкции dsb isb и т.п.   May 4 2014, 04:50
- - Golikov A.   переключение частот как? просто меняете делитель и...   May 4 2014, 06:26
- - SII   В STM32Lxxx надо ещё следить за напряжением питани...   May 4 2014, 08:22
|- - MiklPolikov   Цитата(SII @ May 4 2014, 12:22) В STM32Lx...   May 4 2014, 11:24
- - Golikov A.   есть мнение что PLL при резкой смене частоты с 1 н...   May 7 2014, 07:56
|- - jcxz   Цитата(Golikov A. @ May 7 2014, 13:56) ес...   May 7 2014, 08:58
- - Golikov A.   ЦитатаВ данном случае наблюдаю глюк при переключен...   May 7 2014, 19:36
|- - MiklPolikov   Цитата(Golikov A. @ May 7 2014, 23:36) Ё-...   May 7 2014, 21:47
|- - MiklPolikov   Коллеги, добрый день. Сейчас вопрос исключительно...   Feb 24 2015, 20:01
|- - adnega   Цитата(MiklPolikov @ Feb 24 2015, 23:01) ...   Feb 24 2015, 20:55
|- - demiurg_spb   Цитата(MiklPolikov @ Feb 24 2015, 23:01) ...   Feb 25 2015, 10:08
|- - MiklPolikov   Цитата(demiurg_spb @ Feb 25 2015, 13:08) ...   Feb 25 2015, 10:25
|- - demiurg_spb   Цитата(MiklPolikov @ Feb 25 2015, 13:25) ...   Feb 25 2015, 15:00
- - aaarrr   1. Здесь нужна DSB, а не ISB. ISB может понадобить...   Feb 24 2015, 21:04
- - jcxz   Цитата(aaarrr @ Feb 25 2015, 03:04) Одног...   Feb 25 2015, 05:45
- - aaarrr   Цитата(jcxz @ Feb 25 2015, 08:45) Для соз...   Feb 25 2015, 10:34
- - jcxz   Цитата(aaarrr @ Feb 25 2015, 16:34) Однок...   Feb 26 2015, 03:52
- - aaarrr   Цитата(jcxz @ Feb 26 2015, 06:52) Однокра...   Feb 26 2015, 06:41


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

 


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


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