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

 
 
> STM32F103, Очень медленно переключает портом!
Firer
сообщение Apr 16 2012, 18:00
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 294
Регистрация: 7-01-05
Пользователь №: 1 832



Компилятор Keil.
Код в вечном цикле меняет состояние выходного бита порта.
Кварц 8МГц. SYSCLK=8*9=72МГц
APB1=72/2, APB2=72
порт настроен на макс.частоту 50МГц.
прерывания все запрещены.
Ядро работает на 72МГц - MCO включал убедился осциллографом вижу 72МГц.

Реально порт дергается с частотой около 3МГц. В чем дело?
Как минимум должно быть около 36МГц меандр.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Firer
сообщение Apr 16 2012, 19:35
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 294
Регистрация: 7-01-05
Пользователь №: 1 832



Коллеги спасибо за подсказки!
Код я посмотрел ассемблерный. Так что имею права на мечту, ну не 36МГц, ну 10 хотя бы. А то выходит 3.

while (1)
XLED0_TGL;

На асме это:
metka: ldr r1,[r0,0x80c]
eor r1,r1,#0x200
str r1,[r0,#0x80c]
b metka

т.е. 4 такта? Или я не прав?
Ну если еще мост добавит 2 раза по 2 цикла задержки, то выходит около 10 тактов?
А это 7.2МГц а не 3.6.
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 16 2012, 20:23
Сообщение #3


Гуру
******

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



Цитата(Firer @ Apr 16 2012, 23:35) *
т.е. 4 такта? Или я не прав?

Очень часто инструкция выполняется не за 1 такт. В документе "Cortex-M3 Technical Reference Manual" описывается время выполнения инструкций. Дополнительные задержки могут возникать при обращении процессора к внешним шинам (APB, флэш и прочее).
Кроме того, более оптимальный код такой:
Код
int pdata1 = 0x0000, pdata2 = 0x0200;
while (1)
{
    PORT = pdata1;
    PORT = pdata2;
}

Ну и компилировать с максимальной оптимизацией по скорости.
А на ассемблере можно сделать оптимально без оглядки на компилятор.

Update:
Да, забыл.
Цитата(Firer @ Apr 16 2012, 23:35) *
Ну если еще мост добавит 2 раза по 2 цикла задержки, то выходит около 10 тактов?
А это 7.2МГц а не 3.6.

Нет, это не 10, а 20 тактов. Одна итерация цикла в таком виде - это половина периода ("0" - 10 циклов, "1" - 10 циклов, ...).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Firer   STM32F103   Apr 16 2012, 18:00
- - -SANYCH-   Для начала не плохо было бы посмотреть во что ском...   Apr 16 2012, 18:34
- - scifi   Цитата(Firer @ Apr 16 2012, 22:00) Как ми...   Apr 16 2012, 19:17
|- - koyodza   Цитата(scifi @ Apr 16 2012, 22:17) Встреч...   Apr 22 2012, 16:22
|- - SBE   Разбирался когда-то с этим. STR в порт на STM32...   Apr 17 2012, 18:10
- - zöner   а LDR ?   Apr 17 2012, 19:12
- - a1ien   Переход тоже гдето в 2 така выливается. Тоесть цик...   Apr 17 2012, 19:29
|- - SBE   Цитата(a1ien @ Apr 17 2012, 23:29) Перехо...   Apr 17 2012, 21:35
- - nicks80   Цитата(Firer @ Apr 16 2012, 22:00) Компил...   Oct 1 2012, 13:47
- - ViKo   В Keil есть симулятор, в котором прекрасно видно, ...   Oct 1 2012, 13:53
|- - scifi   Цитата(ViKo @ Oct 1 2012, 17:53) В Keil е...   Oct 1 2012, 14:07
|- - ViKo   Цитата(scifi @ Oct 1 2012, 17:07) Вопрос ...   Oct 1 2012, 15:56
- - Lukdut   Для быстрого дрыга пинами очень актуальным будет и...   Oct 1 2012, 20:53
- - KARLSON   Если нужно использовать порт как выход для прямоуг...   Oct 2 2012, 04:30
|- - scifi   Цитата(KARLSON @ Oct 2 2012, 08:30) Навер...   Oct 2 2012, 07:40
- - YAM   Хоть тема довольно старая, но я посмотрел на своем...   Oct 3 2012, 06:03
- - ViKo   Цитата(YAM @ Oct 3 2012, 09:03) STR ...   Oct 3 2012, 07:58


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

 


RSS Текстовая версия Сейчас: 5th August 2025 - 22:53
Рейтинг@Mail.ru


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