레이블이 LCD controller인 게시물을 표시합니다. 모든 게시물 표시
레이블이 LCD controller인 게시물을 표시합니다. 모든 게시물 표시

2010년 1월 22일 금요일

pixel clock

pixel clock(PCLK)은 1초에 pixel을 몇 개나 찍을 수 있는가 하는 것이다.
LCD는 보통 화면을 뿌려줄 때, 좌측 상단부터 가로로 나아가 뿌린다.
한 줄을 다 뿌리면 그 다음 줄 맨 왼쪽으로 와서 다시 가로로 나아가며 뿌린다.
한 줄을 다 뿌리면 그 다음 줄 맨 왼쪽으로 갈 수 있도록 줄바꾸기를 해주어야 하는데, 이것을 Hsync라 한다.
이런식으로 전체 화면 하나를 구성하고 나면 맨 오른쪽 하단에서 끝나게 되어 있는데, 그러면 다시 좌측 상단으로 올라가 화면을 다시 뿌린다.
이 과정에서 또한 맨 꼭대기로 올라갈 수 있게 해주어야 하는데, 이것을 Vsync라고 한다.

Vsync가 60Hz라고 한다면, 1초에 화면을 60번 뿌리는 것이 되겠다.


그렇다면, PCLK는 어떻게 계산할까.
LCD화면이 800X480이라고 가정하고 Vsync가 60Hz라고 가정한다면,
PCLK는 60X800X480Hz로 계산해낼 수 있다.
즉, 식을 도출해내면 다음과 같다.
PCLK = LCD_WIDTH * LCD_HEIGHT * Vsync



window 크기 변경

하드웨어마다 다르기는 하지만 보통 LCD는 여러 개의 window를 지원한다.
하여 각 window별로 LCD control register가 따로 존재하며, priority를 설정함으로써 overlap 관계를 조정할 수 있다.

여러 개의 window를 한꺼번에 사용하기 위해서는 우선 window를 enable 해주어야 한다.
아래와 같은 winenable register의 값을 설정한다.
이 register를 보면 window를 4개까지 지원하는 것을 알 수 있다.
각 field의 값이 1로 설정되면 해당되는 window가 enable된다. 물론 0일 경우 disable된다.


아무리 실제 LCD의 크기가 정해져 있다고 하더라도 window의 크기는 마음대로 변경할 수가 있다.
window의 크기와 origin을 변경한다면 화면 가운데에 조그맣게 무언가를 띄울 수도 있는 것이다. (origin 변경 포스트)
window 크기 변경은 LCD control register 1번에서 담당한다.
여기서 SZX는 width를 의미하며, SZY는 height를 의미한다.
이 field의 값을 설정해주면 그 값에 맞는 크기의 window가 하나 생성이 되며, PRI field의 값을 설정하여 우선순위를 부여하면 다른 window의 앞에 오거나 뒤에 서는 것이 가능하다.


위에서도 언급했지만 각 window별로 control register가 따로 존재하므로 각 window는 서로 다른 크기와 origin을 가질 수가 있고 이로써 많은 효과를 표현할 수 있다.








주의사항:
이 LCD control register는 RMI보드 Au1250 processor에 기반한 것이며,
각 하드웨어마다 다를 수 있음을 밝힙니다.

그림출처: RMI Alchemy Au1250 processor Data Book

2010년 1월 21일 목요일

origin값 변경

origin이라고 함은 정해진 window안에서의 왼쪽 최상단의 모서리를 origin이라고 한다.

전체 LCD의 해상도가 800X480이라고 가정할 때,
전체 window크기가 800X480이고 origin의 값이 0,0이라면
window에 있는 모든 pixel이 LCD화면에 나타나는 것을 볼 수 있을 것이다.

그러나, 같은 조건에서 origin의 값이 100,100이라면 오른쪽과 하단에서 100pixel만큼이 보이지 않을 것이다.
실제 window에서는 다 뿌렸어도, LCD의 100,100에서 부터 시작한다면 짤리는 것이 당연하다.

이처럼 origin의 값을 잘못 이용하게 되면 LCD화면에서 그림이 짤려 보이거나 한 쪽으로 치우쳐 보일 수 있다.
하지만 잘 사용하면 스크롤을 하는 듯한 효과를 줄 수 있다.
예를들어, origin의 Y값만을 주기적으로 변경한다면 그림이 화면에서 세로 방향으로 움직이게 된다.

이 origin의 값은 LCD control register 0번으로 제어한다.
OX와 OY field가 origin의 X, Y값이 된다.
이 field들을 제어하면 재미있는 화면의 움직임을 만들어 낼 수 있다.







주의사항:
이 LCD control register는 RMI보드 Au1250 processor에 기반한 것이며,
각 하드웨어마다 다를 수 있음을 밝힙니다.

그림출처: RMI Alchemy Au1250 processor Data Book

alpha값 적용

ARGB 시스템에서는 아래 그림과 같이 A,R,G,B가 각각 1byte씩 4byte가 frame buffer의 pixel 하나로 표현된다.
이 때 맨 앞의 A가 alpha값이다.

alpha값은 투명도를 뜻하는데, 이 값을 사용하기 위해서는 lcd control register에서 미리 설정 해두어야 한다.
alpha값을 제어 하는 register는 control register 0번이다.
AEN field의 값이 1이면 Full alpha, 0이면 Pixel alpha 이다.
Full alpha일 경우, 전체 window가 A field의 값으로 설정된다.
Pixel alpha일 경우, 위의 color register의 형태로 pixel값을 줄 때 A field에 있는 값을 alpha값으로 사용한다.

즉, pixel별로 alpha값을 다르게 주고 싶다면 AEN field의 값을 0으로 설정하고,
전체 화면의 alpha값이 모두 같게 하고 싶다면 AEN field의 값을 1로 설정하고 원하는 alpha값을 A field에 저장한다.







주의사항:
이 LCD control register는 RMI보드 Au1250 processor에 기반한 것이며,
각 하드웨어마다 다를 수 있음을 밝힙니다.

그림출처: RMI Alchemy Au1250 processor Data Book

2010년 1월 15일 금요일

BMP 파일 포멧


BMP파일을 에디터로 열어서 바이너리 모드로 확인해 보면 헤더부분이 보인다.
헤더가 끝난 이후로는 이미지 픽셀값이 들어있다.

offset

size(byte)

field

0

2

bmp file 식별코드. 항상 0x42 0x4D 들어간다.

2

4

bmp file size

6

2

reserved

8

2

reserved

10

4

offset. bmp data 시작 주소의 offset

14

4

header size. 항상 40byte.

18

4

bmp image width (pixel)

22

4

bmp image height (pixel)

26

2

color plane . 1 설정

28

2

pixel 비트 . 1,4,8,16,24,32.

30

4

압축방식 (0=none, 1=RLE-8, 2=RLE-4)

34

4

image data size (byte)

38

4

horizontal resolution (pixel/meter)

42

4

vertical resolution (pixel/meter)

46

4

팔레트의 or zero

50

4

중요한 or zero



출처는 위키백과