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

 
 
> Сброс DMA1 и последующая настройка в STM32
ArtDenis
сообщение Sep 14 2014, 10:37
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 142
Регистрация: 10-11-12
Пользователь №: 74 318



Приветствую. Опытным путём было установлено, что если сбросить DMA1 таким кодом
Код
RCC->AHBRSTR |= RCC_AHBRSTR_DMA1RST;
RCC->AHBRSTR &= ~RCC_AHBRSTR_DMA1RST;

и сразу после этого немедленно начать настраивать канал DMA, то DMA не будет работать. Если же после сброса поставить небольшую задержку (сейчас у меня стоит 10 микросекунд), то всё работает. Кто-нибудь сталкивался с таким поведением? Как правильно проверять, что канал DMA уже можно настраивать после сброса DMA?

PS: камень STM32L151CBT6


--------------------
http://ufa-darts.ru/ - собираем дартс-лигу в Уфе
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ArtDenis
сообщение Sep 14 2014, 13:13
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 142
Регистрация: 10-11-12
Пользователь №: 74 318



Работает, однако! Спасибо cool.gif
Добавил __DSB() в свою либу

Хм. Почему-то этого __DSB в SPL не наблюдается... И задержек тоже там нету.
Если откомпилировать проект, использующий SPL, с крутыми настройками оптимизации (O3 + LTO), то возможно он перестанет работать.


--------------------
http://ufa-darts.ru/ - собираем дартс-лигу в Уфе
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 14 2014, 13:16
Сообщение #3


Гуру
******

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



Цитата(ArtDenis @ Sep 14 2014, 17:13) *
Работает, однако! Спасибо cool.gif
Добавил __DSB() в свою либу

Хм. Почему-то этого __DSB в SPL не наблюдается... И задержек тоже там нету.
Если откомпилировать проект, использующий SPL, с крутыми настройками оптимизации (O3 + LTO), то возможно он перестанет работать.

Барьеры скорее всего нужны для многопроцессорных систем.
Вы просто __NOP() не пробовали?
Эти функции определены в core_cmInstr.h
Go to the top of the page
 
+Quote Post
ArtDenis
сообщение Sep 14 2014, 13:19
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 142
Регистрация: 10-11-12
Пользователь №: 74 318



Цитата(adnega @ Sep 14 2014, 19:16) *
Барьеры скорее всего нужны для многопроцессорных систем.
Вы просто __NOP() не пробовали?

Так после сброса устройства нужен __DSB() или нет? Может как-то флаг где-нибудь надо смотреть?
__NOP() не пробовал.


--------------------
http://ufa-darts.ru/ - собираем дартс-лигу в Уфе
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 14 2014, 13:37
Сообщение #5


Гуру
******

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



Цитата(ArtDenis @ Sep 14 2014, 17:19) *
Так после сброса устройства нужен __DSB() или нет? Может как-то флаг где-нибудь надо смотреть?
__NOP() не пробовал.

Нужно дать устройству инициализироваться. Можно поискать в документации сколько циклов на это требуется.
Я пользуюсь другим подходом: стараюсь между включением тактового сигнала и непосредственной работой с регистрами вставлять какой-то полезный код.
Go to the top of the page
 
+Quote Post
ArtDenis
сообщение Sep 14 2014, 14:02
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 142
Регистрация: 10-11-12
Пользователь №: 74 318



Т.е. совет ставить __DSB() неверный?


--------------------
http://ufa-darts.ru/ - собираем дартс-лигу в Уфе
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 14 2014, 14:19
Сообщение #7


Гуру
******

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



Цитата(ArtDenis @ Sep 14 2014, 18:02) *
Т.е. совет ставить __DSB() неверный?

Кто знает...
Я бы советовал:
1. Не пользоваться сбросом, а пользоваться нормальной инициализацией каналов со сбросом флагов и т.п.
2. Не использовать микросекундные задержки где попало.
3. Найти ответы на вопросы в документации.
Go to the top of the page
 
+Quote Post



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

 


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


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