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

 
 
> STM32F373R8 проблема с АЦП+ПДП и сторожем таймером, При работе с таймером в беск. цикле, замедляется сбор данных с АЦП
ZiB
сообщение May 17 2013, 10:11
Сообщение #1


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

Группа: Свой
Сообщений: 122
Регистрация: 26-07-05
Из: Россия, Томск
Пользователь №: 7 109



Добрый день!

Столкнулся с проблемкой на STM32F373R8 (возможно есть и на других мк, пока не было времени проверить).

Системная тактовая частота 12 МГц.

Работаю с АЦП1 (12 битное).
Предделитель АЦП = 2.
АЦП настроено на непрерывное преобразование с минимальным временем выборки.
Частота преобразований получается (12МГц/2)/(14 тактов одно преобразование) = ~430 кГц.

Данные с АЦП забирает ПДП (DMA) контроллер.

Все работает прекрасно.

Однако когда в коде встречается цилический доступ к регистрам сторожевого таймера, то частота преобразований падет до 190 кГц.

Код
    while (1)
    {
        IWDG->KR = 0xAAAA;
    }


Проверял с регистрами IWDG->RLR, IWDG->PR.

Активность таймера не влияет на ошибку (т.е. и со включенным и с выключенным таймером).

При увеличении времени выборки, т.е. при сниженнии частоты преобразования данная проблема исчезает.

Может кто сталкивался с данной проблемкой и знает, где почитать более детально о работе ПДП и задрежках на шинах ?

Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 22)
vlad_new
сообщение May 17 2013, 14:29
Сообщение #2


Местный
***

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



M3 делит шину между ядром и ДМА с коэффициентом 1:3. Как они делятся в М4 незнаю. Читать надо.
Go to the top of the page
 
+Quote Post
Flexz
сообщение May 17 2013, 19:31
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Тут еще другое интересно - в других процессорах серии (F1/2/4) в регистре статуса АЦП присутствует бит Overflow, который устанавливается в 1 в случае если DMA не успевает забрать данные из DR. При этом АЦП останавливается, что защищает от получения перепутанных данных (при преобразовании последовательности каналов).
В F37x такого бита нет, и что происходит, если DMA не успевает забрать данные - мануал умалчивает. Видимо, данные по-тихому теряются.
Go to the top of the page
 
+Quote Post
ZiB
сообщение May 18 2013, 03:04
Сообщение #4


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

Группа: Свой
Сообщений: 122
Регистрация: 26-07-05
Из: Россия, Томск
Пользователь №: 7 109



Спасибо за ответы.
Я пока полностью не разобрался.
Аналогичный код на STM32F100 и STM32F407, работает без проблем.
Заказал аналогичный мк с большей памятью STM32F373RB, посмотрим, что там будет.
Сейчас хочу попробовать использовать другие модули, не АЦП и посмотреть как будет с ними работать ПДП.
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 18 2013, 04:27
Сообщение #5


Гуру
******

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



Цитата(vlad_new @ May 17 2013, 20:29) *
M3 делит шину между ядром и ДМА с коэффициентом 1:3. Как они делятся в М4 незнаю. Читать надо.
Хм.... Это где такое написано? Можно ссылку?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 18 2013, 06:11
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(jcxz @ May 18 2013, 07:27) *
Хм.... Это где такое написано? Можно ссылку?

Нужно искать в reference manual раздел Memory and bus architecture
что-то типа такого:
Цитата
BusMatrix
The BusMatrix manages the access arbitration between the core system bus and the DMA
master bus. The arbitration uses a Round Robin algorithm. In connectivity line devices, the
BusMatrix is composed of five masters (CPU DCode, System bus, Ethernet DMA, DMA1
and DMA2 bus) and three slaves (FLITF, SRAM and AHB2APB bridges). In other devices,
the BusMatrix is composed of four masters (CPU DCode, System bus, DMA1 bus and
DMA2 bus) and four slaves (FLITF, SRAM, FSMC and AHB2APB bridges).
AHB peripherals are connected on system bus through a BusMatrix to allow DMA access.
Go to the top of the page
 
+Quote Post
ZiB
сообщение May 18 2013, 06:53
Сообщение #7


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

Группа: Свой
Сообщений: 122
Регистрация: 26-07-05
Из: Россия, Томск
Пользователь №: 7 109



Это, то все понятно (что ЦПУ и ПДП делят шину и есть ограничения по пропускной способности), но не понятно, почему при обращении к регистрам сторожевого таймера происходит "задержки" и по всей видимости только на STM32F3. Сейчас платы нет под рукой, в пн. продолжу тестирование.

Почитать о работе ПДП по нашему и с красивыми картинками можно тут (для М3) http://www.gaw.ru/html.cgi/txt/doc/micros/...x_arh/4_2_3.htm
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 18 2013, 08:10
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



может обращение к сторожевому таймеру вынесено в высший приоритет? То есть не блокируется ничем, и когда вы в него в цикле долбитесь ДМА просто не находит места для своих посылок?
Go to the top of the page
 
+Quote Post
vlad_new
сообщение May 18 2013, 10:18
Сообщение #9


Местный
***

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



Чего тут предполагать, когда АЦП и сторожевик сидят на одной шине. У F3 это вроде бы AHB1 (ну не помню точно, да это и не важно).
Go to the top of the page
 
+Quote Post
ZiB
сообщение May 18 2013, 11:17
Сообщение #10


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

Группа: Свой
Сообщений: 122
Регистрация: 26-07-05
Из: Россия, Томск
Пользователь №: 7 109



С чего это? Это где такое написано ?
Go to the top of the page
 
+Quote Post
Flexz
сообщение May 18 2013, 16:32
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Раздел System architecture, почти вся периферия, кроме GPIO, сидит на одном AHB-APB мосту.
Пересылка с помощью DMA занимает минимум пять тактов, а цикл из первого поста, если не ошибаюсь, выполняется за три. Вот и выходит, что ядро и DMA почти постоянно заняты дележкой шины.
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 18 2013, 17:04
Сообщение #12


Гуру
******

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



Цитата(_Артём_ @ May 18 2013, 12:11) *
Нужно искать в reference manual раздел Memory and bus architecture
что-то типа такого:
Просматривал все разделы связанные с AHB Bus Matrix. Нигде не нашёл численных значений приоритетов доступа к шине. LPC17xx.

Кста - LPC1778 нормально работает при интенсивных параллельных DMA-транзакциях с двумя SSP (один на 20МГц, другой - 30МГц), программно-эмулированном UART (ещё один канал 9600*16 Гц запросы GPIO->GPDMA) и при этом - параллельной работе процессора с периодическим обращением к другой различной периферии. Итого сейчас - до 5 параллельно работающих GPDMA-каналов + работа CPU в многозадачной ОС со множеством активной периферии.
Правда использую два SSP сидящие на разных APB-мостах. GPIO также - прямо на AHB.
Наивысший приоритет доступа к шине выставлен для DMA (в LPC1778 можно задать приоритет доступа к шине для GPDMA выше чем CPU).
Скоро наверное туда ещё добавлю непрерывный поток ADC->GPDMA хотя не на такой большой частоте как у топикстартера. Посмотрим...

Да - системная CLK у меня ==120МГц.
Итого в сумме поток через DMA идёт интенсивнее чем у топикстартера (даже относительно системной CLK). При этом вроде проблем не наблюдается.
А зачем топикстартеру такая низкая системная CLK - 12МГц? Может просто попробовать поднять? cool.gif
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 18 2013, 20:49
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(jcxz @ May 18 2013, 20:04) *
Просматривал все разделы связанные с AHB Bus Matrix. Нигде не нашёл численных значений приоритетов доступа к шине. LPC17xx.

Как-то у них неподробно описано(UM10360.pdf):
Цитата
2.5 AHB arbitration
The Multilayer AHB Matrix arbitrates between several masters. By default, the Cortex-M3
D-code bus has the highest priority, followed by the I-Code bus. All other masters share a
lower priority.

Go to the top of the page
 
+Quote Post
ZiB
сообщение May 19 2013, 03:44
Сообщение #14


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

Группа: Свой
Сообщений: 122
Регистрация: 26-07-05
Из: Россия, Томск
Пользователь №: 7 109



Назависимый сторожевой таймер, сюдя по описанию одинаково подключен см. скрины из доки.

На пересылку должно уходить не более 14 тактов (АЦП необходимо столько для преобразования данных), если судить по описанию доступ к шине занимает 5 тактов, остаеться ещё 9 тактов, чего тоже достаточно.
Да и раньше это все прекрасно работало на STM32F405 (я и сейчас отдельно проверял, выше уже писал).
Прешел на STM32F3, так как необходимо 16-ти битное АЦП. Все прекрасно запустилось, думал будет сильно шуметь из-за очень плотного монтажа, но получилось хорошо, уровень шума мал.

Попробую ещё на STM32F303 (Discovery), но там АЦП другое.

Работал, бы на ещё меньшей тактовой частоте для меньшего потребления, но необходимо оцифровывать один канал с частотой не ниже 400 кГц.

Хм, на STM32F303, все работает прекрасно... (При чем на 12 МГц, успевает пересылать в два раза больше данных, у него делитель на АЦП от 1.)

Эх, поехал на работу за платой, что-то мне эта проблемка покоя не дает. Хоть бы это мой косяк был, а не косяк в мк.

Забыл скрины подписать. Левый STM32F3, правый STM32F4.
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 19 2013, 03:49
Сообщение #15


Гуру
******

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



Работать на бОльшей и много спать.
Go to the top of the page
 
+Quote Post
ZiB
сообщение May 19 2013, 06:45
Сообщение #16


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

Группа: Свой
Сообщений: 122
Регистрация: 26-07-05
Из: Россия, Томск
Пользователь №: 7 109



Сходил за платой...

Нашел место, но не понял причину.

Странная штука получается, в обоих мк (STM32F303 и STM32F373) независимый таймер подключен к шине АВР1, правда АЦП сидят на разных шинах.
В 303 снижение частоты АВР1 в 16 раз, ни дает ни какого эффекта, а вот в 373 это приводит к торможению обмена АЦП, хотя АЦП подключен к APB2.

В 100-ом похожая структура и там тоже аналогичная ситуация, процесс передачи данных замедляется.

В 407-ом замедления нет, но структура похожа на 100 и 373.

--------
Получается в 100-ом, 373-ом при обращение к любой переферии на шине АВР1, тормозится процесс обмена.
В 407-ом и 303, нет замедления.

Кто подскажет как прогнозировать данный процесс ?


Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение

 
Go to the top of the page
 
+Quote Post
ZiB
сообщение May 19 2013, 11:17
Сообщение #17


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

Группа: Свой
Сообщений: 122
Регистрация: 26-07-05
Из: Россия, Томск
Пользователь №: 7 109



Цитата(jcxz @ May 19 2013, 10:49) *
Работать на бОльшей и много спать.


Выигрыша нет. Например при тактовой 12 МГц потребление (по цифре) на полном ходу 7,4 мА, при остановленом 3,8 мА.
Если поднять частоту до 48 МГц, при этом уменьшить частоту шин для периферии на 4 (пропорционально увеличению частоты) и остановить ядро, получим 10,5 мА (на полном ходу 19,9 мА).
Начинает кушать больше всё, что весит на шине AHB.
В моем случае: 10,5 - 3,8 = 6,7 мА и (48 - 12 = 36 МГц) - это
1) DMA - 18,3 * 36 = 658 мкА
2) BusMatrix - 6,9 * 36 = 248 мкА
3) ABP2-Bridge - 4.2 * 36 = 151 мкА
4) ABP2-Bridge - 6.9 * 36 = 248 мкА
5) GPIO(A-E) - (12.2+11.9+4.3+12.0+4.4)*36 = 1612 мкА
суммарно 2,9 мА, оставшиеся 3,8 мА (105 мкА/МГц) прочие накладные расходы sm.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 19 2013, 16:39
Сообщение #18


Гуру
******

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



Мне трудно судить про ST, я работаю в основном с NXP ядрами.
Но недавно у меня была похожая проблема при переносе кода с LPC1778 на более ранний LPC1758.
Начинало сбоить DMA<->SSP, хотя на LPC1778 всё прекрасно работало под длительными тяжёлыми тестами и периферия SSP и GPDMA в обоих контроллерах очень похожа.
На более низких скоростях (при снижении до единиц МГц) начинало работать, но хотелось как на LPC1778 - 20-30МГц по SSP.
Да - на LPC1778 я ещё ставил приоритет доступа к шине для GPDMA выше чем для CPU (там есть соотв. регистр), но на LPC1758 такого регистра нет sad.gif
Так вот - помогло отключение пакетного режима DMA для LPC1758. Код остался тем же, но на LPC1778 используется пакетный режим, а на LPC1758 - не пакетный.
В чём разница я так и не понял, но теперь все тесты проходят нормально на самых высоких скоростях.
Да - у SSP-портов на LPC есть небольшое FIFO - вроде 8 слов насколько помню. Может оно помогает.
На контроллерах ST почему-то FIFO в периферии не любят wacko.gif

В вашем ST нету регистра управляющего приоритетами доступа к шине для разных устройств?

PS: А зачем кста так часто дёргать сторожевик?
Go to the top of the page
 
+Quote Post
ZiB
сообщение May 20 2013, 02:26
Сообщение #19


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

Группа: Свой
Сообщений: 122
Регистрация: 26-07-05
Из: Россия, Томск
Пользователь №: 7 109



Да, есть 4-е уровня приоритета для ПДП, но у меня он и так самый высокий стоит.

Сбрасывал реально не так, часто.
Просто когда заметил небольшое отклонение стал искать причину, ну остановился на бескончном цикле, так более заметно влияние.
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 20 2013, 04:37
Сообщение #20


Гуру
******

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



Цитата(ZiB @ May 20 2013, 08:26) *
Да, есть 4-е уровня приоритета для ПДП, но у меня он и так самый высокий стоит.
Я имею в виду не приоритеты каналов DMA, а приоритеты разных bus-masters (CPU I-Code bus, CPU D-Code bus, System bus, GPDMA bus, ...). У вас задача - чтобы приоритет доступа к шине для DMA был выше чем у шин CPU.
Вообще не понимаю разработчиков ядра Cortex - почему у процессора приоритет доступа (по дефолту) выше чем у DMA??? С этим часто бывают проблемы. На DSP C5502 у меня тоже с этим была проблема.
Имхо - должно быть наоборот. Везде где можно ставлю приоритет DMA выше чем у CPU.
Если интересно как сделано в LPC1778, можете глянуть раздел "2.5 AHB arbitration" юзермануала (UM10470.pdf). Там расписаны все bus-master-ы с приоритетами.
Go to the top of the page
 
+Quote Post
Flexz
сообщение May 20 2013, 06:17
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



В STM-ках приоритет Bus master-ов не контролируется, Round Robin и точка. По крайней мере так говорит мануал.
Go to the top of the page
 
+Quote Post
vlad_new
сообщение May 20 2013, 13:53
Сообщение #22


Местный
***

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



Поставте в while несколько __nop(). Дайте DMA немножко больше тактов на передачу данных. Может все и будет нормально, если перефирию слишком часто не дергать. Ну так просто для интересу.
К стате, чего Вы к таким скоростям ADC привязались? Сигма дельта, который Вы хотите на таких скоростях не работает.


Сообщение отредактировал vlad_new - May 20 2013, 14:18
Go to the top of the page
 
+Quote Post
ZiB
сообщение May 21 2013, 02:58
Сообщение #23


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

Группа: Свой
Сообщений: 122
Регистрация: 26-07-05
Из: Россия, Томск
Пользователь №: 7 109



Дело, в том, что при любом обращении (хоть в цикле с нопами, хоть без) происходит задерка обмена, что приводит к изменению частоты дискретизации.
Конечно, чем реже обращения тем меньше вклад.

Возможности АЦП я прекрасно осознаю, да и не писал я, что мне нужно выжать из сигма-дельта 400 кГц.

Я говорил, о комбинации высокоскоростного преобразования 400 кГц (12 бит) и низкоскоростного, но с высоким разрешением 16 бит. А это доступно, только в STM32F373 (383).

В целом сейчас все работает, но мне хотелось бы иметь меньшее потребление (да, и разобраться как "прогнозировать" данные штукиsm.gif).
Go to the top of the page
 
+Quote Post

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

 


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


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