Infernomen 0 2 апреля, 2010 Опубликовано 2 апреля, 2010 · Жалоба Сегодня копался в последней версии Keil'a 4.10 в "Device Database" и нашел в разделе ST упоминание о новой линейке микроконтроллеров на Cortex M3 - серия STM32F20X. По информации из Кейла чипы очень вкусные: частота ядра 120 МГц, 128 Кб RAM и наконец-то 32-битный таймер Но на сайте ST, Кейла и просто в гугле не нашел никакого упоминания об этих чипах... Может кто-нибудь обладет более подробной инфой о них? Давно уже наклевывалось, что в STM32 надо поднимать частоту, так вот когда ждать эти чипы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость MALLOY2 3 апреля, 2010 Опубликовано 3 апреля, 2010 · Жалоба http://www.mcu-related.com/architectures/3...m3/95-stm32f200 http://www.google.com.ua/url?sa=t&sour...heS4fjldvW0cc5A В общем реально следует ожидать в 2011 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SpiritDance 0 12 апреля, 2010 Опубликовано 12 апреля, 2010 · Жалоба 128 Кб RAM Неужели таки додумались? Очень интересно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vallav 0 12 апреля, 2010 Опубликовано 12 апреля, 2010 · Жалоба То, что написано про ST32 в http://www.gaw.ru/html.cgi/txt/doc/micros/...x_arh/index.htm правда? "В приведенном выше коде выполняется передача 10 слов данных между двумя массивами в статическом ОЗУ: вначале с использованием ПДП, а затем с использованием только ЦПУ Cortex. В каждом из этих случаев, перед началом передачи запускается таймер и останавливается по завершении передачи. В данном примера блок ПДП выполняет передачу за 220 циклов, ЦПУ - за 536." То есть пересылка одного слова память-память через проц 54 такта а по ПДП 22 такта? И это при одной комманде за такт... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 12 апреля, 2010 Опубликовано 12 апреля, 2010 · Жалоба Врут конечно:) 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vallav 0 12 апреля, 2010 Опубликовано 12 апреля, 2010 · Жалоба Что, в рекламной статье ошиблись в 5 раз с подсчетом тактов? И по ПДП будет 4 такта на слово? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 1 12 апреля, 2010 Опубликовано 12 апреля, 2010 · Жалоба У меня вышло 122-124 такта, и это без ПДП. А код откуда исполнялся? Из ОЗУ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 12 апреля, 2010 Опубликовано 12 апреля, 2010 · Жалоба Не, не в 5:) Я ошибся вдвое, мой результат надо умножить на два, потому что таймер 2 сидит на APB1, а это вдвое медленнее. То есть, 244 такта. Отчего у них другой результат - не знаю. ЗЫ. Код исполнялся из флеша. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 1 12 апреля, 2010 Опубликовано 12 апреля, 2010 · Жалоба ЗЫ. Код исполнялся из флеша. А сколько wait state'ов у флеша? На какой частоте проц работает? Переместите код в ОЗУ, для чистоты эксперимента. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 12 апреля, 2010 Опубликовано 12 апреля, 2010 · Жалоба Переместите код в ОЗУ, для чистоты эксперимента. Это Вы STM32 код из RAM предлагаете? У него три шины. I-bus имеет доступ только к ROM. Обходной пути загрузки инструкций через S-bus есть, но торомозить должно хорошо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 1 12 апреля, 2010 Опубликовано 12 апреля, 2010 · Жалоба Я ошибся вдвое, мой результат надо умножить на два, потому что таймер 2 сидит на APB1, а это вдвое медленнее. То есть, 244 такта. Таймеры TIM2 - TIM7 у STM32 имеют множитель (от х1 до х2) частоты APB1, поэтому не всё так однозначно. Если прескалер APB1 имеет значение, отличное от /2, то множитель таймеров будет равен х2. То есть если частота ядра = 72 МГц, а APB1, соответственно, 36 МГц, таймеры будут тактироваться также 72 мегагерцами. Это Вы STM32 код из RAM предлагаете? У него три шины. I-bus имеет доступ только к ROM. Обходной пути загрузки инструкций через S-bus есть, но торомозить должно хорошо. То есть выполнение кода из RAM будет тормознее, чем из флеш? Хм, всегда считал, что наоборот... Сейчас протестирую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 12 апреля, 2010 Опубликовано 12 апреля, 2010 · Жалоба То есть выполнение кода из RAM будет тормознее, чем из флеш? Для Cortex-M3 будут дополнительные тормоза. Вопрос в том, что перетянет - ws на Flash, или доступ зигзагом через System-bus. Хм, всегда считал, что наоборот... Для ARM7 c его нейманом да - за счет обычно более медленной Flash. Сейчас протестирую. Давайте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 12 апреля, 2010 Опубликовано 12 апреля, 2010 · Жалоба Для Cortex-M3 будут дополнительные тормоза. Вопрос в том, что перетянет - ws на Flash, или доступ зигзагом через System-bus. Пробовал когда-то - получилось, что исполнение из RAM немного (единицы %%) медленнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 1 12 апреля, 2010 Опубликовано 12 апреля, 2010 · Жалоба Пробовал когда-то - получилось, что исполнение из 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 как обычно прав, озу проигрывает флехе на малой частоте. На большой - немного выигрывает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 12 апреля, 2010 Опубликовано 12 апреля, 2010 · Жалоба STM32F103RET6, ядро на 72 МГц, 2 такта ожидания для флеш: RAM - 116 тактов FLASH - 122 такта Помнится смотрел на dhrystone - получалось примерно такое же соотношение, но в пользу флеш. Но все равно вывод в общем-то один напрашивается - не стоит класть код туда, где ему не место. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться