[an error occurred while processing this directive]
Уважаемые! Подскажите по PCI burst...
(«Телесистемы»: Конференция «Программируемые логические схемы и их применение»)

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

Отправлено DeadMoroz 11 февраля 2005 г. 15:30

Есть самодельные дивайс и корка Target32. Нужно быстро передавать в ОЗУ дивайса большой блок данных (480К х 32 бит). Память быстрая (10 нс). Адреса выровнены по dword, запись данными по 32 бита. Проблема в том, что данные пишутся неправильно, вот результаты простого теста. Я пишу в Memory Space дивайса в цикле значение текущего адреса:
asm mov EAX, PCI_Device_Mem_Base_32bit
asm mov ESI, EAX
asm mov ECX, 480000
next:
asm mov EAX, ESI
asm mov [GS:ESI], EAX // (!!!)
asm add ESI, 4
asm dec ECX
asm jnz next

Получаем следующий дамп памяти дивайса (адрес:данные)
E6800000: E6800000
E6800004: E6800004
E6800008: E6800008
E680000C: E6800008 !
E6800010: E680000C !
E6800014: E6800010 !
E6800018: E6800014 !
E680001C: E6800018 !
E6800020: E680001C !
E6800024: E6800024
E6800028: E6800024 !
E680002C: E6800028 !
E6800030: E680002C !
E6800034: E6800030 !
E6800038: E6800038
E680003C: E680003C
E6800040: E6800040
E6800044: E6800040 !
E6800048: E6800044 !
E680004C: E6800048 !
E6800050: E680004C !
E6800054: E6800050 !
E6800058: E6800054 !
E680005C: E6800058 !
E6800060: E680005C !
E6800064: E6800064
E6800068: E6800064 !
E680006C: E6800068 !
E6800070: E680006C !
E6800074: E6800070 !
E6800078: E6800078
E680007C: E680007C
E6800080: E6800080
E6800084: E6800080 !
E6800088: E6800084 !
E680008C: E6800088 !
E6800090: E680008C !
E6800094: E6800090 !
E6800098: E6800094 !
E680009C: E6800098 !
E68000A0: E680009C !
E68000A4: E68000A4
E68000A8: E68000A4 !
E68000AC: E68000AC
E68000B0: E68000AC !
E68000B4: E68000B0 !
E68000B8: E68000B4 !
E68000BC: E68000B8 !
E68000C0: E68000BC !
E68000C4: E68000C4
E68000C8: E68000C4 !
E68000CC: E68000C8 !
E68000D0: E68000CC !
E68000D4: E68000D0 !
E68000D8: E68000D8
E68000DC: E68000DC
E68000E0: E68000E0
E68000E4: E68000E0 !
E68000E8: E68000E4 !
E68000EC: E68000E8 !
E68000F0: E68000EC !
E68000F4: E68000F0 !
E68000F8: E68000F4 !
E68000FC: E68000F8 !
E6800100: E68000FC !
E6800104: E6800104
E6800108: E6800104 !
E680010C: E680010C
E6800110: E680010C !
E6800114: E6800110 !
E6800118: E6800114 !
E680011C: E6800118 !
E6800120: E680011C !
E6800124: E6800124
E6800128: E6800124 !
E680012C: E6800128 !
E6800130: E680012C !
E6800134: E6800130 !
E6800138: E6800138
E680013C: E680013C
E6800140: E6800140
E6800144: E6800140 !
E6800148: E6800144 !
E680014C: E6800148 !
E6800150: E680014C !
E6800154: E6800150 !
E6800158: E6800154 !
E680015C: E6800158 !
E6800160: E680015C !
E6800164: E6800164
E6800168: E6800164 !
E680016C: E680016C
E6800170: E680016C !
... и тд
Восклицательным знаком отмечены ошибки. Видна некоторая закономерность: по адресам xxxxxxx8, xxxxxxxC, xxxxxxx0 подряд данные правильные. При этом примерная скорость записи составляет 62Мб\с. Осцилом видно, что на шине идут пакетные транзакции. Если выполнять повторную запись в память (строку "!!!" проги повторить 2 раза), либо выполнить штук 300 пустых итераций цикла между записями, то данные записываются правильно, НО скорость уменьшается в 3 раза, что не очень устраивает. Работаю под DOS, использую режим адресации UNRIAL MODE, проц - Celeron 2GHz, мать - Intel D865GBF.
Есть какие либо мысли по этому поводу?

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

Ответы


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

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

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

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

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


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

E-mail: info@telesys.ru