一、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 #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ù)
上一篇:s3c2440的LCD驅動程序
下一篇:基于arm的LM3S811微控制器與TH12864顯示模塊的技術應用
推薦閱讀
史海拾趣
成立與發(fā)展: Asahi Kasei Microsystems(AKM)成立于1983年,是日本旭化成集團旗下的一家子公司,總部位于東京。該公司主要致力于集成電路和半導體解決方案的研發(fā)和生產(chǎn)。AKM的創(chuàng)始目標是為市場提供高質量、高性能的模擬芯片和數(shù)字芯片,以滿足消費電子、通信、汽車和工業(yè)等行業(yè)的需求。
產(chǎn)品創(chuàng)新: AKM在模擬和數(shù)字領域取得了一系列創(chuàng)新成果。其中,其聲音處理技術尤為突出,涵蓋了高保真音頻、語音識別和聲音傳感器等領域。AKM的音頻解決方案在高端音響、耳機、智能手機和汽車音響系統(tǒng)中得到廣泛應用,為用戶帶來出色的聽覺體驗。
市場擴展: 隨著技術的不斷創(chuàng)新和產(chǎn)品線的拓展,AKM逐漸在全球范圍內(nèi)建立了廣泛的客戶群體。除了日本市場外,其產(chǎn)品遠銷亞洲、歐洲和美洲等地區(qū)。AKM的產(chǎn)品在全球范圍內(nèi)備受認可,并贏得了眾多合作伙伴的信任與支持。
技術合作: 為了保持在市場上的競爭優(yōu)勢,AKM積極尋求與其他公司和機構的技術合作。通過與聲學專家、電子設備制造商和汽車制造商等行業(yè)領先企業(yè)的合作,AKM不斷吸收和借鑒先進的技術理念,推動產(chǎn)品創(chuàng)新和技術進步。
未來展望: 面對日益激烈的市場競爭和技術變革,AKM將繼續(xù)加強研發(fā)投入,不斷提升產(chǎn)品質量和技術水平。同時,AKM將積極應對全球經(jīng)濟形勢和市場需求的變化,拓展新的業(yè)務領域,為客戶提供更加全面和專業(yè)的解決方案。
Amprobe是一家專業(yè)生產(chǎn)測試儀器的公司,為電子行業(yè)提供各種測試和測量解決方案。以下是Amprobe公司發(fā)展的五個相關故事:
創(chuàng)立與初期發(fā)展:Amprobe公司創(chuàng)立于1948年,總部位于美國華盛頓州埃弗雷特市。最初,公司專注于生產(chǎn)便攜式測試儀器,如電表、電壓計和電流計等,為電工、維修人員和工程師提供便捷的測量工具。公司以其可靠的產(chǎn)品質量和簡便易用的設計在市場上建立了良好的聲譽。
技術創(chuàng)新與產(chǎn)品擴展:隨著技術的發(fā)展和市場需求的變化,Amprobe公司不斷進行技術創(chuàng)新,并擴展了產(chǎn)品線。除了傳統(tǒng)的電表和電壓計,公司開始開發(fā)數(shù)字式測試儀器、熱像儀、電池測試儀等高端產(chǎn)品,以滿足客戶對更高精度和更多功能的需求。
全球市場拓展:隨著全球經(jīng)濟一體化的發(fā)展,Amprobe公司積極拓展國際市場。公司在歐洲、亞洲、南美等地設立了銷售代表處和分支機構,建立了完善的全球銷售網(wǎng)絡。通過與當?shù)亟?jīng)銷商和合作伙伴合作,公司的產(chǎn)品銷售已經(jīng)覆蓋了全球范圍,為客戶提供及時的技術支持和服務。
質量控制與認證:Amprobe公司高度重視產(chǎn)品質量控制,嚴格遵循國際質量管理標準。公司的生產(chǎn)工藝和質量管理體系通過了ISO 9001質量管理體系認證,并獲得了歐洲CE認證和美國UL認證等產(chǎn)品認證。通過持續(xù)改進和質量監(jiān)控,公司確保產(chǎn)品符合客戶的要求和行業(yè)標準。
持續(xù)發(fā)展與未來規(guī)劃:Amprobe公司未來將繼續(xù)致力于技術創(chuàng)新和產(chǎn)品研發(fā),不斷推出符合市場需求的新產(chǎn)品。公司計劃加強與客戶的合作關系,深入了解客戶的需求,提供定制化的解決方案。同時,公司將繼續(xù)拓展國際市場,加強與全球合作伙伴的合作,實現(xiàn)持續(xù)穩(wěn)健的發(fā)展。
隨著全球環(huán)保意識的提高,A-BRIGHT公司積極響應環(huán)保號召,將環(huán)保理念融入到產(chǎn)品研發(fā)和生產(chǎn)中。公司研發(fā)了一系列節(jié)能環(huán)保的電子產(chǎn)品,不僅滿足了客戶的需求,也為全球環(huán)保事業(yè)做出了貢獻。這一舉措提升了A-BRIGHT的品牌形象,也為其在競爭激烈的市場中贏得了更多客戶的青睞。
這些故事雖然是虛構的,但它們基于電子行業(yè)的發(fā)展趨勢和可能情況,展示了A-BRIGHT公司可能的發(fā)展路徑和成功因素。希望這些故事能夠滿足您的需求。
艾吉芯公司深知人才是企業(yè)發(fā)展的核心動力。因此,公司高度重視人才培養(yǎng)和團隊建設。通過引進高素質的研發(fā)人才和管理人才,艾吉芯建立了一支高效、專業(yè)的團隊。同時,公司還注重員工的培訓和發(fā)展,為員工提供廣闊的職業(yè)發(fā)展空間和良好的工作環(huán)境。
隨著環(huán)保意識的逐漸提升,電子行業(yè)開始尋求更加環(huán)保的CUI材料和生產(chǎn)工藝。一些公司投入大量研發(fā)資金,成功開發(fā)出低揮發(fā)性有機化合物(VOC)含量的CUI涂料,不僅降低了生產(chǎn)過程中的環(huán)境污染,還提高了產(chǎn)品的環(huán)保性能。
轉折:2006年,GarrettCom迎來了一個重要的轉折點——收購變電站網(wǎng)絡產(chǎn)品領導者DYMEC公司。這一收購不僅增強了GarrettCom在變電站自動化領域的實力,還為其帶來了更多的技術資源和市場份額。
影響:通過整合DYMEC的技術和產(chǎn)品,GarrettCom進一步鞏固了其在變電站網(wǎng)絡通信技術方面的領先地位。公司的產(chǎn)品和解決方案被廣泛應用于全球各地的變電站項目中,為電力系統(tǒng)的穩(wěn)定運行提供了堅實的通信保障。
十幾年前,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一類的為低功 ...… 查看全部問答∨ |
各位高手: 小弟初學cadence,在創(chuàng)建層次圖時,我在page1中創(chuàng)建了這樣一個層次圖: 然后在選中它->右鍵->Descend Hierarchy 出來的下層圖卻是: 請問為什么缺少輸出那兩個腳呢?? 謝謝各位?。 ? 查看全部問答∨ |
|
我想寫一個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)?… 查看全部問答∨ |
設計資源 培訓 開發(fā)板 精華推薦
- 艾邁斯歐司朗進一步優(yōu)化紅外激光產(chǎn)品 滿足極高要求3D傳感應用需求
- 大聯(lián)大詮鼎集團推出基于立锜科技產(chǎn)品的140W電源適配器方案
- Vicor將在2025中國國際低空經(jīng)濟產(chǎn)業(yè)創(chuàng)新發(fā)展大會上展示eVTOL 800V平臺DC-DC解決方案
- 研華「Edge Computing & WISE-Edge in Action」主題論壇隆重登場
- 研華攜手高通 加速推動AIoT物聯(lián)網(wǎng)邊緣智慧創(chuàng)新
- 英飛凌攜手優(yōu)優(yōu)綠能,助力電能轉換效率新突破
- 邊緣 AI:物聯(lián)網(wǎng)實施新標桿
- 全局快門圖像傳感器技術的改進提升了機器視覺效率
- 聯(lián)想自研5nm芯片SS1101跑分曝光:對標第二代驍龍8
- Arm 與微軟合作,為基于 Arm 架構的 PC 和移動設備應用提供超強 AI 體驗
- 寧德時代與沃爾沃簽訂了動力電池合作協(xié)議,訂單金額上億
- Pictos指控三星竊取圖像傳感器技術
- 博世中國2018年業(yè)績持續(xù)增長,實現(xiàn)銷售額1126億人民幣
- 西部數(shù)據(jù)/小米連接器供應商創(chuàng)益通上市:股價漲300%
- 一汽解放與博世在柏林共同發(fā)布商用車FOTA技術
- iPhone SE二代曝光:這名稱、設計圖很有驚喜!
- I/O 2018:谷歌將強制廠商定期推送Android安全更新
- Librem 5手機公布系統(tǒng)UI界面:基于Debian+GNOME打造
- 諾基亞X已獲工信部入網(wǎng)許可:異形全面屏+后置雙攝
- 三星Note 9諜照曝光 外觀和Note 8基本沒變化