顯示器的掃瞄方式主要有隔行掃瞄(interlaced)與逐行掃瞄(non-interlaced)兩種,港台地區也稱為交錯與非交錯。
隔行掃瞄是指在顯示器在顯示影象時,先掃瞄奇數行,然後再回頭掃瞄偶數行,經過兩次掃瞄才完成一次影象重新整理。
先摘抄乙份,以備後用
前些天除錯lcd,發現顯示的內容完全是旋轉的,並且也只顯示了部分,寫color bar的程式部分如下
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
struct fb_var_screeninfo vinfo;
int main(int argc, char *ar**)
int fbfd, fbsize, i;
int red, green, blue;
unsigned char *fbbuf;
if (argc != 5) {
printf("usage: ./%s /dev/fbx r g b/n", ar**[0]);
printf("e.g: ./%s /dev/fb0 128 255 255/n", ar**[0]);
exit(0);
red = atoi(ar**[2]);
green = atoi(ar**[3]);
blue = atoi(ar**[4]);
/* open video memory */
if ((fbfd = open(ar**[1], o_rdwr)) < 0) {
exit(1);
/* get variable display parameters */
if (ioctl(fbfd, fbioget_vscreeninfo, &vinfo)) {
printf("bad vscreeninfo ioctl/n");
exit(2);
printf("xres, yres, pixel/bit : %d, %d, %d/n", vinfo.xres, vinfo.yres, vinfo.
bits_per_pixel);
/* size of frame buffer */
fbsize = vinfo.xres*vinfo.yres*(vinfo.bits_per_pixel/8);
/* map video memory */
if ((fbbuf = mmap(0, fbsize, prot_read | prot_write, map_shared, fbfd, 0)) == (void *) -1
exit(3);
/* clear the screen */
for (i = 0; i < fbsize; i++) {
*(fbbuf + i++) = red;
*(fbbuf + i++) = green;
*(fbbuf + i++) = blue;
printf("clear screen with rgb:%s %s %s %d/n", ar**[2], ar**[3], ar**[4], fbsize);
munmap(fbbuf, fbsize);
close(fbfd);
return 0;
改進部分如下
顯示如下
code:
redblue
green
red/blue
後來發現其實是掃瞄方式,的問題。
但是應該顯示:
redblue
green
red/blue
lcd驅動程式
ok6410lcd測試程式 1.在螢幕上分別顯示紅綠藍三個長方形 自定義結構體用來在使用者空間裡管理幀緩衝的資訊 typedef struct fd dev fb dev t 實現緩衝裝置的開啟和關閉操作的介面 int fb open fb dev t fbd,char fbn 獲取lcd的可變引數...
LCD驅動程式移植
對lcd的操作可以像串列埠一樣,通過終端裝置層的封裝 dev tty 裝置 來輸出內容,也可以通過frame buffer dev fb 裝置 直接在視訊記憶體上 繪製 影象。tty 終端裝置 和frame buffer驅動程式的框架 下面根據每層的檔案講解一下上圖 1 顯示驅動程式 2 鍵盤驅動程...
LCD裝置驅動程式
對螢幕進行抓屏 cp dev fb0 myfile.png 幀緩衝裝置的主裝置號29,次裝置號0 31,也就是dev fb0 dev fb31 填充乙個fbinfo結構。用register framebuffer fbinfo 將fbinfo結構註冊到核心,對於fbinfo結構,最基本的是fs op...