日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]ARM內(nèi)核的移植實(shí)例

uC/GUI是Micrigm公司推出的用于嵌入式系統(tǒng)的圖形用戶接口(graphics user interface,GUI)軟件包,由于uC/GUI完全以ANSI-C編寫,因此它與處理器無(wú)關(guān),可以很方便地移植到不同的操作系統(tǒng)和嵌入式微處理器上,并可支持不同尺寸的圖形液晶顯示器。它采用層次化的設(shè)計(jì),功能強(qiáng)大,移植方便,被廣泛地應(yīng)用于嵌入式領(lǐng)域,如PDA、機(jī)頂盒以及DVD NCD播放機(jī)等。本文詳細(xì)介紹了uC/GUI在ARM 內(nèi)核S3C44B0X的移植。實(shí)踐證明uC/GUI具有良好的實(shí)時(shí)性和穩(wěn)定性以及廣泛的應(yīng)用前景。

1、硬件連接與液晶顯示原理

本設(shè)計(jì)使用的硬件采用ARM7開(kāi)發(fā)板,液晶模塊為L(zhǎng)78C64,它是7.8in 256色STN型LCD顯示屏,分辨率為640×480。

LCD控制器外部接口信號(hào)的定義及其與LCD模塊各信號(hào)之間的對(duì)應(yīng)關(guān)系如下:

(1)VFRAME:LCD控制器與LCD驅(qū)動(dòng)器之間的幀同步信號(hào)。該信號(hào)負(fù)責(zé)指出LCD屏新的一幀開(kāi)始的時(shí)間。LCD控制器在一個(gè)完整幀顯示完成后立即插入一個(gè)VFRAME信號(hào),并開(kāi)始新一幀的顯示。該信號(hào)與LCD模塊的YD信號(hào)相對(duì)應(yīng);

(2)VLINE:LCD控制器和LCD驅(qū)動(dòng)器之間的線同步脈沖信號(hào)。該信號(hào)用于將LCD驅(qū)動(dòng)器水平線(行)移位寄存器的內(nèi)容傳送給LCD屏顯示。LCD控制器在整個(gè)水平線(整行)數(shù)據(jù)移入LCD控制器后,插入一個(gè)VLINE信號(hào)。該信號(hào)與LCD模塊的LP信號(hào)相對(duì)應(yīng);

(3)VCLK:LCD控制器和LCD驅(qū)動(dòng)器之間的像素時(shí)鐘信號(hào)。由LCD控制器送出的數(shù)據(jù)在VCLK的上升沿處送出,在VCLK的下降沿被LCD驅(qū)動(dòng)器采樣。該信號(hào)與LCD模塊的XCK信號(hào)相對(duì)應(yīng);

(4)VM:LCD驅(qū)動(dòng)器的AC信號(hào)。VM信號(hào)被LCD驅(qū)動(dòng)器用于改變行和列的電壓極性,從而控制像素點(diǎn)的顯示和熄滅。VM信號(hào)可以與每個(gè)幀同步,也可以與可變數(shù)量的VLINE信號(hào)同步;

(5)VD3~0 LCD:像素點(diǎn)的數(shù)據(jù)輸入端口。與LCD模塊的D3~0相對(duì)應(yīng):

(6)VD7~4 LCD:像素點(diǎn)的數(shù)據(jù)輸入端口。與LCD模塊的D7~4相對(duì)應(yīng)。

液晶顯示原理:寫滿整個(gè)屏的數(shù)據(jù)稱為1個(gè)“幀”數(shù)據(jù),YD是幀同步信號(hào),該信號(hào)啟動(dòng)LCD屏的新一幀數(shù)據(jù)。兩個(gè)YD脈沖之間的時(shí)間長(zhǎng)度稱為幀周期。根據(jù)LCD模塊的特性,刷新時(shí)間為12~14ms,頻率為70~80Hz。每一幀包括480個(gè)LP脈沖。LP為行(共480行)數(shù)據(jù)輸入鎖存信號(hào),也就是行同步脈沖信號(hào)。該信號(hào)啟動(dòng)LCD屏的新一行數(shù)據(jù)。XCK為行數(shù)據(jù)輸入信號(hào),也就是每1行中像素點(diǎn)數(shù)據(jù)傳輸?shù)臅r(shí)鐘信號(hào)。每組8位的數(shù)據(jù)在XCK的下降沿被輸入鎖存,因此,每1行包括640×3/8個(gè)XCK脈沖信號(hào)。D0~D7是8位的顯示數(shù)據(jù)輸入信號(hào)。

2、驅(qū)動(dòng)程序設(shè)計(jì)

下面分三步完成液晶的初始化。

(1)I/O口的初始化

由于采用S3C44B0X的PC接口和PD接口作為L(zhǎng)CD驅(qū)動(dòng)接口,因此,需要設(shè)置PC接口工作在第3功能狀態(tài)和PD接口工作在第2功能狀態(tài)。

(2)相應(yīng)控制寄存器的設(shè)置方法

S3C44B0X包括一個(gè)LCD控制器時(shí)序發(fā)生器TIMEGEN, 由它來(lái)產(chǎn)生VFRAM,VLINE,VCLK和VM 控制時(shí)序。這些控制信號(hào)由寄存器LCOCON1和LCDCON2進(jìn)行配置。通過(guò)對(duì)寄存器種配置項(xiàng)目的設(shè)置,TIMEGEN就可以產(chǎn)生適應(yīng)于各種LCD屏的控制信號(hào)了。

VFRAM和VLINE脈沖的產(chǎn)生是通過(guò)對(duì)LCDCON2寄存器的HOZVAL和LINEVAL進(jìn)行配置來(lái)完成的。每個(gè)域都與LCD的尺寸和顯示模式有關(guān)。

其中,HOZVAL=(顯示寬度/VD數(shù)據(jù)線位數(shù))-1。

在彩色模式下,顯示寬度=3×每行的像素點(diǎn)數(shù)。

對(duì)所選的液晶模塊,HOZVAL=(640×3/8)-1;LINEVAL=(顯示寬度)-1。

對(duì)所選的液晶模塊,LlNEVAL=480-1。

VCLK信號(hào)的頻率可以通過(guò)LCDCON1寄存器的CLKVAL域來(lái)確定,即

VCLK=MCLK/(CLKVAL×2)

LCD控制器的最大VCLK頻率為16.5MHz,幾乎支持所有已有的LCD驅(qū)動(dòng)器。由于上述關(guān)系,CLKVAL的值決定了VCLK的頻率。為了確定CLKVAL的值,應(yīng)該計(jì)算一下LCD控制器向VD端口傳輸數(shù)據(jù)的速率,以便使VCLK的值大于數(shù)據(jù)傳輸?shù)乃俾省?/p>

數(shù)據(jù)傳輸速率的公式為:

數(shù)據(jù)傳輸速率=HS×VS×FR×MV

其中,HS—LCD的行像素值;VS—LCD的列像素值:FR—幀速率;MV—模式值,這里取8位單掃描,彩色。

對(duì)于所選用的液晶模塊:HS=640;VS=480;FR=70Hz:MV=3/8。因此,數(shù)據(jù)傳輸速率=640×480×70×3/8=8,064,000Hz。

VCLK值應(yīng)該大于8MHz而小于16MHz,因此,CLKVAL可以取9~15。

(3)完整的液晶初始化程序

C程序

void LCD_Init_Controler()

{rLCDCON1=(0)|(2<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_COLOR<<12);

//disable,8B_SNGL_SCAN,WDLY=8clk,WLH=8clk,rLCDCON2=(LINEVAL)|(HOZVAL_COLOR<<10)|(10<<21);

//LINEBLANK=10(without any calculation)

rLCDSADDR1= (0x3<<27) | (((U32)frameBuffer256>>22)<<21)|M5D((U32)frameBuffer256>>1);

//256-color,LCDBANK,LCDBASEU

rLCDSADDR2=M5D((((U32)frameBuffer256+(SCR_XSIZE*LCD_YSIZE))>>1))|(MVAL<<21);

rLCDSADDR3= (LCD_XSIZE/2) | (((SCR_XSIZE-LCD_XSIZE)/2)<<9);

//The following valuehas to be changed forbetter display.

rREDLUT=0xfdb96420;

rGREENLUT=0xfdb96420;

rBLUELUT=0xfb40;

rDITHMODE=0x0;

rDP1_2=0xa5a5;

rDP4_7=0xba5da65;

rDP3_5=0xa5a5f;

rDP2_3=0xd6b;

rDP5_7=0xeb7b5ed;

rDP3_4=0x7dbe;

rDP4_5=0x7ebdf;

rDP6_7=0x7fdfbfe;

rLCDCON1= (1)|(2<<5)|(0<<7)|(0x3<<8)|(0x3<<10)|(4<<12);

}

經(jīng)過(guò)以上幾步,就完成了液晶的硬件驅(qū)動(dòng),下面就是移植軟件包,調(diào)用底層驅(qū)動(dòng),完成復(fù)雜的顯示任務(wù)。

3、uC/GUI軟件包的移植

3.1 uC/GUI特點(diǎn)

(1)支持任何8位、16位和32位的CPU,只要求CPU具有相應(yīng)的ANSI-C編譯器即可;

(2)所有硬件接口定義都使用可配置的宏;

(3)字符、位圖可顯示與LCD的任意點(diǎn),并不限制與字節(jié)長(zhǎng)度的整數(shù)倍數(shù)地址;[!--empirenews.page--]

(4)所有程序在長(zhǎng)度和速度方面都進(jìn)行了優(yōu)化,結(jié)構(gòu)清晰;

(5)對(duì)于慢速的LCD控制器,可以使用緩沖存儲(chǔ)器減少訪問(wèn)時(shí)間,提高顯示速度。

3.2 uC/GUl移植步驟

在使用uC/GUI時(shí),可以按照以下幾個(gè)步驟來(lái)進(jìn)行:

(1)按照需要,定制uC/GUI;

(2)指定硬件設(shè)備的地址,編寫接口驅(qū)動(dòng)代碼;

(3)編譯、鏈接、調(diào)試?yán)映绦?

(4)修改例子程序,并測(cè)試增加需要的功能;

(5)編寫自己的應(yīng)用程序。

3.3 具體實(shí)現(xiàn)

(1)首先介紹uC/GUI的目錄結(jié)構(gòu)和基本配置。

uC/GUI主要目錄如下:

GUI/ConvertMono 使用黑白顯示設(shè)備時(shí),所要使用的灰度轉(zhuǎn)換函數(shù)

GUI/ConvertColor 使用彩色顯示設(shè)備時(shí),使用的色彩轉(zhuǎn)換函數(shù)

GUI/Config 包含了對(duì)uC/GUI進(jìn)行配置的一些文件

GUI/Core uC/GUI核心代碼

GUI/Font uC/GUI與字體相關(guān)的代碼文件

GUI/LCDDriver LCD驅(qū)動(dòng)代碼文件

GUI/MemDev 內(nèi)存設(shè)備支持文件代碼

GUI/Touch 輸入設(shè)備支持的文件代碼

GUI/Widget uC/GU1支持的控件代碼,包括編輯框、列表框、按鈕和選擇框等

GUI/WM uC/GUI窗口管理部分代碼

(2)修改uC/GUI,使之適于移植。

在ADS環(huán)境中新建一個(gè)工程,將上述gui文件夾下的所有文件加入工程。

將Config文件夾下的3個(gè)文件GUIConf.h、

GUITouchConf.h和LCDConf.h加入新工程,如下修改LCDConf.h的內(nèi)容:

C程序

/*LCDConf.h*/

#ifndef LCDCONF_H

#define LCDCONF_H

#define LCDG4 //lcd顏色數(shù),必須定義,LCDMONO(單色),LCDG4(四級(jí)灰度),LCDG16(16級(jí)灰度)

#define LCD_XSIZE(640) /* LCD水平分辨率 */

#define LCD_YSIZE(480) /* LCD垂直分辨率 */

#define LCD BITSPERPIXEL(8)#endif /*LCDC0NF_H*//*以下是S3C44B0X LCD控制器的配置*/

#include "..incoption.h"

#define SCR_XSIZE (640) //視窗屏幕大小

#define SCR_YSIZE (480)#define LCD_XSIZE (640) //液晶屏幕大小

#define LCD_YSIZE (480)#define M5D(n)((n)&0x1fffff)

#define ARRAY_SIZE_G4(SCR_XSIZE/4*SCR_YSIZE)

#define HOZVAL (LCD_XSIZE/4-1)

#define HOZVAL_COLOR (LCD_XSIZE*3/8-1)

#define LINEVAL (LCD_YSIZE-1)

#define MVAL (13)

#define CLKVAL_G4 (10)

#define MVAL_USED 0

#endif /*LCDCONF_H */

(3)加載LCD驅(qū)動(dòng)。

LCD驅(qū)動(dòng)程序如前面所述,保存在lcd44b0.c中。出了底層的初始化函數(shù)LCD_Init_Controler()以外,還需要做以下修改,這里只提關(guān)鍵部分。

主要進(jìn)行相關(guān)的寄存器配置,以及和GUI的接口程序。這里只提及關(guān)鍵部分。

① 定義顯示緩沖區(qū)時(shí)使用的char數(shù)據(jù)類型,它是8bit的:

unsigned char Bmp[ARRAY_SIZE_G16];//液晶顯示緩沖數(shù)組

② 定義讀寫緩沖區(qū)時(shí)使用的數(shù)據(jù)類型,也是8bit的U8:

#define LCD_READ_MEM (Off)*((U8*)(frameBuffer256+(((U32)(Off)))))

#define LCD_WRRITE_MEM(Off,data)*((U8*)frameBuffer256+(((U32)(Off)))))=data

#define LCD_WRITE_REG(Off,data)

⑧ 定義液晶總線寬度定義位8bit:

#ifndef LCD_BUSWIDTH

#define LCD_BUSWIDTH(8)

#endif

④ 定義字節(jié)順序:

#define LCD_SWAP_BYTE_ORDER(0)

至此uC/GUI的移植基本上已經(jīng)完成了。當(dāng)然這里只提供了移植的關(guān)鍵部分,更多更完整的移植還需要做不少的工作,如觸控屏的移植、鍵盤鼠標(biāo)的移植以及中文字體的移植等。詳情請(qǐng)參閱uC/GUI手冊(cè)中Getting Started一章。

4、數(shù)據(jù)顯示程序設(shè)計(jì)

數(shù)據(jù)顯示程序主要是基于uC/GUI平臺(tái)的GUI函數(shù)庫(kù),完成字符、曲線的繪制。與畫線相關(guān)的GUI函數(shù)有:

GUI DrawHLine()

原型:void GUI_DrawLine(int x0,int y0,int x1,int y1);

其中,x0、y0、x1、y1分別為UGI坐標(biāo)系下的起點(diǎn)和終點(diǎn)的橫坐標(biāo)和縱坐標(biāo)。

GUI DispDec()

原型:void GUI_DispDec(I32 v,U8 Len);

其中,v為要顯示的十進(jìn)制變量值,Len為要顯示的數(shù)據(jù)的位數(shù)。

5、總結(jié)

本文主要介紹了基于ARM7內(nèi)核S3C44B0X和L78C64液晶模塊硬件平臺(tái)的uC/GUI的移植,以及在工程上的應(yīng)用,經(jīng)過(guò)實(shí)際應(yīng)用發(fā)現(xiàn),uC/GUI功能強(qiáng)大,響應(yīng)迅速,穩(wěn)定性高,具有廣泛的應(yīng)用前景。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀

在嵌入式系統(tǒng)開(kāi)發(fā)中,圖形界面(GUI)的構(gòu)建常面臨硬件資源受限、開(kāi)發(fā)周期緊張等挑戰(zhàn)。Adafruit GFX庫(kù)憑借其跨平臺(tái)兼容性、輕量化設(shè)計(jì)和豐富的API,成為開(kāi)發(fā)者快速實(shí)現(xiàn)專業(yè)級(jí)圖形界面的利器。本文將從實(shí)戰(zhàn)角度解析該庫(kù)...

關(guān)鍵字: Adafruit GFX 圖形界面 GUI

臺(tái)北2026年1月6日 /美通社/ -- 全球電腦領(lǐng)導(dǎo)品牌技嘉科技今(6)日于 GIGABYTE EVENT 發(fā)表"Refine & Define"核心理念。技嘉透過(guò)持續(xù)精煉硬件與軟體的效能基...

關(guān)鍵字: DEFINE AI BSP OLED

倫敦2025年10月22日 /美通社/ -- 全球領(lǐng)先的專業(yè)技能與語(yǔ)言認(rèn)證評(píng)估機(jī)構(gòu)PeopleCert(培思特集團(tuán))正式宣布,全面收購(gòu)英國(guó)倫敦城市行業(yè)協(xié)會(huì)(City & Guilds London Institu...

關(guān)鍵字: GUI CE BSP INSTITUTE

室內(nèi)空氣質(zhì)量影響著從生產(chǎn)力到健康的方方面面。無(wú)論你是在實(shí)驗(yàn)室里工作,在教室里教書(shū),還是在辦公桌前搗鼓,這個(gè)顯示器都能給你實(shí)時(shí)的反饋

關(guān)鍵字: Wio終端 顯示器 GUI Fusion 360

上海2025年7月28日 /美通社/ -- 在世界人工智能大會(huì)(WAIC)期間,榮耀正式發(fā)布自研多模態(tài)感知大模型——MagicGUI大模型。作為榮耀推出的首個(gè)GUI開(kāi)源大模型...

關(guān)鍵字: GUI MAGIC 開(kāi)源 模型

基礎(chǔ)設(shè)施作為代碼(IaC),是一種用代碼定義基礎(chǔ)設(shè)施元素的實(shí)踐。這與通過(guò)GUI(圖形用戶界面)來(lái)實(shí)現(xiàn)它相反,例如,AWS控制臺(tái)。其思想是,為了具有確定性和可重復(fù)性,云基礎(chǔ)設(shè)施必須在一個(gè)基于用編程語(yǔ)言表達(dá)的模型的抽象描述中...

關(guān)鍵字: IaC GUI

加利福尼亞庫(kù)爾弗城2024年7月16日 /美通社/ --?Snail, Inc. (納斯達(dá)克股票代碼: SNAL) (以下簡(jiǎn)稱"蝸牛游戲"或"公司")是一家領(lǐng)先的全球獨(dú)立開(kāi)發(fā)商和發(fā)行商,專注于互動(dòng)數(shù)字娛樂(lè),今日宣布方舟:...

關(guān)鍵字: iOS 安卓系統(tǒng) 移植 移動(dòng)平臺(tái)

【2024年3月7日,德國(guó)慕尼黑訊】在競(jìng)爭(zhēng)激烈的全球半導(dǎo)體市場(chǎng),制造商一直在努力縮短產(chǎn)品上市時(shí)間。同時(shí),他們對(duì)流暢、高分辨率圖形顯示器的需求也在日益增長(zhǎng)。為了滿足這些市場(chǎng)需求,英飛凌科技股份公司(FSE代碼:IFX /...

關(guān)鍵字: MCU GUI 圖形顯示器

以科技創(chuàng)新力量,重新定義產(chǎn)業(yè)辦公及產(chǎn)業(yè)洞察視角 成都2023年8月16日 /美通社/ -- 由仲量聯(lián)行(紐交所代碼:JLL)主辦的睿見(jiàn)論壇之"REDEFINE 煥新成都產(chǎn)鏈 · 重構(gòu)城市價(jià)值&q...

關(guān)鍵字: 數(shù)據(jù)分析 樓宇 BSP DEFINE

本文利用Matlab GUI設(shè)計(jì)通過(guò)串口進(jìn)行數(shù)據(jù)發(fā)送和接收的界面,并利用內(nèi)置于Matlab的串口通信API實(shí)現(xiàn)串口數(shù)據(jù)發(fā)送與接收功能。

關(guān)鍵字: matlab GUI 串口通信
關(guān)閉