Перейти к содержанию
    

Работаю с камнем 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?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Работаю ...

Стоит ознакомиться с User Manual на LPC2106/01 в части GPIO Usage Notes. Там все достаточно подробно - включая осциллограммы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня там 5 строк. Никаких осциллограм и ничего вообще. Правда 2 пустых страницы. Документ, UM_LPC2106_2105_2104_2.pdf. Скачан с сайта производителя как UM для данной микросхемы. 2003 Oct 02 дата.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

UM для данной микросхемы. 2003 Oct 02 дата.

Раритет, однако. Текущий Rev. 02 — 8 April 2009 почему-бы не взять? http://www.standardics.nxp.com/support/doc...6&type=user , если работать собрались.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

:biggrin:

Естественно уже нашёл-скачал-читаю. :rolleyes: Занимательно. Похоже Тревор - тоже раритет из области - получить общее представление. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как обстоят дела с этим в at91sam7s? (Интересуют конкретные цифры)

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

 

http://electronix.ru/forum/index.php?showt...st&p=567800

Изменено пользователем Genadi Zawidowski

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просмотрел систему команд ARM и высчитал (может ошибся) что данный цикл должен выполнятся 1+2+2+3 такта + ещё 3 такта на сброс конвеера.

 

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

 

Данные цифры будут только при использовании Fast GPIO. При работе через обычную шину там один доступ в 7 тактов, чтоли, если мне память не изменяет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

IAR for ARM 5.10. Файл iolpc2104.h издания 9.12.07. Про fast io ни сном ни духом. Кстати третий уже недочёт у IAR. Вообще файлы под конкретные камни не правят. Я, конечно сейчас и сам подправлю, но всё же. Должны же они отслеживать такие вещи. Им же явно присылают. :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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);
...

 

Как видите, все на месте ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Будьте так любезны - киданите этот файлик.

 

Пока что-то не заводится. Сделал свой .h - проверил по шагам на асме - всё пишется туда куда надо - в ответ тишина.

Вопрос: А с какого момента эта фича на камне присутствует? Может у меня старая ревизия камня?

 

 

PS: С файлом отбой. Всё что надо есть в 2101.h. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А с какого момента эта фича на камне присутствует? Может у меня старая ревизия камня?

Черным по белому практически на первой странице скаченного Вами документа - New features implemented in..... Там еще и фичи кроме Fast GPIO описаны.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё сенькую. Отбой. У меня версия кристалла LPC2106F/00. :)

Так что оценить прелести FAST я пока не смогу. Но мне пока это и без надобности. Просто любопытство. Буду знать что есть такая шняга и подправлю проект позже.

А сейчас сделаю в проекте так, чтобы это можно было подправить одной строкой. :)

 

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

 

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

 

 

:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

:)

Небольшой hint.

Если определение FAST_GPIO задаете в коде, а не в строке компилятора, то вводите лучше

 

#define FAST_GPIO FALSE // set to true when present

 

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

#if FAST_GPIO

...

 

тады парсеры текста лучше понимают что к чему, и по клику на "FAST_GPIO" сразу видно вкл или откл.

FALSE/TRUE ессно должны быть определены раньше, как 0 и 1 ;>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...