Jump to content

    
Sign in to follow this  
Infernomen

STM32F20X - что-то новое от ST

Recommended Posts

Сегодня копался в последней версии Keil'a 4.10 в "Device Database" и нашел в разделе ST упоминание о новой линейке микроконтроллеров на Cortex M3 - серия STM32F20X. По информации из Кейла чипы очень вкусные: частота ядра 120 МГц, 128 Кб RAM и наконец-то 32-битный таймер

 

Но на сайте ST, Кейла и просто в гугле не нашел никакого упоминания об этих чипах...

Может кто-нибудь обладет более подробной инфой о них?

Давно уже наклевывалось, что в STM32 надо поднимать частоту, так вот когда ждать эти чипы?

Share this post


Link to post
Share on other sites

То, что написано про ST32 в

http://www.gaw.ru/html.cgi/txt/doc/micros/...x_arh/index.htm

правда?

"В приведенном выше коде выполняется передача 10 слов данных между двумя массивами в статическом ОЗУ: вначале с использованием ПДП,

а затем с использованием только ЦПУ Cortex. В каждом из этих случаев, перед началом передачи запускается таймер и останавливается по

завершении передачи. В данном примера блок ПДП выполняет передачу за 220 циклов, ЦПУ - за 536."

 

То есть пересылка одного слова память-память через проц 54 такта а по ПДП 22 такта?

И это при одной комманде за такт...

Share this post


Link to post
Share on other sites

Врут конечно:)

 

int arry_dest[20];
int arry_src[20];

void test()
{
    RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
    TIM2->CR1 = 0;
    TIM2->CNT = 0;
    TIM2->CR1 = 1;
    for(int index = 0; index <10; index++)
        arry_dest[index] = arry_src[index];
    TIM2->CR1 = 0;
    uart << "10 ints copied in " << TIM2->CNT << "cycles\r\n";
}

 

У меня вышло 122-124 такта, и это без ПДП.

 

ЗЫ. Правильный адрес обсуждаемой статьи:

http://www.gaw.ru/html.cgi/txt/doc/micros/...x_arh/4_2_3.htm

Share this post


Link to post
Share on other sites

Не, не в 5:)

Я ошибся вдвое, мой результат надо умножить на два, потому что таймер 2 сидит на APB1, а это вдвое медленнее. То есть, 244 такта.

 

Отчего у них другой результат - не знаю.

 

ЗЫ. Код исполнялся из флеша.

Share this post


Link to post
Share on other sites
ЗЫ. Код исполнялся из флеша.

А сколько wait state'ов у флеша? На какой частоте проц работает?

 

Переместите код в ОЗУ, для чистоты эксперимента.

Share this post


Link to post
Share on other sites
Переместите код в ОЗУ, для чистоты эксперимента.

Это Вы STM32 код из RAM предлагаете? У него три шины. I-bus имеет доступ только к ROM. Обходной пути загрузки инструкций через S-bus есть, но торомозить должно хорошо.

Share this post


Link to post
Share on other sites
Я ошибся вдвое, мой результат надо умножить на два, потому что таймер 2 сидит на APB1, а это вдвое медленнее. То есть, 244 такта.

Таймеры TIM2 - TIM7 у STM32 имеют множитель (от х1 до х2) частоты APB1, поэтому не всё так однозначно.

Если прескалер APB1 имеет значение, отличное от /2, то множитель таймеров будет равен х2.

То есть если частота ядра = 72 МГц, а APB1, соответственно, 36 МГц, таймеры будут тактироваться также 72 мегагерцами.

 

Это Вы STM32 код из RAM предлагаете? У него три шины. I-bus имеет доступ только к ROM. Обходной пути загрузки инструкций через S-bus есть, но торомозить должно хорошо.

То есть выполнение кода из RAM будет тормознее, чем из флеш?

Хм, всегда считал, что наоборот...

 

Сейчас протестирую.

Share this post


Link to post
Share on other sites
То есть выполнение кода из RAM будет тормознее, чем из флеш?

Для Cortex-M3 будут дополнительные тормоза. Вопрос в том, что перетянет - ws на Flash, или доступ зигзагом через System-bus.

Хм, всегда считал, что наоборот...

Для ARM7 c его нейманом да - за счет обычно более медленной Flash.

Сейчас протестирую.

Давайте.

Share this post


Link to post
Share on other sites
Для Cortex-M3 будут дополнительные тормоза. Вопрос в том, что перетянет - ws на Flash, или доступ зигзагом через System-bus.

Пробовал когда-то - получилось, что исполнение из RAM немного (единицы %%) медленнее.

Share this post


Link to post
Share on other sites
Пробовал когда-то - получилось, что исполнение из RAM немного (единицы %%) медленнее.

В общем, у меня получилось вот что.

 

Исполнялся вот этот код:

volatile int arry_dest[20];
volatile int arry_src[20];

TIM2->CR1    =    TIM_CR1_CEN;
for(int index = 0; index <10; index++) arry_dest[index] = arry_src[index];
TIM2->CR1 = 0;
lcd.PrintText("tacts: %u", 0, 0, NO_FLAGS, RGB_BLUE, TIM2->CNT);

после компиляции цикл выглядит так:

;;;47         TIM2->CR1    =    TIM_CR1_CEN;
MOVS     r0,#1
LSLS     r2,r0,#30
STRH     r0,[r2,#0]
;;;48         for(int index = 0; index <10; index++) arry_dest[index] = arry_src[index];
LDR      r1,|L4.56|
MOVS     r0,#0
SUB      r3,r1,#0x50
|L4.16|
LDR      r4,[r1,r0,LSL #2]
STR      r4,[r3,r0,LSL #2]
ADDS     r0,r0,#1
CMP      r0,#0xa
BLT      |L4.16|
;;;49         TIM2->CR1 = 0;
MOVS     r0,#0
STRH     r0,[r2,#0]

 

STM32F103RET6, ядро на 72 МГц, 2 такта ожидания для флеш:

RAM - 116 тактов

FLASH - 122 такта

 

ядро на 24 МГц, 0 тактов ожидания флеш:

RAM - 116 тактов

FLASH - 75 тактов

 

Ну, zltigo как обычно прав, озу проигрывает флехе на малой частоте. На большой - немного выигрывает.

Share this post


Link to post
Share on other sites
STM32F103RET6, ядро на 72 МГц, 2 такта ожидания для флеш:

RAM - 116 тактов

FLASH - 122 такта

Помнится смотрел на dhrystone - получалось примерно такое же соотношение, но в пользу флеш. Но все равно вывод в общем-то один напрашивается - не стоит класть код туда, где ему не место.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this