임베디드 보드에 800 * 480 LCD 디스플레이가 올바르게 안 되네요.
글쓴이: falhed / 작성시간: 화, 2008/08/19 - 11:31오전
원래 임베디드 보드에 240 * 320 LCD로 디스플레이 했는데요, 저희가 800 * 480으로 업그레이드했습니다.
그래서 800 * 480에 디스플레이 해 보았는데 이상하게 디스플레이 되네요. 2주일째 삽질하고 있습니다ㅠㅠ
800 * 480으로 디스플레이 하기 위해 두 가지를 수정했습니다.
{S1DREG_LCD_DISP_HWIDTH, 0x63}, /* 800 pix */
{S1DREG_LCD_DISP_VHEIGHT0, 0xDF}, /* 480 = ((lines - 256) -1) */
이렇게 하고 보드에 그림을 디스플레이 해보니깐요.
이미지의 1/4만 LCD 화면에 꽉 채우면서 디스플레이 되네요.
즉, || 1/4 | 1/4 | 1/4 | 1/4 ||
디스플레이는 화면에 꽉 차게 되는데 왜 그림 전체가 디스플레이 되는게 아니라 1/4 이미지
가 화면을 꽉 채울까요?
답변 부탁드립니다.ㅠㅠ
Forums:
라인당 바이트 수를 맞추셨나요?
음, 그래픽 디바이스 드라이버 프로그래밍에서 손뗀지 2년이 넘어서 가물가물하네요.
그려지는 폭이 이상하다면 라인당 바이트수를 맞추셨는지 확인해보시기 바랍니다.
(어떤 chipset은 stride라는 표현을 쓰더군요)
만약 32bpp에 가로 800 픽셀이라면 32 * 800 / 8 = 3200 바이트가 되겠지요.
이 값을 그래픽 칩셋의 해당 레지스터에 쓰시기 바랍니다. 만약 1/4씩 그려진다면 현재값이 800으로 되어있을 가능성이 있습니다.
참고로, 칩셋에 따라서 라인당 바이트수가 2의 멱수의 배수로 세팅되어야하는 경우가 있습니다.
(16,32,1024의 배수...)
도움이 되었는지 모르겠네요.
RGB interface LCD인지 CPU
RGB interface LCD인지 CPU interface 를 가지는 LCD인지 모르겠군요.
현상으로 보면 이미지를 뿌리는 방향이 맞지 않아서 그런 것으로 보입니다.
다음과 같이 해보면 되지 않을까 생각합니다.
1. 800x480 이미지를 뿌리셨다면, 480x800 이미지를 출력 해보세요.
2. 90도 회전(Rotate)해서 출력 해보세요.
3. LCD의 출력하는 방향을 변경해 보세요.
1/4 이미지로 화면에 나타나는 경우는 보통 이미지 방향이 맞지 않을 때 나옵니다.
가로 이미지를 메모리에 쌓아서 세로 방향으로 출력하거나 반대의 상황으로
출력하는 경우 그렇게 보입니다.
참고로 CPU interface를 가진 GRAM이 있는 LCD의 경우 각 Pixel이 LCD에 출력되는
순서와 방향을 LCD의 레지스터 설정을 통해 바꿀 수도 있습니다.
Be Creative For Fun!!
Be Creative For Fun!!
흠..확인을 해보니깐요...
원래 보드에 240 * 320 LCD가 있었습니다.
{S1DREG_LCD_DISP_HWIDTH, 0x1D}, /* 240 pix */
가로 240일 때 240/8 -1 = 0x1D가 나왔구요,
{S1DREG_LCD_DISP_VHEIGHT0, 0x3F}, /* 320 = ((lines - 256) -1) */
세로 320일 때 320-257 = 0x3F가 나왔습니다.
그래서 제가 800 * 480으로 하니 0x63, 0xDF 나오더라구요....
이렇게 했는데 안되네요...대략 난감합니다.ㅠㅠ
그래픽 드라이버를
그래픽 드라이버를 동작시킬 때는 초기화를 위해서 Chipset의 레지스터 몇개를 세팅해야합니다.
해상도나 bpp정보만으로는 부족합니다. 위에 이광우 님이 말씀하신 것처럼 그리는 방향이나
rotation등도 있을 수 있구요, 제가 말씀드린 라인당 바이트수도 있을 수 있습니다.
해당 chipset의 드라이버 초기화에서 어떤 레지스터들이 세팅되는지 하나씩 확인해보시고
값을 바꿔가면서 테스트 해보시는게 가장 빠른 방법 같습니다.
댓글 달기