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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> DMA порт-память на STM32, какой скорости можно достичь
ukpyr
сообщение Mar 9 2011, 07:00
Сообщение #1


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

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



Какой частоты выборок можно достичь при пересылках DMA порт-память на STM32 при условии что вся остальная периферия остановлена ?
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Mar 9 2011, 09:14
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Зависит от периферии, очевидно. От того, как "быстро" она готова и может поставлять и принимать данные.
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Mar 9 2011, 09:47
Сообщение #3


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

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



периферия - GPIO, 8 или 16-бит на макс.скорости
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Mar 9 2011, 11:13
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(ukpyr @ Mar 9 2011, 10:47) *
периферия - GPIO, 8 или 16-бит на макс.скорости

GPIO не может ставить запросы к DMA. Посмотрите документацию к процессору. Можно, конечно, сконфигурировать DMA в режим "память-память", где одной из "память" будет регистр порта. Если передавать, скажем, из "настоящей" памяти (flash/RAM) в этот регистр порта, то на выходах последнего действительно будут происходить изменения в виде "ногодрыгания". А что дальше с этим делать? Кто "оценит"? Или вопрос чисто теоретический? Тогда читайте, как тактируется DMA, и какая скорость транзакций отсюда получается.
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Mar 9 2011, 11:36
Сообщение #5


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

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



Цитата
GPIO не может ставить запросы к DMA.
запросы не нужны, нужно читать GPIOx_IDR в буфер (как пересылка память-память, ессно без инкремента адреса-источника) на макс.скорости
Цитата
А что дальше с этим делать?
к порту будет подключен параллельный АЦП, с тактированием от HSE-PLL. Интересует сколько циклов уходит на одну пересылку GPIO-память.

Сообщение отредактировал ukpyr - Mar 9 2011, 11:37
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 9 2011, 12:15
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(ukpyr @ Mar 9 2011, 14:36) *
Интересует сколько циклов уходит на одну пересылку GPIO-память.

Такое обычно в даташитах не пишут. Лучше измерить экспериментально.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Mar 9 2011, 14:33
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(ukpyr @ Mar 9 2011, 12:36) *
запросы не нужны, нужно читать GPIOx_IDR в буфер (как пересылка память-память, ессно без инкремента адреса-ихточника) на макс.скоростик порту будет подключен параллельный АЦП, с тактированием от HSE-PLL. Интересует сколько циклов уходит на одну пересылку GPIO-память.

Что-то вроде "выборки цифрового сигнала" (digital sampling)? А что потом с кучей полученных данных делать, и самое главное - когда?
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Mar 9 2011, 14:41
Сообщение #8


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

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



Цитата
Что-то вроде "выборки цифрового сигнала"
сигнал с внешнего параллельного АЦП
Цитата
А что потом с кучей полученных данных делать
обрабатывать/отображать/передавать в комп, сейчас это не важно
Go to the top of the page
 
+Quote Post
InsolentS
сообщение Mar 9 2011, 18:45
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897



Цитата(ukpyr @ Mar 9 2011, 12:00) *
Какой частоты выборок можно достичь при пересылках DMA порт-память на STM32 при условии что вся остальная периферия остановлена ?

Провел эксперимент. Получается частота ровно 1 / 10 тактовой, т.е. при 8 МГц данные в порт льются 800КГц.
Код:
Код
  unsigned int i;
  unsigned char buff1[256];

  RCC->APB2ENR|=RCC_APB2ENR_IOPAEN;
  GPIOA->CRL= GPIO_CRL_MODE3_1 | GPIO_CRL_MODE3_0 |
              GPIO_CRL_MODE2_1 | GPIO_CRL_MODE2_0 |
              GPIO_CRL_MODE1_1 | GPIO_CRL_MODE1_0 |
              GPIO_CRL_MODE0_1 | GPIO_CRL_MODE0_0;

  for(i=0;i<256;i++)buff1[i]=i;

  RCC->AHBENR|=RCC_AHBENR_DMA1EN;

  DMA1_Channel1->CCR=DMA_CCR1_MEM2MEM | DMA_CCR1_PL_1 | DMA_CCR1_PL_0 |
                     DMA_CCR1_PINC | DMA_CCR1_CIRC;
                
  DMA1_Channel1->CNDTR = 256;
  DMA1_Channel1->CPAR = (uint32_t)buff1;
  DMA1_Channel1->CMAR = (uint32_t)&GPIOA->ODR;
  
  DMA1->IFCR = DMA_IFCR_CGIF1 | DMA_IFCR_CTCIF1 | DMA_IFCR_CTEIF1;
  DMA1_Channel1->CCR|=DMA_CCR1_EN;

От размерности данных скорость не зависит


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Mar 9 2011, 19:00
Сообщение #10


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

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



Цитата
Получается частота ровно 1 / 10 тактовой
мда, удручает. Я надеялся уложиться хотя бы в 3..4 такта на выборку.

У Вас в настройках источник GPIOA->ODR. Попробуйте IDR.
Go to the top of the page
 
+Quote Post
InsolentS
сообщение Mar 9 2011, 19:19
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897



Цитата(ukpyr @ Mar 10 2011, 00:00) *
У Вас в настройках источник GPIOA->ODR. Попробуйте IDR.

Это не источник, а приемник.
Как измерить скорость передачи именно периферия -> память - ума не приложу :-)

Добавлено: измерил. Результат совпадает. Ну может быть совсем чуточку быстрее:
Код
  DMA1_Channel1->CCR=DMA_CCR1_MEM2MEM | DMA_CCR1_PL_1 | DMA_CCR1_PL_0 |
                     DMA_CCR1_MINC | DMA_CCR1_TCIE;//    | DMA_CCR1_CIRC
                
  DMA1_Channel1->CNDTR = 200;
  DMA1_Channel1->CMAR = (uint32_t)buff1;
  DMA1_Channel1->CPAR = (uint32_t)&GPIOA->IDR;
  
  DMA1->IFCR = DMA_IFCR_CGIF1 | DMA_IFCR_CTCIF1 | DMA_IFCR_CTEIF1;
  
  GPIOA->ODR=1;
  
  DMA1_Channel1->CCR|=DMA_CCR1_EN;    
  while(! (DMA1->ISR & DMA_ISR_TCIF1));
  
  GPIOA->ODR=0;

Измеренная длина импульса PA0 = 228мкс / 200 = 877КГц,


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Mar 9 2011, 20:38
Сообщение #12


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

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



AVR/STM8 даст 8msps
Go to the top of the page
 
+Quote Post
InsolentS
сообщение Mar 10 2011, 05:12
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897



Цитата(ukpyr @ Mar 10 2011, 01:38) *
AVR/STM8 даст 8msps

У AVR вообще нету никакого DMA. Если просто махать ногами, то и stm32 хорошо "поспеет", 1 / 4 от тактовой частоты.


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
-=A.N.G.E.R=-
сообщение Mar 10 2011, 06:27
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 5-12-06
Пользователь №: 23 140



Цитата(InsolentS @ Mar 10 2011, 09:12) *
...Если просто махать ногами, то и stm32 хорошо "поспеет", 1 / 4 от тактовой частоты.

Хм... что-то больше 2МГц при PLL 24МГц не выходит при любых настройках скорости порта
Go to the top of the page
 
+Quote Post
InsolentS
сообщение Mar 10 2011, 07:23
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897



Цитата(-=A.N.G.E.R=- @ Mar 10 2011, 11:27) *
Хм... что-то больше 2МГц при PLL 24МГц не выходит при любых настройках скорости порта

1) Включите оптимизацию (чтобы не грузил каждый раз адрес порта в регистр).
2) Разверните цикл хотя-бы на 4 итерации, чтобы не принимать в расчет время, уходящее на переход к началу цикла.


--------------------
Курильщик даташитов со стажем
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 - 22:20
Рейтинг@Mail.ru


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