1.在螢幕上分別顯示紅綠藍三個長方形:
/*自定義結構體用來在使用者空間裡管理幀緩衝的資訊*/
typedef struct fd_dev
fb_dev_t;
/*實現緩衝裝置的開啟和關閉操作的介面*/
int fb_open(fb_dev_t *fbd,char *fbn)
/*獲取lcd的可變引數*/
ioctl(fbd->fd,fbioget_vscreeninfo,&vinfo);
//將可變引數的中的相關資料儲存到自定的結構體fbd中
fbd->xres = vinfo.xres;
fbd->yres = vinfo.yres;
fbd->bpp = vinfo.bits_per_pixel;
fbd->siz = fbd->xres * fbd->yres *fbd->bpp/8;
printf("%dx%d,%dbpp,screensize = %d\n",fbd->xres,fbd->yres,
fbd->bpp,fbd->siz);
/*將幀緩衝對映到記憶體*/
fbd->pfb = mmap(0,fbd->siz,prot_read|prot_write,
map_shared,fbd->fd,0);
if((int)fbd->pfb == -1)
return 0;
}int fb_close(fb_dev_t *fbd)
/*填充制定的巨型區域*/
int fb_drawrect(fb_dev_t *fbd,int x0,int y0,int w,int h,int color)
return 0;
} #endif
#include "bmplib.h"
#define fb_dev_name "/dev/fb0"
#define red_color565 0x0f100
#define green_color565 0x007e0
#define blue_color565 0x0001f
int main(int argc,char *argv)
else
printf("16 bits only!\n");
//fb_drawbmp(fbd,0,0,argv[1]);
fb_close(fbd);
return 0;}
2.在lcd上顯示點陣圖bmplib.h
#ifndef bmplib_h
#define bmplib_h
typedef struct
bmp_file_header_t;
typedef structbmp_info_header_t;
/*bitmap格式的影象檔案會帶有54位元組的資訊頭,其中包含了影象和檔案的基本資訊,
緊接在檔案頭之後的就是實際的影象資料*/
typedef structrgb_32_t;
/*對位圖進行操作*/
typedef structbmp_t;
//字元形到整形的轉換
int char_to_int(char *ch)
/*開啟位圖操作*/
int bmp_open(bmp_t *bmp,char *bmpn)
read(bmp->fd,&fhr,sizeof(bmp_file_header_t));//讀取檔案頭
read(bmp->fd,&ihr,sizeof(bmp_info_header_t));//讀取資訊頭
bmp->width = char_to_int(ihr.width);
bmp->height = char_to_int(ihr.height);
bmp->bitcount = char_to_int(ihr.bitcount);//畫素位數
bmp->siz = (bmp->width *bmp->height*bmp->bitcount)/8;
printf("bmp->width = %d\n",bmp->width);
printf("bmp->height = %d\n",bmp->height);
printf("bmp->bitcount = %d\n",bmp->bitcount);
printf("bmp->siz = %d\n",bmp->siz);
bmp->data = malloc(bmp->siz);//為位圖資料分配儲存空間
read(bmp->fd,bmp->data,bmp->siz);//讀取資料
bmp->curp = (rgb_32_t *)bmp->data;//獲取當前畫素點
return 0; }
int bmp_close(bmp_t *bmp)
/* 因為開發板的幀緩衝區在驅動中被設定為16位資料表示乙個畫素點,因此需要對24或
32位的點陣圖進行轉換,使用下面的函式
*/static inline short transfer_to_16bit(char r,char g,char b)
static inline short bmp_get_pixel_16bit(bmp_t *bmp)
//移動到下一畫素點
static inline void bmp_next_pixel(bmp_t *bmp)
/*繪製位圖*/
int fb_drawbmp(fb_dev_t *fbd,int x0,int y0,char *bmpn)
*((short*)(fbd->pfb)+y*fbd->xres+x) = bmp_get_pixel_16bit(&bmp);
bmp_next_pixel(&bmp);//移動到下一畫素點
} }bmp_close(&bmp);
return 0;
}#endif
測試程式:
lcd_bmp.c
#include "bmplib.h"
#define fb_dev_name "/dev/fb0"
#define red_color565 0x0f100
#define green_color565 0x007e0
#define blue_color565 0x0001f
int main(int argc,char *argv)
else
printf("16 bits only!\n");
*/
fb_drawbmp(fbd,0,0,argv[1]);
fb_close(fbd);
return 0;}
位圖程式測試方法,例如這裡有一張名為clock.bmp的
編譯上述檔案後生成lcd_bmp
執行如下命令:
./lcd_bmp clock.bmp
實驗現象:
OK6410 LCD驅動移植
今天完成了 ok6410 的lcd 驅動移植,那麼直接進入正題,我的操作環境是 主機 xp系統,vmware ubuntu 10.10 虛擬機器。開發板 ok6410,a板,256m 2g lcd 飛凌4.3 寸tft wxcat43,480 272 如果你是參考這篇博文來移植的話,我還是要強調一下...
OK6410 LCD驅動移植
今天完成了 ok6410 的lcd 驅動移植,那麼直接進入正題,我的操作環境是 主機 xp系統,vmware ubuntu 10.10 虛擬機器。開發板 ok6410,a板,256m 2g lcd 飛凌4.3 寸tft wxcat43,480 272 如果你是參考這篇博文來移植的話,我還是要強調一下...
OK6410 uart 簡單測試程式
uart初始化。1 我們可以通過原理圖可知道 串列埠的rxd,txd 分別連線在ok6410 gpa0,gpa1 口上的。所以首先設定gpio 的輸入輸出狀態 0010 uart rxd 0 0010 uart txd 0 同時設定相應的上下拉電阻關係。2 uart 初始化 2.1 配置uart 0...