Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ногодрыгание у ARM
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
SasaVitebsk
Работаю с камнем LPC2106. Он меня полностью устраивает и прекрасно ложится под проект. Поэтому тот вопрос, который я задаю ниже - чисто академический, чтобы лучше узнать архитектуру. Мне не надо никак ускорять. Я просто хочу разобраться.

Итак. Запустил камень на частоте близкой к 60 (14.7456*4). Частоту проверил JLink Comander-ом. Подтверждено. Сконфигурировал MAM как положено. Делитель переферийной шины 1:1. То есть быстродействие "по максимуму". Учитывая, что, согласно описанию, производительность данного камня из флэши практически равна такойже из RAM, то пока этим пренебрегаем.

Выдаём прямоугольник на ножку прогой типа
Код
for(;; )
{
   OUT_EN_RS485;
   IN_EN_RS485;
}

Получаем асмовую прогу, по типу:
Код
   \                     ??main_5:
   \   000002AC   4018A0E3           MOV      R1,#+4194304
   \   000002B0   001080E5           STR      R1,[R0, #+0]
   \   000002B4   081080E5           STR      R1,[R0, #+8]
   \   000002B8   FBFFFFEA           B        ??main_5

Просмотрел систему команд ARM и высчитал (может ошибся) что данный цикл должен выполнятся 1+2+2+3 такта + ещё 3 такта на сброс конвеера. Итого 11 тактов. То есть при частоте 60МГц мы должны получить частоту ~ 5.45. Реально я получаю 3.5.

За счёт чего формируется доп задержка?
Как обстоят дела с этим в at91sam7s? (Интересуют конкретные цифры)
У STR711? STM32?
zltigo
Цитата(SasaVitebsk @ May 3 2009, 22:21) *
Работаю ...

Стоит ознакомиться с User Manual на LPC2106/01 в части GPIO Usage Notes. Там все достаточно подробно - включая осциллограммы.
SasaVitebsk
У меня там 5 строк. Никаких осциллограм и ничего вообще. Правда 2 пустых страницы. Документ, UM_LPC2106_2105_2104_2.pdf. Скачан с сайта производителя как UM для данной микросхемы. 2003 Oct 02 дата.
zltigo
Цитата(SasaVitebsk @ May 3 2009, 23:13) *
UM для данной микросхемы. 2003 Oct 02 дата.

Раритет, однако. Текущий Rev. 02 — 8 April 2009 почему-бы не взять? http://www.standardics.nxp.com/support/doc...6&type=user , если работать собрались.
rezident
До кучи еще ссылка на UM10275 Rev. 01 — 4 June 2008
SasaVitebsk
biggrin.gif
Естественно уже нашёл-скачал-читаю. rolleyes.gif Занимательно. Похоже Тревор - тоже раритет из области - получить общее представление. smile.gif
Genadi Zawidowski
Цитата
Как обстоят дела с этим в at91sam7s? (Интересуют конкретные цифры)

В потоке (без переходов) на частоте 48 МГц получалось три такта (около 66 наносекунд) между изменениями состояния порта. Где-то в форуме про ARM я задавал свои вопросы начинающего.

http://electronix.ru/forum/index.php?showt...st&p=567800
Rst7
Цитата
Просмотрел систему команд ARM и высчитал (может ошибся) что данный цикл должен выполнятся 1+2+2+3 такта + ещё 3 такта на сброс конвеера.


Ошиблись. 1+2+2+3 и хватит. Конвейер вместе с выполнением перехода сбрасывается.

Данные цифры будут только при использовании Fast GPIO. При работе через обычную шину там один доступ в 7 тактов, чтоли, если мне память не изменяет.
SasaVitebsk
IAR for ARM 5.10. Файл iolpc2104.h издания 9.12.07. Про fast io ни сном ни духом. Кстати третий уже недочёт у IAR. Вообще файлы под конкретные камни не правят. Я, конечно сейчас и сам подправлю, но всё же. Должны же они отслеживать такие вещи. Им же явно присылают. sad.gif
Rst7
Цитата
IAR for ARM 5.10. Файл iolpc2104.h


EWARM5.30, lpc2104.h
Код
...
/***************************************************************************
**
** GPIO
**
***************************************************************************/
__IO_REG32_BIT(IOPIN, 0xE0028000,__READ,__gpio_bits);
__IO_REG32_BIT(IOSET, 0xE0028004,__READ_WRITE,__gpio_bits);
__IO_REG32_BIT(IODIR, 0xE0028008,__READ_WRITE,__gpio_bits);
__IO_REG32_BIT(IOCLR, 0xE002800C,__WRITE,__gpio_bits);
__IO_REG32_BIT(FIO0DIR,0x3FFFC000,__READ_WRITE,__fgpio_bits);
...
__IO_REG32_BIT(FIO0MASK,0x3FFFC010,__READ_WRITE,__fgpio_bits);
...
__IO_REG32_BIT(FIO0PIN,0x3FFFC014,__READ_WRITE,__fgpio_bits);
...
__IO_REG32_BIT(FIO0SET,0x3FFFC018,__READ_WRITE,__fgpio_bits);
...
__IO_REG32_BIT(FIO0CLR,0x3FFFC01C,__WRITE     ,__fgpio_bits);
...


Как видите, все на месте wink.gif
SasaVitebsk
Будьте так любезны - киданите этот файлик.

Пока что-то не заводится. Сделал свой .h - проверил по шагам на асме - всё пишется туда куда надо - в ответ тишина.
Вопрос: А с какого момента эта фича на камне присутствует? Может у меня старая ревизия камня?


PS: С файлом отбой. Всё что надо есть в 2101.h. smile.gif
bus16
А разве в 2106 есть Fast GPIO?
zltigo
Цитата(SasaVitebsk @ May 4 2009, 09:53) *
А с какого момента эта фича на камне присутствует? Может у меня старая ревизия камня?

Черным по белому практически на первой странице скаченного Вами документа - New features implemented in..... Там еще и фичи кроме Fast GPIO описаны.
SasaVitebsk
Всё сенькую. Отбой. У меня версия кристалла LPC2106F/00. smile.gif
Так что оценить прелести FAST я пока не смогу. Но мне пока это и без надобности. Просто любопытство. Буду знать что есть такая шняга и подправлю проект позже.
А сейчас сделаю в проекте так, чтобы это можно было подправить одной строкой. smile.gif

Торжественно ввожу в проект строчку

//#define FAST_GPIO // Поддержка кристаллов версии 01


smile.gif
defunct
Цитата(SasaVitebsk @ May 4 2009, 11:47) *
Торжественно ввожу в проект строчку

//#define FAST_GPIO // Поддержка кристаллов версии 01
smile.gif

Небольшой hint.
Если определение FAST_GPIO задаете в коде, а не в строке компилятора, то вводите лучше

#define FAST_GPIO FALSE // set to true when present

вместо #ifdef/ifndef пользуйте
#if FAST_GPIO
...

тады парсеры текста лучше понимают что к чему, и по клику на "FAST_GPIO" сразу видно вкл или откл.
FALSE/TRUE ессно должны быть определены раньше, как 0 и 1 ;>
SasaVitebsk
Принято.
Я иногда так, а иногда этак. smile.gif Не определился ещё. Вообще надо будет более детально как-нибудь с препроцессором разобраться. smile.gif
bodja74
Между системной шиной и шиной портов стоит делитель ,по умолчанию он 1\4 biggrin.gif ,просто сделано
в целях экономии потребления
Думаю Филипс не против от того ,что бы немного раскочегарить его периферию поменяв значение делителя.
Фаст порты ,на мой взгляд,идут мимо периферии ,оставляя ее работать на малой скорости.
Еще,фаст портам нужна своя инициализация,не наступи на эти грабли. laughing.gif
Ну и еще ,для хорошей скорости нужен асм,в в доке на 2101\2103 там все расписано вместе с оциллограммами.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.