Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:2
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:6
Форум » starterkit.ru » ARM
SAM9G45 скорость работы
RattleSnake
Добавлено 08.06.2012 12:51
0
Сообщение: 1
RattleSnake
0

Пункты: 814
Регистрация: 30.03.2012
Использую плату SK-9g45-oem. Развел платку, подключил дисплей NEC NL6448BC18-01F. Все работает весело, картинка цветная)) Однако есть одно но. Чтобы заполнить весь экран каким либо цветом, у процессора уходит 35-40 мс времени (Измеряю с помощью PIT). В моем понимании, это слишком много. Написал программу заливки по алгоритму - так вообще, на одну картинку уходит 500 мс. Это вообще бардак.
Вот у меня возник вопрос, так как я этот процессор только начал осваивать, может я чего то там недоинициализировал? Использовал исходники с SAM9G45EKES для начальной инициализации проца, настроил дисплей и ДМА и все.
В общем, прошу совета.
Спуститься к концу Подняться к началу
Персональная информация
RattleSnake
Добавлено 08.06.2012 13:18 Сообщение: 2
RattleSnake
0

Пункты: 814
Регистрация: 30.03.2012
Есть подозрение на низкую скорость обмена с памятью. Навеяло другой темой... Кто подскажет, как правильно инициализировать память, что стоит на sk-9g45-oem?
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 08.06.2012 14:02 Сообщение: 3
Pavel Ivanchenko
Admin
4.39

Пункты: 92788
Регистрация: 24.03.2009
Пол: Мужчина
Думаете, примеры Qt (относительно живо прорисовывающиеся) работают с некой по другому инициализированной памятью ...
Спуститься к концу Подняться к началу
Персональная информация
RattleSnake
Добавлено 08.06.2012 16:08 Сообщение: 4
RattleSnake
0

Пункты: 814
Регистрация: 30.03.2012
Цитата
Думаете, примеры Qt (относительно живо прорисовывающиеся) работают с некой по другому инициализированной памятью ...


Думаю таки да!
Написал такой маленький тестик
Код


unsigned short *lcdbuffer = (unsigned short *) (AT91C_DDR2 + 0x00100000);

uint32 time1,time2;
uint16 ITemp;

timestamp=0;
for(cnt=0;cnt<640000;cnt++)
*lcdbuffer=0xffff;
time1=timestamp;
timestamp=0;
for(cnt=0;cnt<640000;cnt++)
ITemp=0xffff;
time2=timestamp;
TRACE_INFO("time1 is %u, time2 is %u\r",time1,time2);


т.е. сначала записывал в DDR2, потом работал со встроенной памятью(Как мне кажется, может я не прав, поправьте)

и получил результат

time1 is 1287433, time2 is 3

Честно, очень хочу разобраться, что к чему!
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 08.06.2012 16:36 Редактировалось 08.06.2012 16:37 Сообщение: 5
Pavel Ivanchenko
Admin
4.39

Пункты: 92788
Регистрация: 24.03.2009
Пол: Мужчина
Компилятор не "идиот", он просто выкинул второй цикл ...
Как минимум нужно в таких случаях аргумент volatile к переменной указывать, но и в этом случае, с вероятностью 0,99, операции будут с внутренними регистрами ...
ITemp нужно было так же как указатель объявить, тлько если это будет DDR, те же числа получите.

Нет никаких "волшебных настроек" памяти, при которой она начнет в разы быстрее работать, она итак настроена на максимум того что может процессор, пойдете тайминги крутить, только проблем насобираете.
Либо пользуйтесь Qt, либо смотрите как там все исполняется, либо миритесь с тем что имеете.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 08.06.2012 16:54 Редактировалось 08.06.2012 17:10 Сообщение: 6
sasamy
4.71

Пункты: 83534
Регистрация: 14.08.2009
Цитата

сначала записывал в DDR2


Включите MMU и кеши, для страниц видеобуфера - только буферизацию , а то вы так и будете газ нюхать от "тормозного" Qt и Linux в крутых standalone :)
Спуститься к концу Подняться к началу
Персональная информация
RattleSnake
Добавлено 09.06.2012 10:06 Сообщение: 7
RattleSnake
0

Пункты: 814
Регистрация: 30.03.2012
Цитата
Компилятор не "идиот", он просто выкинул второй цикл ...



признаю, накосячил) Потом я просто присвоил значение, и как итог получил скорость DDR процентов на 15 медленнее встроенной памяти, даже если выключить LCD DMA.

Однако ж вопрос - неужели реально процессор настолько медленный, что залить экран у него занимает столько времени? Я рассчитывал, что 400 МГц должно мне хватить под задачи, с которыми ранее справлялся F2808 :)

Прошу камнями не закидывать, а подсказать какие нить технологии оптимизации) Про MMU и кеширование спасибо, буду пробовать
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 09.06.2012 11:06 Редактировалось 09.06.2012 13:34 Сообщение: 8
sasamy
4.71

Пункты: 83534
Регистрация: 14.08.2009
Цитата

Однако ж вопрос - неужели реально процессор настолько медленный, что залить экран у него занимает столько времени?


http://en.wikipedia.org/wiki/SDRAM_latency
может наконец станет ясно почему write-through cache или хотя бы write buffer в корне изменят ситуацию, а если это прочитаете
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0198e/Cacddigd.html
поймете что без MMU D-CACHE отключен. Хотя бы I-CACHE включите если код находится в DDR - для этого MMU не требуется.
Спуститься к концу Подняться к началу
Персональная информация
RattleSnake
Добавлено 09.06.2012 14:19 Сообщение: 9
RattleSnake
0

Пункты: 814
Регистрация: 30.03.2012
Цитата

поймете что без MMU D-CACHE отключен. Хотя бы I-CACHE включите если код находится в DDR - для этого MMU не требуется.


Код находится в SRAM. При включении I-CACHE все становится только хуже) Время увеличивается в 10 раз.

Есть ли какие то особенности включения MMU? Сегодня весь день бьюсь - никак не могу включить его - после включения проц не подает признаков жизни. С помощью дебага выяснил , что затык происходит на CP15_WriteControl(control);
Код

unsigned int control;

control = CP15_ReadControl();
control |= (1 << CP15_M_BIT);
control |= (1 << CP15_I_BIT);
control |= (1 << CP15_C_BIT);
CP15_WriteControl(control);
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 09.06.2012 15:34 Сообщение: 10
sasamy
4.71

Пункты: 83534
Регистрация: 14.08.2009
Для начала нужно создать таблицу трансляции адресов - вам хватит одноуровневой с отображением PA<->VA 1:1. Поищите на электроникс.ру - там были вроде подобные темы.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » ARM