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

 
 
 
Reply to this topicStart new topic
> 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
Rattle_the_Snake
сообщение Jun 9 2012, 12:04
Сообщение #2


Участник
*

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



Мне кажется, что решением проблемы может быть включение MMU и кеша.
Кто нибудь может выложить пример настройки MMU (минимально необходимый)? Пытался читать на infocenter.arm.com - ниасилил.
Буду благодарен за помощь в этом направлении.

Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 9 2012, 12:18
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Rattle_the_Snake @ Jun 9 2012, 16:04) *
Мне кажется, что решением проблемы может быть включение MMU и кеша.

Именно. Посмотрите тут.
Go to the top of the page
 
+Quote Post
Rattle_the_Snake
сообщение Jun 13 2012, 10:28
Сообщение #4


Участник
*

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



Цитата(aaarrr @ Jun 9 2012, 15:18) *


Использовал этот пример. Однако время увеличилось с 200 мс до 5 секунд))) Мож я как то не так написал? I NEED HELP)
CODE
;**********************************************************************
*****
; * Cache and MMU Configuration

mrc p15, 0, r0, c1, c0, 0; read CP15 register 1 into r0
bic r0, r0, #0x01 ; clear MMU enable
bic r0, r0, #(0x01 << 0x0c); disable I Cache
bic r0, r0, #(0x01 << 0x02); disable D Cache
mcr p15, 0, r0, c1, c0, 0; write value back

mov r0, #0x00
mcr p15, 0, r0, c7, c7, 0; invalidate caches
mcr p15, 0, r0, c8, c7, 0; invalidate TLBs


ldr r0, =ttb_first_level; set start of Translation Table base (16k Boundary)
mcr p15, 0x00, r0, c2, c0, 0x00; write to CP15 register 2
;
; Create translation table for flat mapping
; Top 12 bits of VA is pointer into table
; Create 4096 entries from 000xxxxx to fffxxxxx
;
mov r1, #0x00 ; loop counter
ldr r2, =0xDF2 ; set access permissions (AP) for full access SVC/USR (11:10)
; set for domain 15 (8:5)
; must be 1 (4)
; set non cachable non bufferable (CB) (3:2)
; set for 1Mb section (1:0)
init_ttb0
orr r3, r2, r1, lsl #0x14
ldr r4, =sections
init_ttb1
ldr r5, [r4], #0x04
tst r5, #0x01
bne init_ttb2
cmp r1, r5, lsr #0x14
addlo r4, r4, #0x08
blo init_ttb1
ldr r5, [r4], #0x04
cmp r1, r5, lsr #0x14
addhs r4, r4, #0x04
bhs init_ttb1
ldr r5, [r4]
orr r3, r3, r5
init_ttb2
str r3, [r0, r1, lsl #0x02]
add r1, r1, #0x01
cmp r1, #0x1000
blo init_ttb0
;
; Init domains
;
mov r0, #(0x1 << 0x1e); must define behaviour for domain 15 (31:30), set client
mcr p15, 0x00, r0, c3, c0, 0x00; write to CP15 register 3
;
; Set global core configurations
;
mrc p15, 0x00, r0, c1, c0, 0x00; read CP15 register 1 into r0

orr r0, r0, #(0x01 << 0x0c); enable I Cache
orr r0, r0, #(0x01 << 0x02); enable D Cache
orr r0, r0, #0x01 ; enable MMU
;
; Additional configuration options
;
; orr r0, r0, #(0x01 << 0x0e); enable Round Robin cache replacement
; orr r0, r0, #(0x01 << 0x0d); enable Hi Vectors
orr r0, r0, #(0x01 << 0x01); enable data address alignment checking

mcr p15, 0x00, r0, c1, c0, 0x00; write cp15 register 1
nop
nop
nop
nop
nop
nop
nop
nop
bx lr

; ***************************************************************************
; *

sections
DCD 0x00000000; SRAM
DCD 0x00100000
DCD 0xC ; wb, buffered

DCD 0x70000000; DDRAM
DCD 0x72000000
DCD 0xC ; wb, buffered

DCD 0x00000001; END

; ***************************************************************************
; *

ttb_first_level EQU 0x70000000


Сообщение отредактировал IgorKossak - Jun 13 2012, 12:48
Причина редактирования: [codebox] а не [spoiler] для длинного кода!!!
Go to the top of the page
 
+Quote Post
Rattle_the_Snake
сообщение Jun 14 2012, 08:24
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 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
Rattle_the_Snake
сообщение Jun 15 2012, 08:14
Сообщение #6


Участник
*

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




После включения MMU проц выдает 28 MIPS по сравнению с 1. Неплохой прирост, однако все же далековато от заявленных 400.
Что еще можно сделать, куда копнуть?
Использую тест из примера at91sam9xe-ek
Go to the top of the page
 
+Quote Post
AVR
сообщение Jun 18 2012, 00:44
Сообщение #7


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(Rattle_the_Snake @ Jun 15 2012, 12:14) *
После включения MMU проц выдает 28 MIPS по сравнению с 1. Неплохой прирост, однако все же далековато от заявленных 400.
Что еще можно сделать, куда копнуть?
Использую тест из примера at91sam9xe-ek

где можно скачать код этого примера? у меня тоже at91sam на 400 МГц, я мог бы запустить и поделиться результатами

у меня плата покупная, ОСь Linux на нем, может у меня более удачно развели и лучше настроили, было бы интересно узнать скорость его


--------------------
Go to the top of the page
 
+Quote Post
Rattle_the_Snake
сообщение Jun 18 2012, 05:49
Сообщение #8


Участник
*

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



Цитата(AVR @ Jun 18 2012, 03:44) *
где можно скачать код этого примера? у меня тоже at91sam на 400 МГц, я мог бы запустить и поделиться результатами


Я брал пример из стандартных IAR. Называется at91sam9xe-ek/basic-dhrystone-project, и немного переделал под свой проц
Go to the top of the page
 
+Quote Post

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

 


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


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