[an error occurred while processing this directive]
:) просто не каждый до конца все осознал... :)
(«Телесистемы»: Конференция 'Цифровые сигнальные процессоры (DSP) и их применение')

миниатюрный аудио-видеорекордер mAVR

Отправлено редкий_гость 22 ноября 2004 г. 16:20
В ответ на: Да... Как всегда (+) отправлено SM 22 ноября 2004 г. 14:37

У меня, например, С6211 стартанул через JTAG (писал уже ранее).
Затем удалось запустить память (на EMIF не было входного такта). Распушил многожильник, залудил жилу, подлез по БГА и ... о чудо - припаялась! Второй конец - параллельно входному клоку ПЛЛ ядра (33М).
Настроил ГЕЛ (вот только не уверен, что правильно) и память поднялась - 200К*32б слов/секунду. Включил кеш Л2 (думаю что включил) - и скорость - 4,6М*32б слов/секунду...
Вот теперь думаю, можно ли раскрутиться сильнее: ядро 33МГц*4=132МГц, входной такт EMIF = 33МГц. Тестовая програмулина - в конце.
Первое, что приходит - подать на вход EMIF выходной такт CLKOUT2 - он должен быть 33МГц*2=66МГц. Обе шарика - рядом, в крайнем ряду. Закороить и радоваться. Но... Эксперименты показали, что фирменная доска (ДСК 6711) с тактом EMIF = 100МГц тянет данные из внешней SDRAM (почти такой же, что и на плате с С6211) не в 3 раза быстрее (с включенным кеш Л2), а лишь в 1,26 раза!

Фрагменты:

Небольшие изменения в стандартном DSP621x_671x.gel

emif_init()
{
#define EMIF_GCTL 0x01800000
#define EMIF_CE1 0x01800004
#define EMIF_CE0 0x01800008
#define EMIF_CE2 0x01800010
#define EMIF_CE3 0x01800014
#define EMIF_SDRAMCTL 0x01800018
#define EMIF_SDRAMTIMING 0x0180001C
#define EMIF_SDRAMEXT 0x01800020

*(int *)EMIF_GCTL = 0x00003040;
*(int *)EMIF_CE1 = 0xFFFFFF23;
*(int *)EMIF_CE0 = 0xFFFFFF30;
*(int *)EMIF_CE2 = 0xFFFFFF23;
*(int *)EMIF_CE3 = 0xFFFFFF23;
*(int *)EMIF_SDRAMCTL = 0x57000000; /* 1xMT48LC4M32B2 = (1x32b)*4M = 16MB, 33 MHz */
*(int *)EMIF_SDRAMTIMING = 0x0000061A;
}

ЦМД:

MEMORY
{
SDRAM : origin = 0x80000000, len = 0x00100000 /* 1MByte */
CE0 : origin = 0x80100000, len = 0x00F00000 /* 15MByte */
}
SECTIONS
{
.my_sect > CE0 /* EDRAM */
.vectors > SDRAM
.text > SDRAM
.bss > SDRAM
.cinit > SDRAM
.const > SDRAM
.far > SDRAM
.stack > SDRAM
.cio > SDRAM
.sysmem > SDRAM
}

main.c:

void CACHE_enableCaching(unsigned int block);

//#define CHIP_6711 1
#define CHIP_6211 1
#include
#pragma DATA_SECTION(mybuf1,".my_sect")

#define jjj 0x003C0000 /* 3,9M x 32Bit = 15Mx8 */
int j0=jjj;
int mybuf1[jjj];
int isr,err=0;
int global_frame;

void main()
{
int i0;
CACHE_enableCaching(CACHE_CE00); /* enable caching from 0x80000000 to 0x80FFFFFF */

isr=0;
while(isr<10)
{
for(i0=0;i0 for(i0=0;i0 {
if(i0!=mybuf1[i0]) err++;
}
isr++;
}
global_frame=isr;
}

Остались вопросы:
1. что я сделал неправильно? как надо (кешировать и т.п.)?
2. можно ли увеличить скорость работы с внешней память в подобной задаче (обработка данных конечно же есть, но ее для простоты упускаем).

Огромное спасибо всем кто отзывался ранее и не оставит без внимание впредь :)

Редкий гость,
из восставшего против криминала Киева

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru