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

 
 
> Эффективно и быстро управлять линией порта STM32F407
derun
сообщение May 21 2014, 03:11
Сообщение #1


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

Группа: Свой
Сообщений: 133
Регистрация: 12-01-05
Из: Украина. Чернигов
Пользователь №: 1 908



Мне необходимо быстро менять состояние линии порта (програмно, без таймеров и прочего аппаратного). Пишу кусочек кода для проверки скорости функций управления линией порта portC.13.
Код
while (1)
{

HAL_GPIO_TogglePin(GPIOC, 1 << 13);

}

Получаю меандр с частотой порядка 2.4MHz.
Это очень медленно. Посмотрел как работает функция и переписал код так:
Код
  while (1)
{

      GPIOC->ODR ^= 1 << 13;
}

Получил меандр 8.4 MHz
Уже лучше, но все равно очень медленно. Учитывая что ядро летает на скорости 168 MHz.
Подскажите пожалуйста как сделать управление эффестивнее и быстрее.

Сообщение отредактировал IgorKossak - May 21 2014, 14:49
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение May 21 2014, 03:56
Сообщение #2


Гуру
******

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



Если хочется максимально быстро и именно процессором, то без ассемблера не получится.

Цитата(Golikov A. @ May 21 2014, 12:04) *
скорость ножки задали? Надо задать максимальную частоту переключения ноги, а то будет наружу будет лезть не пойми че!

Неправда. Максимум завалятся фронты, если у осциллографа ёмкость щупа неприлично большая. Частота не изменится.
Go to the top of the page
 
+Quote Post
derun
сообщение May 21 2014, 04:26
Сообщение #3


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

Группа: Свой
Сообщений: 133
Регистрация: 12-01-05
Из: Украина. Чернигов
Пользователь №: 1 908



Нужно просто быстро. Порт сконфигурирован на 100 MHz.
Попробовал предложенный способ:
Код
  while (1)
{
        GPIOC->BSRRH = (1 << 13);
      GPIOC->BSRRL = (1 << 13);
}

Этот вариант работает быстрее получил частоту 14 MHz
Думаю этого будет вполне достаточно.
Посмотрел код дизассемблером, выглядит прилично думаю врядли смогу его сильно оптимизировать.
Спасибо всем за советы и adnega за его вариант решения.

Сообщение отредактировал IgorKossak - May 21 2014, 14:51
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 21 2014, 04:44
Сообщение #4


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

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



Цитата(derun @ May 21 2014, 11:36) *
Этот вариант работает быстрее получил частоту 14 MHz
Думаю этого будет вполне достаточно.
Посмотрел код дизассемблером, выглядит прилично думаю врядли смогу его сильно оптимизировать.

12 тактов на весь цикл? Многовато. А листинг покажите.
Go to the top of the page
 
+Quote Post
derun
сообщение May 21 2014, 05:00
Сообщение #5


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

Группа: Свой
Сообщений: 133
Регистрация: 12-01-05
Из: Украина. Чернигов
Пользователь №: 1 908



Цитата(ViKo @ May 21 2014, 10:54) *
12 тактов на весь цикл? Многовато. А листинг покажите.

GPIOC->BSRRL = (1 << 13);
080002d8: ldr r3, [pc, #16] ; (0x80002ec <main+116>)
080002da: mov.w r2, #8192 ; 0x2000
080002de: strh r2, [r3, #24]
117 GPIOC->BSRRH = (1 << 13);
080002e0: ldr r3, [pc, #8] ; (0x80002ec <main+116>)
080002e2: mov.w r2, #8192 ; 0x2000
080002e6: strh r2, [r3, #26]
120 }
080002e8: b.n 0x80002d8 <main+96>

Как-то так
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- derun   Эффективно и быстро управлять линией порта STM32F407   May 21 2014, 03:11
- - adnega   Цитата(derun @ May 21 2014, 11:21) Мне не...   May 21 2014, 03:24
|- - ViKo   Цитата(adnega @ May 21 2014, 10:34) Кодwh...   May 21 2014, 04:06
- - Golikov A.   скорость ножки задали? Надо задать максимальную ча...   May 21 2014, 03:54
|- - demiurg_spb   Цитата(scifi @ May 21 2014, 12:06) Если х...   May 21 2014, 04:08
||- - adnega   Цитата(demiurg_spb @ May 21 2014, 12:18) ...   May 21 2014, 04:27
||- - demiurg_spb   Цитата(adnega @ May 21 2014, 12:37) Bitba...   May 21 2014, 04:52
||- - ViKo   Цитата(demiurg_spb @ May 21 2014, 12:02) ...   May 21 2014, 04:57
||- - demiurg_spb   Цитата(ViKo @ May 21 2014, 13:07) Потому ...   May 21 2014, 05:08
||- - ViKo   Цитата(demiurg_spb @ May 21 2014, 12:18) ...   May 21 2014, 05:14
|||- - derun   Цитата(ViKo @ May 21 2014, 11:24) А оптим...   May 21 2014, 05:20
||||- - scifi   Цитата(derun @ May 21 2014, 13:30) Задава...   May 21 2014, 05:24
||||- - demiurg_spb   Цитата(scifi @ May 21 2014, 13:34) Потому...   May 21 2014, 05:39
||||- - scifi   Цитата(demiurg_spb @ May 21 2014, 13:49) ...   May 21 2014, 05:48
|||- - demiurg_spb   Цитата(ViKo @ May 21 2014, 13:24) Давайте...   May 21 2014, 05:38
||- - ViKo   Цитата(demiurg_spb @ May 21 2014, 12:18) ...   May 21 2014, 05:57
|- - scifi   Цитата(derun @ May 21 2014, 13:10) Как-то...   May 21 2014, 05:16
|- - derun   Цитата(scifi @ May 21 2014, 11:26) Плохен...   May 21 2014, 05:37
- - scifi   Там ещё одна проблема есть: даже если не нужна точ...   May 21 2014, 05:39
- - adnega   Но всегда нужно помнить, что в любой момент может ...   May 21 2014, 08:10
- - megajohn   и чё тут меряются строками кода, если нигде не нап...   May 21 2014, 08:13
- - scifi   Цитата(megajohn @ May 21 2014, 16:23) и ч...   May 21 2014, 08:27


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

 


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


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