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

 
 
> 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 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



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

 


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


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