娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年07月10日(星期三)

正在發(fā)生

2020年04月25日 | 《韋東山視頻第二期》——LCD驅動

發(fā)布者:fuehrd努力的 來源: eefocus關鍵字:LCD驅動  S3C2410  程序框架 手機看文章 掃描二維碼
隨時隨地手機看文章

一、LCD驅動程序框架分析


app: open("/dev/fb0", ...)     主設備號:29, 次設備號:0


————————————————————————————————————————————————————

kernel:(核心文件/drivers/video/fbmem.c)


                fb_open


                          int fbidx = iminor(inode);

                          struct fb_info *info;


                          info = registered_fb[fbidx];      //根據(jù)次設備號獲得從底層注冊的struct fb_info結構體中


                         file->private_data = info;

                         if (info->fbops->fb_open) {                         //調(diào)用底層struct fb_info結構體中的fb_open函數(shù)

                                 res = info->fbops->fb_open(info,1);

                                 if (res)

                                 module_put(info->fbops->owner);

                         }


———————————————————————————————————————————————————


app:    read()


_____________________________________________________________________________________


kernel:


                fb_read


                            struct inode *inode = file->f_path.dentry->d_inode;

                            int fbidx = iminor(inode);

                            struct fb_info *info = registered_fb[fbidx];


                            if (info->fbops->fb_read)

                           return info->fbops->fb_read(info, buf, count, ppos);




                          src = (u32 __iomem *) (info->screen_base + p);

                          dst = buffer;

                         *dst++ = fb_readl(src++);

                         copy_to_user(buf, buffer, c)          


怎么寫LCD驅動程序?


1.分配一個fb_info結構體:framebuffer_alloc()


2.設置


3.注冊:register_framebuffer


4.硬件相關的操作  


#include <linux/module.h>

#include

#include

#include

#include

#include

#include

#include

#include

#include ping.h>

#include

#include

#include

#include

#include

 

#include

#include

#include

 

#include

#include

#include

#include

 

struct lcd_regs {

    unsigned long    lcdcon1;

    unsigned long    lcdcon2;

    unsigned long    lcdcon3;

    unsigned long    lcdcon4;

    unsigned long    lcdcon5;

    unsigned long    lcdsaddr1;

    unsigned long    lcdsaddr2;

    unsigned long    lcdsaddr3;

    unsigned long    redlut;

    unsigned long    greenlut;

    unsigned long    bluelut;

    unsigned long    reserved[9];

    unsigned long    dithmode;

    unsigned long    tpal;

    unsigned long    lcdintpnd;

    unsigned long    lcdsrcpnd;

    unsigned long    lcdintmsk;

    unsigned long    lpcsel;

};

 

static struct fb_ops* s3c_lcdfb_ops = {

    .owner          = THIS_MODULE,

//  .fb_setcplreg = atmel_lcdfb_setolreg,

    .fb_fillrect  = cfb_fillrect,

    .fb_copyarea  = cfb_copyarea,

    .fb_imageblit = cfb_imageblit,

};

 

static struct fb_info* s3c_lcd;

 

static volatile unsigned long *gpbcon;

static volatile unsigned long *gpbdat;

static volatile unsigned long *gpccon;

static volatile unsigned long *gpdcon;

static volatile unsigned long *gpgcon;

static volatile struct lcd_regs* lcd_regs;

 

static u32 pseudo_palette[16];    //為了兼容,設置假的調(diào)色板

/* from pxafb.c */

static inline unsigned int chan_to_field(unsigned int chan, struct fb_bitfield *bf)

{

    chan &= 0xffff;

    chan >>= 16 - bf->length;

    return chan << bf->offset;

}

 

 

static int s3c_lcdfb_setcolreg(unsigned int regno, unsigned int red,

                 unsigned int green, unsigned int blue,

                 unsigned int transp, struct fb_info *info)

{

    unsigned int val;

    

    if (regno > 16)

        return 1;

 

    /* 用red,green,blue三原色構造出val */

    val  = chan_to_field(red,    &info->var.red);

    val |= chan_to_field(green, &info->var.green);

    val |= chan_to_field(blue,    &info->var.blue);

    

    //((u32 *)(info->pseudo_palette))[regno] = val;

    pseudo_palette[regno] = val;

    return 0;

}

 

static int lcd_init(void)

{

    /* 1. 分配一個fb_info結構體 */

 

    s3c_lcd = framebuffer_alloc(0, NULL);

 

    /* 2. 設置 */

    /* 2.1 設置固定的參數(shù) */

    strcpy(s3c_lcd->fix.id, "mylcd");

    s3c_lcd->fix.smem_len    = 320*240*32/8; /* MINI2440的LCD位寬是24,但是2440里會分配4字節(jié)即32位(浪費1字節(jié)) */

    s3c_lcd->fix.type        = FB_TYPE_PACKED_PIXELS;

    s3c_lcd->fix.visual      = FB_VISUAL_TRUECOLOR;     /* 真彩色 */

    s3c_lcd->fix.line_length = 320 * 4;    /* 1行的字節(jié)數(shù) */

    

    /* 2.2 設置可變的參數(shù) */

    s3c_lcd->var.xres          = 320;

    s3c_lcd->var.yres          = 240;

    s3c_lcd->var.xres_virtual  = 320;

    s3c_lcd->var.yres_virtual  = 240;

    s3c_lcd->var.bits_per_pixel = 32;    /* 每個像素所占的位數(shù) */

 

    /* RGB: 565 */

    s3c_lcd->var.red.offset    = 16;

    s3c_lcd->var.red.length    = 8;

 

    s3c_lcd->var.green.offset  = 8;

    s3c_lcd->var.green.length  = 8;

 

    s3c_lcd->var.blue.offset   = 0;

    s3c_lcd->var.blue.length   = 0;

 

    s3c_lcd->var.activate      = FB_ACTIVATE_NOW;

    

    

    /* 2.3 設置操作函數(shù) */

    s3c_lcd->fops   = &s3c_lcdfb_ops;

        

    /* 2.4 其他設置 */

    //s3c_lcd->pseudo_palette =; //

    //s3c_lcd->screen_base  = ;  /* 顯存的虛擬地址 */ 

    s3c_lcd->screen_size   = 320*240*32/8;

 

    /* 3. 硬件相關的操作 */

    /* 3.1 配置GPIO用于LCD */

    gpbcon = ioremap(0x56000010, 8);

    gpbdat = gpbcon+1;

    gpccon = ioremap(0x56000020, 4);

    gpdcon = ioremap(0x56000030, 4);

    gpgcon = ioremap(0x56000060, 4);

 

    *gpccon  = 0xaaaaaaaa;   /* GPIO管腳用于VD[7:0],LCDVF[2:0],VM,VFRAME,VLINE,VCLK,LEND */

    *gpdcon  = 0xaaaaaaaa;   /* GPIO管腳用于VD[23:8] */

    

//    *gpbcon &= ~(3);  /* GPB0設置為輸出引腳 */

//    *gpbcon |= 1;

//    *gpbdat &= ~1;     /* 輸出低電平 */

 

    *gpgcon |= (3<<8); /* GPG4用作LCD_PWREN */

 

 

    /* 3.2 根據(jù)LCD手冊設置LCD控制器,比如VCLK的頻率等 */

    lcd_regs = ioremap(0x4D000000, sizeof(struct lcd_regs));

    

    /*

     * MINI2440 LCD 3.5英寸 ZQ3506_V0 SPEC.pdf 第11、12頁

     *

     * LCD手冊11,12頁和2440手冊"Figure 15-6. TFT LCD Timing Example"一對比就知道參數(shù)含義了

     */

 

    /* bit[17:8]: VCLK = HCLK / [(CLKVAL+1) x 2], LCD手冊11 (Dclk=6.4MHz~11MHz)

     *            7.1MHz = 100MHz / [(CLKVAL+1) x 2]

     *            CLKVAL = 6

     * bit[6:5]: 0b11, TFT LCD

     * bit[4:1]: 0b1101, 24 bpp for TFT

     * bit[0]  : 0 = Disable the video output and the LCD control signal.

     */

    lcd_regs->lcdcon1  = (6<<8) | (3<<5) | (0x0d<<1);

 

    /* 垂直方向的時間參數(shù)

     * 根據(jù)數(shù)據(jù)手冊

     * bit[31:24]: VBPD, VSYNC之后再過多長時間才能發(fā)出第1行數(shù)據(jù)

[1] [2]
關鍵字:LCD驅動  S3C2410  程序框架 引用地址:《韋東山視頻第二期》——LCD驅動

上一篇:s3c2440的LCD驅動程序
下一篇:基于arm的LM3S811微控制器與TH12864顯示模塊的技術應用

推薦閱讀

中國 北京---2018年4月24日---福祿克測試儀器(上海)有限公司近日宣布,4月17日在中國重慶隆重舉辦了福祿克70周年紀念活動暨品牌戰(zhàn)略和新品發(fā)布會。七十年前,John Fluke先生在位于美國康涅狄格州家中的地下室創(chuàng)立了福祿克公司,并親自設計了第一款產(chǎn)品——VAW Meter(伏特、安培、瓦數(shù)表),由此開啟了福祿克在測試測量領域的發(fā)展篇章。如今,福祿克...
經(jīng)過3年、里程數(shù)將近2000公里的封閉測試,臺灣工研院表示,自動駕駛汽車整合系統(tǒng)將正式在新竹南寮進行開放場所自駕實驗運行,借由在真實道路的測試、行駛及驗證的過程,來增進自動駕駛車汽車的功能與安全性。這也是工研院繼去年底在臺中花博以封街方式進行自動駕駛車汽車試營運后,另一項自動駕駛車汽車得突破。 根據(jù)波士頓咨詢公司(BCG)預測,2025年自...
佐思汽研發(fā)布《2019-2020 智能汽車計算平臺與系統(tǒng)架構研究報告》。 隨著汽車新四化發(fā)展,傳統(tǒng)分布式 E/E 架構受到挑戰(zhàn):EV 的三電系統(tǒng),增加了汽車 E/E 架構的復雜程度;智能座艙、自動駕駛等功能,需要融合更多傳感器數(shù)據(jù),對 OTA、算力和車輛安全等提出更多挑戰(zhàn)。因此,未來汽車需要更高算力的 ECU 協(xié)同以及可拓展性的架構設計,域集中電子電氣...
蘋果今天向公測人員發(fā)布了 iOS 和 iPadOS 14.6 的第一個 Beta 版本,用于測試目的,新軟件是在 Beta 提供給開發(fā)者一天后發(fā)布的。在 iOS 設備上安裝了來自公測網(wǎng)站的適當證書后,報名參加蘋果公測計劃的公測人員可以通過 OTA 下載新軟件的?更新。如果你已經(jīng)在使用 iOS 14.5 的 RC 版本,蘋果已經(jīng)增加了一個新的功能,讓你可以很容易地選...

史海拾趣

問答坊 | AI 解惑

Arm的成功之道講解

十幾年前,ARM開創(chuàng)性地提出采用開放的、可授權許可的IP來支持以微處理器為核心的系統(tǒng)級芯片(SoC),這個革命型的概念開創(chuàng)了芯片產(chǎn)業(yè)的新局面,同時也將IP業(yè)創(chuàng)造為當前最熱門和最令人覬覦的新經(jīng)濟產(chǎn)品。     而現(xiàn)在“每1秒鐘全世界就有10 ...…

查看全部問答∨

與初學者談低功耗設計

降低功耗不光能夠大大的節(jié)約電能還能簡化電源部分的設計,甚至可以用于手持設備上面使用,這些都已經(jīng)越來越成為未來產(chǎn) 品的設計方向了^_^ 1  降低功耗從MCU選型開始,一開始選型的時候就應該考慮選擇低功耗的MCU比如MSP430一類的為低功 ...…

查看全部問答∨

開關電源產(chǎn)品開發(fā)設計管理(項目經(jīng)理用)

開關電源產(chǎn)品開發(fā)設計管理(項目經(jīng)理用)…

查看全部問答∨

我想學嵌入式開發(fā)不知道怎么入手

有沒有那位高人能指點一下,萬分感謝!…

查看全部問答∨

請教關于cadence畫原理圖的問題

各位高手:     小弟初學cadence,在創(chuàng)建層次圖時,我在page1中創(chuàng)建了這樣一個層次圖:     然后在選中它->右鍵->Descend Hierarchy 出來的下層圖卻是: 請問為什么缺少輸出那兩個腳呢?? 謝謝各位?。 ?

查看全部問答∨

遇到難題了,請京津冀地區(qū)的朋友兼職

1.精通ARM或高端單片機。                                       2.熟悉人機界面及操作系統(tǒng)設計:LCD顯示 ...…

查看全部問答∨

獲取網(wǎng)卡地址

我想寫一個Win32程序,要獲取無線網(wǎng)卡的網(wǎng)絡地址。有沒有SDK中提供的某個函數(shù)用于獲取地址的?比如: DWORD WINAPI WlanScan(   __in        HANDLE hClientHandle,   __in     ...…

查看全部問答∨

討論一下 TP-LINK 寬帶路由器 里邊用的是什么嵌入式操作系統(tǒng)?

這幾年,TP-LINK 寬帶路由器 隨處可見。朋友單位里用的一個,我看了一下,原來用的也是 ARM9 的 CPU,所以我想問問各位朋友,它里邊有操作系統(tǒng)嗎?如果有,那用的是什么操作系統(tǒng)?…

查看全部問答∨

AVR的問題

第一種: #include<avr/io.h> #include<avr/sleep.h> #include<avr/signal.h> #include<avr/interrupt.h> #include<avr/delay.h> void port_init() {         DDRB = 0xFF;       ...…

查看全部問答∨
小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 万年县| 景洪市| 湖南省| 孟州市| 海淀区| 西和县| 兴安县| 呼伦贝尔市| 孟州市| 沾益县| 阿巴嘎旗| 额尔古纳市| 义乌市| 黄梅县| 会东县| 喀喇沁旗| 诸城市| 云安县| 于田县| 博野县| 灵丘县| 故城县| 苏尼特左旗| 桐城市| 射阳县| 调兵山市| 九江市| 宜黄县| 含山县| 上虞市| 定远县| 峨山| 皮山县| 治县。| 敦化市| 梅河口市| 松桃| 礼泉县| 巴塘县| 常宁市| 庆安县|