Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ep9307 & Graphic accelerator
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Andrei....
Разрешение экрана 640х480, 256-ти цветный режим. При использовании операции "block copy" на экранную область, иногда (при некоторых ширинах копируемого прямоугольника) наблюдаются глюки в виде небольших горизонтальных полосок толщиной в пиксел и шириной до 4-х пикселов с правого края копируемай области. Никто не сталкивался с таким эффектом?
aaarrr
Напишите, что Вы хотите получить, и что конкретно записываете в регистры акселератора, когда возникает глюк.
Andrei....
Цитата(aaarrr @ Dec 19 2006, 14:55) *
Напишите, что Вы хотите получить, и что конкретно записываете в регистры акселератора, когда возникает глюк.


Собственно ф-ия коприравиния выглядит так:
void BltFast(LPSURFACE destSurf,unsigned short dsX,unsigned short dsY,LPSURFACE srcSurf,unsigned long srcleft,unsigned long srctop,unsigned long srcright,unsigned long srcbottom,unsigned char dcTrans)
{
if((srcright>srcleft)&&(srcbottom>srctop))
{
while(BLOCKCTRL & 1);

if(dcTrans & BLTFAST_SRCCOLORKEY)TRANSPATTRN=srcSurf->Trans;
SRCPIXELSTRT=((srcleft%4)*8/*PEL*/);
BLKSRCSTRT=srcSurf->StartAddress+4*srcSurf->Lenght*srctop+srcleft;
BLKSRCWIDTH=(srcright-1)/4-srcleft/4;
SRCLINELENGTH=srcSurf->Lenght;

DESTPIXELSTRT=((dsX%4)*8/*SPEL*/)|((((dsX+(srcright-1-srcleft))%4)*8)<<16/*EPEL*/);
BLKDESTSTRT=destSurf->StartAddress+dsY*destSurf->Lenght*4+dsX;
DESTLINELENGTH=destSurf->Lenght;
BLKDESTWIDTH=(dsX+(srcright-1-srcleft))/4-dsX/4;
BLKDESTHEIGHT=srcbottom-srctop-1;
BLOCKCTRL=0;
BLOCKCTRL=(2<<17/*P*/)|(0<<14/*BG*/)|((dcTrans & BLTFAST_SRCCOLORKEY?1:0)<<2/*TRANS*/)|(1/*ENABLE*/);
}
}
где, typedef struct{
unsigned long StartAddress;/*start address align word*/
unsigned short Width;/*width in pixel*/
unsigned short Height;/*height in pixel*/
unsigned short Lenght;/*lenght in words*/
unsigned long Trans;/*tranparency*/
} SURFACE, *LPSURFACE;

глюк возникает при следующих входных параметрах:
srcSurf - поверхность 1376х279 пикселов
srcleft=0,srctop=0,srcright=344(!!!именно такой параметр вызывает глюки),srcbottom=279
dsX, dsY любое значение
aaarrr
Чему равны destSurf->Lenght и srcSurf->Lenght?
Лучше напишите непосредственно значения, которые записываются в регистры.
Andrei....
Цитата(aaarrr @ Dec 22 2006, 00:48) *
Чему равны destSurf->Lenght и srcSurf->Lenght?
Лучше напишите непосредственно значения, которые записываются в регистры.


TRANSPATTRN=0
SRCPIXELSTRT=0
BLKSRCSTRT=0xc19a2a5c
BLKSRCWIDTH=85
SRCLINELENGTH=344 //ширина исходной поверхности 1376 пикселей

DESTPIXELSTRT=8
BLKDESTSTRT=0xc0001d89
DESTLINELENGTH=160 //экранная область 640x480
BLKDESTWIDTH=86
BLKDESTHEIGHT=278 //высота катринки 279 пикселей

BLOCKCTRL=0
BLOCKCTRL=(2<<17/*P*/)|(0<<14/*BG*/)|(1<<2/*TRANS*/)|(1/*ENABLE*/);
aaarrr
Здесь что-то не так:

Код
SRCPIXELSTRT=0
BLKSRCWIDTH=85

DESTPIXELSTRT=8
BLKDESTWIDTH=86


По-моему, DESTPIXELSTRT должен быть 0x00180008.
Andrei....
Цитата(aaarrr @ Dec 22 2006, 13:45) *
Здесь что-то не так:

Код
SRCPIXELSTRT=0
BLKSRCWIDTH=85

DESTPIXELSTRT=8
BLKDESTWIDTH=86


По-моему, DESTPIXELSTRT должен быть 0x00180008.


похоже всё правильно: т.к. трансфер представляет собой целое число word'ов (86 word'ов, BLKSRCWIDTH=85), а начитаяется на DESTINATION он со второго пикела в word'е, то заканчиваться должен на первом пикселе, это соответствует DESTPIXELSTRT=0x00000008
aaarrr
Цитата(Andrei.... @ Dec 22 2006, 18:03) *
похоже всё правильно: т.к. трансфер представляет собой целое число word'ов (86 word'ов, BLKSRCWIDTH=85), а начитаяется на DESTINATION он со второго пикела в word'е, то заканчиваться должен на первом пикселе, это соответствует DESTPIXELSTRT=0x00000008

Хорошо, тогда как быть с SRCPIXELSTRT? Следуя такой логике, ему должно быть присвоено значение 0x00180000 (начало на 0-м пикселе, конец на 3-м), но что-то подсказывает мне, что это неправильно.

А что получается при DESTPIXELSTRT=0x00180008?
Andrei....
[/quote]
Хорошо, тогда как быть с SRCPIXELSTRT? Следуя такой логике, ему должно быть присвоено значение 0x00180000 (начало на 0-м пикселе, конец на 3-м), но что-то подсказывает мне, что это неправильно.
[/quote]

Но регистр SRCPIXELSTRT содержит ТОЛЬКО адрес первого пиксела в word'е (нижние биты PEL[4:0]), соответственно начало на 0-ом пикселе.
aaarrr
Цитата(Andrei.... @ Dec 25 2006, 10:05) *
Но регистр SRCPIXELSTRT содержит ТОЛЬКО адрес первого пиксела в word'е (нижние биты PEL[4:0]), соответственно начало на 0-ом пикселе.

Да, запутался малость wacko.gif
Так все же: что получается при DESTPIXELSTRT=0x00180008?
Andrei....
[/quote]
Да, запутался малость wacko.gif
Так все же: что получается при DESTPIXELSTRT=0x00180008?
[/quote]

при DESTPIXELSTRT=0x00180008, к тем глюкам которые есть добавляются ещё 4 глючных пиксела в конце каждой строки.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.