реклама на сайте
подробности

 
 
> SAm9g45 производительность, Что то мне кажется, что он тормозит
Rattle_the_Snake
сообщение Jun 8 2012, 06:04
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 28-07-09
Пользователь №: 51 641



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

p.s. Появилось подозрение, что всему виной низкая скорость обмена с памятью DDR2. Кто может подсказать, как правильно инициализировать память в комплекте с платой (k4T511630I, может у кого завалялся код?). Я использовал настройки памяти из проектов SAM9G45-EK

p.s.s. Подозрения подтвердились. Написал прогу:
Код
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

Что я делаю не так? Явно же где то мой косяк в настройке DDR2.

Сообщение отредактировал Rattle_the_Snake - Jun 8 2012, 12:08
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rattle_the_Snake
сообщение Jun 14 2012, 08:24
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 28-07-09
Пользователь №: 51 641



Решил проблему. Вот мой код для настройки кеша SAM9G45
CODE
#include "cp15.h" //Atmel at91lib

#define SRAM_ADDRESS AT91C_IRAM

#define TLB_NCNB 0xDF2 // Noncachable, Nonbufferable 11 0 1111 1 00 10
#define TLB_WT 0xDFA // Write-through 11 0 1111 1 10 10
#define TLB_WB 0xDFE // Write-back 11 0 1111 1 11 10

static unsigned char *BufMMU = (unsigned char *) (SRAM_ADDRESS + 0x4000);

void InitMMU(unsigned int *pTranslationTable)
{
int i;
int addSRAM;

// Program the TTB
TRACE_DEBUG("TTB = 0x%X\n\r", (unsigned int)pTranslationTable);

CP15_WriteTTB((unsigned int)pTranslationTable);

// Program the domain access register
CP15_WriteDomainAccessControl(0xFFFFFFFF); // domain 15: access are not checked

// Reset table entries
for (i = 0; i < 4096; i++) {
pTranslationTable[i] = 0;
}
// Program level 1 page table entry

// Vector adress
pTranslationTable[0x0] = (0x00000000)|TLB_NCNB;
// SRAM adress (with D cache)
addSRAM = (SRAM_ADDRESS >> 20);
TRACE_DEBUG("addSRAM = 0x%X\n\r", addSRAM);
TRACE_DEBUG("SRAM_ADDRESS = 0x%X\n\r", SRAM_ADDRESS);
pTranslationTable[addSRAM] = (SRAM_ADDRESS)|TLB_WB;
//DDRAM buf1 with write-through
pTranslationTable[0x701] = (AT91C_DDR2 + 0x00100000)|TLB_WT;
//DDRAM buf2 with write-through
pTranslationTable[0x702] = (AT91C_DDR2 + 0x00200000)|TLB_WT;
// Peripherals adress
pTranslationTable[0xFFF] = (0xFFF00000)|TLB_NCNB;

CP15_EnableMMU();
CP15_EnableDcache();
CP15_EnableIcache();

}

int main()
{
//somewhere in init
InitMMU((unsigned int*)BufMMU);
}



Сообщение отредактировал Rattle_the_Snake - Jun 15 2012, 08:14
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 23:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016