第一篇:實(shí)驗(yàn)四 Nios II 嵌入式處理器關(guān)浩亮2012029180002
關(guān)浩亮2012029180002 實(shí)驗(yàn)四 Nios II 嵌入式處理器
一、實(shí)驗(yàn)要求:
1、實(shí)現(xiàn)一個(gè)由Nios II控制的由18個(gè)發(fā)光二級(jí)管組成的流水燈效果;
2、為了點(diǎn)亮LED燈,程序運(yùn)行速度不要太快,需要進(jìn)行適當(dāng)延時(shí)。
二、實(shí)驗(yàn)?zāi)康模?/p>
1,掌握基于SOPC Builder和Nios SBT實(shí)現(xiàn)嵌入式系統(tǒng)的硬件、軟件設(shè)計(jì)過程; 2,學(xué)會(huì)根據(jù)需求定制一個(gè)Nios II硬件系統(tǒng),并在此基礎(chǔ)上編寫應(yīng)用程序。
三、實(shí)驗(yàn)原理和實(shí)驗(yàn)內(nèi)容:
1、SOPC技術(shù)
SOPC(System On a Programmable Chip)是指用可編程邏輯技術(shù)把整個(gè)系統(tǒng)放到一塊硅片上。它是一種特殊的嵌入式系統(tǒng)。一方面,它是片上系統(tǒng)(SOC),即由單個(gè)芯片完成整個(gè)系統(tǒng)的主要邏輯功能;另一方面,它是可編程系統(tǒng),具有靈活的設(shè)計(jì)方式,可裁減、擴(kuò)充、升級(jí),并具備軟硬件在系統(tǒng)可編程的功能。這項(xiàng)技術(shù)將EDA、計(jì)算機(jī)設(shè)計(jì)、嵌入式系統(tǒng)、DSP等技術(shù)融為一體。SOPC 結(jié)合了SOC 和PLD、FPGA 各自的優(yōu)點(diǎn),一般具備以下基本特征:至少包含一個(gè)嵌入式處理器內(nèi)核;具有小容量片內(nèi)高速RAM 資源;豐富的IP Core 資源可供選擇;足夠的片上可編程邏輯資源;處理器調(diào)試接口和FPGA 編程接口;可包含部分可編程模擬電路;單芯片,低功耗,微封裝。
隨著EDA 技術(shù)的發(fā)展和大規(guī)??删幊唐骷阅艿牟粩嗵岣撸琒OPC 技術(shù)已被廣泛應(yīng)用于許多領(lǐng)域。首先,SOPC 在極大提高了許多電子系統(tǒng)性能價(jià)格比的同時(shí),還開辟了許多新的應(yīng)用領(lǐng)域,如高端的數(shù)字信號(hào)處理、通信系統(tǒng)、軟件無線電系統(tǒng)的設(shè)計(jì)、微處理器及大型計(jì)算機(jī)處理器的設(shè)計(jì)等等;同時(shí),由于SOPC 具有基于EDA 技術(shù)標(biāo)準(zhǔn)的設(shè)計(jì)語(yǔ)言與系統(tǒng)測(cè)試手段、規(guī)范的設(shè)計(jì)流程與多層次的仿真功能以及高效率的軟硬件開發(fā)與實(shí)現(xiàn)技術(shù),使得SOPC 及其實(shí)現(xiàn)技術(shù)無可爭(zhēng)議地成為現(xiàn)代電子技術(shù)最具時(shí)代特征的典型代表。與基于ASIC 的SOC 相比,SOPC 具有更多的特點(diǎn)與吸引力:開發(fā)軟件成本低,硬件實(shí)現(xiàn)風(fēng)險(xiǎn)低,產(chǎn)品上市效率高,系統(tǒng)結(jié)構(gòu)可重構(gòu)及硬件可升級(jí)等,它還具有設(shè)計(jì)者易學(xué)易用、高附加值、產(chǎn)品設(shè)計(jì)成本低等優(yōu)勢(shì)。
關(guān)浩亮2012029180002 Nios II是Altera公司推出的新一代軟核嵌入式處理器。借助于Nios II、FPGA和Altera公司完整的開發(fā)套件,可以快速實(shí)現(xiàn)設(shè)計(jì)和驗(yàn)證,有效提高系統(tǒng)性能。
2、基于Nios II的硬件開發(fā)基本過程
(1)定義NiosⅡ嵌入式處理器系統(tǒng):使用SOPC Builder系統(tǒng)綜合軟件選取合適的CPU、存儲(chǔ)器以及外圍器件,并定制其功能。
(2)指定目標(biāo)器件、分配引腳、編譯硬件:使用QuartusⅡ選取Altera器件系列,并對(duì)SOPC Builder生成的HDL設(shè)計(jì)文件進(jìn)行布局布線;再選取目標(biāo)器件,分配管腳,進(jìn)行硬件編譯選項(xiàng)或時(shí)序約束的設(shè)置。編譯,生成網(wǎng)表文件和配置文件。
(3)硬件下載:使用QuartusⅡ軟件和下載電纜,將配置文件下載到開發(fā)板上的FPGA中。
3、基于Nios II的軟件開發(fā)基本過程
(1)在使用SOPC Builder/Qsys進(jìn)行硬件設(shè)計(jì)的同時(shí),就可以開始編寫?yīng)毩⒂谄骷腃/C++軟件,比如算法或控制程序。用戶可以使用現(xiàn)成的軟件庫(kù)和開放的操作系統(tǒng)內(nèi)核來加快開發(fā)過程。
(2)在NiosⅡSBT中建立新的軟件工程時(shí),SBT會(huì)根據(jù)SOPC Builder/Qsys對(duì)系統(tǒng)的硬件配置自動(dòng)生成一個(gè)定制HAL(硬件抽象層)系統(tǒng)庫(kù)。這個(gè)庫(kù)能為程序和底層硬件的通信提供接口驅(qū)動(dòng)程序。
(3)使用NiosⅡSBT對(duì)軟件工程進(jìn)行編譯、調(diào)試。
(4)將硬件設(shè)計(jì)下載到開發(fā)板后,就可以將軟件下載到開發(fā)板上并在硬件上運(yùn)行。
4、基于Nios II的流水燈實(shí)現(xiàn)
在Nios II處理器定制完成后,編寫程序控制與發(fā)光二極管相連的引腳電平,循環(huán)點(diǎn)亮每一個(gè)發(fā)光二極管,同時(shí)熄滅其它二極管,實(shí)現(xiàn)簡(jiǎn)單的流水燈效果。其基本結(jié)構(gòu)如下圖所示:
關(guān)浩亮2012029180002 CLKPIO_0PIO_1LED_0LED_1CPURESETPIO_171.圖中,CLK為CPU的運(yùn)行時(shí)鐘;RESET為CPU的復(fù)位信號(hào),一般與電源VCC相連,當(dāng)系統(tǒng)上電時(shí)自動(dòng)完成處理器的復(fù)位;并行I/O引腳PIO_0~PIO_17分別與發(fā)光二極管相連,用于控制二極管的發(fā)光和熄
??LED_17四.實(shí)驗(yàn)設(shè)計(jì)及仿真波形結(jié)果:
硬件設(shè)計(jì)步驟為:(1)(2)創(chuàng)建QuartusⅡ工程
Nios II 軟核配置:?jiǎn)?dòng)SOPC Builder,對(duì)系統(tǒng)進(jìn)行命名,添加Nios II Processor,經(jīng)濟(jì)型內(nèi)核“Nios II/e”,JTAG Debug Module配置,配置存儲(chǔ)器,配置并行I/O口,(3)完成硬件設(shè)計(jì):完成Nios II 軟核配置后,回到Quartus II ; ? 在原理圖編輯窗口中單擊鼠標(biāo)右鍵將打開一個(gè)浮動(dòng)菜單,選擇“Insert→Symbol”命令打開電路符號(hào)“Symbol”選擇對(duì)話框,或者雙擊原理圖空白處。在對(duì)話框左側(cè)的“Libraries”選擇欄中選擇Project下的“Nios2WalLd”,右邊的符號(hào)窗口將出現(xiàn)對(duì)應(yīng)的電路符號(hào)。這個(gè)模塊就是SOPC Builder工具產(chǎn)生的Nios II軟核處理器系統(tǒng)。
? Nios II軟核處理器系統(tǒng)引腳“clk_50”應(yīng)該與時(shí)鐘輸入連接; 復(fù)位信號(hào)輸入端“reset_n”與電源符號(hào)“VCC”連接,當(dāng)芯片上電時(shí)自動(dòng)完成
關(guān)浩亮2012029180002 處理器的復(fù)位;引腳“pio_18led[17...0]”分別與18個(gè)發(fā)光二級(jí)管連接。
? 執(zhí)行命令A(yù)ssignments->Import Assignments?導(dǎo)入板載FPGA的引腳分配文件DE2_115_pin_assignments.csv,并正確命名原理圖上的引腳名,使之與正確引腳一一對(duì)應(yīng)。? 正確編譯。軟件設(shè)計(jì)步驟為:
Nios II嵌入式開發(fā)環(huán)境的軟件開發(fā)工作需要前面產(chǎn)生的Nios II軟核處理器系統(tǒng)硬件的支持。在SOPC Builder的“System Generation”選項(xiàng)卡的“Nios II Tools”欄目中單擊“Nios II Software Builder Tools for Eclipse”按鈕可以打開Nios II SBT開發(fā)平臺(tái)。Nios II SBT工程建立 :
在Quartus工程目錄下,建立“software”文件夾;
File->Switch Workspce->Other?,切換為上述“software”文件夾 建立項(xiàng)目
Nios II SBT工程設(shè)置 :
選擇Quartus工程目錄下的SOPC Information File,設(shè)定項(xiàng)目名,并選擇參考模板中的“Blank_project”,會(huì)自動(dòng)載入相關(guān)信息。C源程序設(shè)計(jì): File→New→Source File 編譯:
“Project→Build Project 編譯完成后,“console”欄目將給出儲(chǔ)存器的占用情況。之后硬件下載,然后調(diào)試/運(yùn)行程序。C語(yǔ)言程序代碼為:
關(guān)浩亮2012029180002 #include “system.h” #include “altera_avalon_pio_regs.h” void delay(void);int alt_main(void){
} void delay(void){ unsigned int i;i=1000000;unsigned char led_data;unsigned int led_code;while(1){
IOWR_ALTERA_AVALON_PIO_DATA(PIO_18LED_BASE,led_code);
} return 0;} delay();for(led_data=0;led_data<18;led_data++){ led_code = 0x001< 關(guān)浩亮2012029180002 } while(i>0){ } i--;實(shí)驗(yàn)板仿真結(jié)果如下: 關(guān)浩亮2012029180002 關(guān)浩亮2012029180002 關(guān)浩亮2012029180002 實(shí)驗(yàn)結(jié)果分析: 在實(shí)驗(yàn)板上,正確顯示了流水燈依次點(diǎn)亮的實(shí)驗(yàn)現(xiàn)象,圖示為流水燈依次點(diǎn)亮間隔時(shí)間的圖像結(jié)果,滿足實(shí)驗(yàn)要求,該實(shí)驗(yàn)成功的完成了。 五、問題及思考: 1、如何通過軟件設(shè)計(jì),將實(shí)驗(yàn)中的簡(jiǎn)單流水燈效果設(shè)計(jì)得更加多樣化? 在while循環(huán)語(yǔ)句中添加下面的程序段: for(led_data=0;led_data<18;led_data++) IOWR_ALTERA_AVALON_PIO_DATA(PIO_18LED_BASE,led_code);} { led_code =led_data>>0x001;delay(); 關(guān)浩亮2012029180002 可實(shí)現(xiàn)左右來回循環(huán)的流水燈,增加流水燈的設(shè)計(jì)效果。 2、如果將流水燈效果用實(shí)驗(yàn)板上的LCD來實(shí)現(xiàn),硬件和軟件上應(yīng)該做哪一些修改? LCD為液晶顯示屏,在硬件上需要將顯示屏的按鍵連接到原理圖的輸入輸出上。在軟件中,要將液晶屏初始化,并添加按鍵實(shí)現(xiàn)燈亮的程序塊。 六,心得體會(huì): 本實(shí)驗(yàn)完成了流水燈的實(shí)現(xiàn),根據(jù)課件的實(shí)驗(yàn)步驟內(nèi)容,基本掌握了基于SOPC Builder和Nios SBT實(shí)現(xiàn)嵌入式系統(tǒng)的硬件、軟件設(shè)計(jì)過程;學(xué)會(huì)了根據(jù)需求定制一個(gè)Nios II硬件系統(tǒng),并在此基礎(chǔ)上編寫應(yīng)用程序。程序需用C語(yǔ)言來寫,利用已有的Nios II嵌入式處理器實(shí)現(xiàn)了簡(jiǎn)單的流水燈依次點(diǎn)亮的實(shí)驗(yàn)。本實(shí)驗(yàn)使我明白了如何利用已設(shè)計(jì)好的嵌入式處理器來實(shí)現(xiàn)所需的具體實(shí)驗(yàn)。 專業(yè):自動(dòng)化1402 日期:2016.11.01 地點(diǎn):教2-104 成績(jī):________________ 實(shí)驗(yàn)報(bào)告 同組學(xué)生姓名:施興棋 學(xué)號(hào):3140103039 同組學(xué)生姓名:______________________________ 學(xué)號(hào):_____________________________________ 課程名稱: 《嵌入式系統(tǒng)》 實(shí)驗(yàn)序號(hào): 實(shí)驗(yàn)名稱: 基于μC/OS-II的LED流水燈控制實(shí)驗(yàn) 摘要: 利用μC/OS-II操作系統(tǒng)實(shí)現(xiàn)LED流水燈與蜂鳴器控制任務(wù) 一、實(shí)驗(yàn)?zāi)康?/p> (1)掌握LPC2200專用工程模板(for μC/OS-II)的使用 (2)能夠在SmartARM2200教學(xué)實(shí)驗(yàn)開發(fā)平臺(tái)上運(yùn)行基于μC/OS-II操作系統(tǒng)的程序。(3)掌握基于μC/OS-II的LED操作系統(tǒng)的用戶程序的編寫風(fēng)格 二、實(shí)驗(yàn)內(nèi)容 仔細(xì)閱讀給定程序,建立3個(gè)μC/OS-II的任務(wù),1個(gè)任務(wù)用于分別控制兩個(gè)LED(P2.30,P2.31)流水燈循環(huán)點(diǎn)亮,這里稱之為流水燈循環(huán)控制任務(wù),一個(gè)任務(wù)用于檢測(cè)KEY1按鍵輸入(P0.20口的輸入),這里稱之為按鍵檢測(cè)任務(wù);另外一個(gè)任務(wù)用于控制蜂鳴器響,這里稱之為蜂鳴器控制任務(wù)。蜂鳴器控制任務(wù)平時(shí)處于等待狀態(tài),當(dāng)按鍵檢測(cè)任務(wù)檢測(cè)到有效按鍵輸入時(shí),立即喚醒蜂鳴器控制任務(wù),并掛起LED流水燈循環(huán)任務(wù),當(dāng)無有效按鍵時(shí),兩個(gè)LED循環(huán)點(diǎn)亮,蜂鳴器無輸出。 三、實(shí)驗(yàn)前準(zhǔn)備工作 (1)連接EasyJTAG仿真器和SmartARM2200教學(xué)實(shí)驗(yàn)開發(fā)平臺(tái),然后安裝EasyJTAG仿真器的驅(qū)動(dòng)程序。(若已經(jīng)安裝過,此步省略。) (2)為ADS1.2增加LPC2200專用工程模板。(若已增加過,此步省略。) (3)建立一個(gè)項(xiàng)目目錄μC/OS-II,增加μC/OS2.52源代碼和移植代碼(arm文件夾)。還要將移植的PC服務(wù)代碼Arm_Pc復(fù)制到項(xiàng)目目錄μC/OS-II下。 (4)啟動(dòng)ADS1.2,使用ARM Executable Image for μC/OS-II(for LPC2200)工程模板建立一個(gè)工程GPIO,工程存儲(chǔ)在μC/OS-II目錄下。 (5)打開工程窗口user組中的main.c文件,根據(jù)給定的例程編寫實(shí)驗(yàn)程序并保存。(6)根據(jù)程序設(shè)計(jì)更改Os_cfg.h文件,配置μC/OS-II操作系統(tǒng)(本實(shí)驗(yàn)可默認(rèn)配置)。(7)選用DebugInExRam生成目標(biāo),然后編譯鏈接工程。 (8)將SmartARM2200教學(xué)實(shí)驗(yàn)開發(fā)平臺(tái)上的JP2,JP4跳線短接,JP10跳線設(shè)置為Bank0-RAM、Bank1-FLASH(生成目標(biāo)為DebugInExRam)。 (9)選擇Project-Debug,啟動(dòng)AXD進(jìn)行JTAG仿真調(diào)試。/ 4 (10)全速運(yùn)行程序,然后按下/放開KEY1鍵,監(jiān)聽蜂鳴器是否蜂鳴,LED流水燈是否按要求開通與關(guān)斷。 (11)當(dāng)仿真器調(diào)試通過后關(guān)閉AXD,在ADS1.2集成開發(fā)環(huán)境中選用RelOutChip生成目標(biāo),然后編譯鏈接工程。 (12)將SmartARM2200教學(xué)實(shí)驗(yàn)開發(fā)平臺(tái)上的JP2、JP4跳線短接,JP1跳線斷開,JP10跳線設(shè)置為Bank0-FLASH、Bank1-RAM,JP9跳線設(shè)置為OUTSIDE。 (15)選擇Project-Debug,啟動(dòng)AXD進(jìn)行JTAG仿真調(diào)試。此時(shí)EasyJTAG仿真器將會(huì)把程序下載到FLASH上。 注意:使用RelOutChip生成目標(biāo)時(shí),需要在H-JTAG中Load L“PC2200.hfc”文件來配置。(16)按SmartARM2200教學(xué)實(shí)驗(yàn)開發(fā)平臺(tái)上的RST復(fù)位鍵,觀察程序是否能脫機(jī)運(yùn)行。 實(shí)驗(yàn)程序編寫: #include “config.h” #include “stdlib.h” #define KEY1(1 << 20) /* P0.20為KEY1 */ #define BEEP(1 << 7) /* P0.07為蜂鳴器 */ #define LEDCON 0xf0000000 #define TaskStkLengh 64 //Define the Task0 stack length OS_STK TaskStk0[TaskStkLengh];//Define the Task0 stack 定義用戶任務(wù)0的堆棧 OS_STK TaskStk1[TaskStkLengh];//Define the Task1 stack 定義用戶任務(wù)1的堆棧 OS_STK TaskStk2[TaskStkLengh];//Define the Task1 stack 定義用戶任務(wù)2的堆棧 void Task0(void *pdata); //Task0 任務(wù)0 void Task1(void *pdata); //Task0 任務(wù)1 void Task2(void *pdata); //Task0 任務(wù)2 int main(void){ OSInit(); OSTaskCreate(Task0,(void *)0, &TaskStk0[TaskStkLengh1], 3); OSTaskCreate(Task2,(void *)2, &TaskStk2[TaskStkLengh-1], 5);for(;;) { OSTaskSuspend(OS_PRIO_SELF); OSTaskSuspend(5); IO2SET=0xffffffff; IO0CLR = BEEP; OSTimeDly(OS_TICKS_PER_SEC / 8); IO0SET = BEEP; OSTimeDly(OS_TICKS_PER_SEC / 4); IO0CLR = BEEP; OSTimeDly(OS_TICKS_PER_SEC / 8); IO0SET = BEEP; OSTimeDly(OS_TICKS_PER_SEC / 4); OSTaskResume(5); } } /*************Task1 任務(wù)1********************************************/ void Task1(void *pdata){ pdata = pdata; /* 避免編譯警告 */ for(;;) { OSTimeDly(OS_TICKS_PER_SEC / 50); /* 延時(shí)20毫秒 */ if((IO0PIN & KEY1)!= 0) { continue; } OSTimeDly(OS_TICKS_PER_SEC / 50); /* 延時(shí)20毫秒 */ if((IO0PIN & KEY1)!= 0) { continue; } OSTaskResume(2); while((IO0PIN & KEY1)== 0) { OSTimeDly(OS_TICKS_PER_SEC / 50); /* 延時(shí)20毫秒 */ OSTaskSuspend(5);//掛起任務(wù)2 } OSTaskResume(3); OSTaskResume(5); } } /************************Task2 任務(wù)2*************************************/ void Task2(void *pdata){ uint32 seed= 1;/ 4 } pdata = pdata;for(;;seed = seed>>1 |(seed &1)<<1){ IO2CLR = seed <<30 & LEDCON;OSTimeDly(OS_TICKS_PER_SEC/4);IO2SET = ~0;} 四、實(shí)驗(yàn)結(jié)果及分析 (1)簡(jiǎn)單描述μC/OS-II應(yīng)用程序的基本結(jié)構(gòu)。 每一個(gè)uC/OS-II應(yīng)用程序至少要有一個(gè)任務(wù),而且每一個(gè)任務(wù)必須被寫成無限循環(huán)的形式。(2)能否將實(shí)驗(yàn)參考程序的兩個(gè)任務(wù)組合成一個(gè)任務(wù)?這樣做有什么利弊? 可以。合并的話,優(yōu)點(diǎn)是免除了不少通信交流工作,減少共享資源的數(shù)量,減輕操作系統(tǒng)的負(fù)擔(dān),但缺點(diǎn)是任務(wù)的功能變繁雜,任務(wù)設(shè)計(jì)變得復(fù)雜,不利于整體程序的編寫。 (3)在實(shí)驗(yàn)參考程序中,如何設(shè)置任務(wù)的優(yōu)先等級(jí)?若在例程中設(shè)置按鍵檢測(cè)任務(wù)的優(yōu)先級(jí)高于蜂鳴器控制任務(wù)的優(yōu)先級(jí),程序應(yīng)如何運(yùn)行? 可以用OSTaskCreate函數(shù)設(shè)置任務(wù)的優(yōu)先等級(jí)。當(dāng)同時(shí)發(fā)生時(shí),程序會(huì)先運(yùn)行按鍵檢測(cè)任務(wù),然后再運(yùn)行蜂鳴器控制任務(wù)。 (4)按要實(shí)驗(yàn)要求完成實(shí)驗(yàn)程序編寫 五、心得體會(huì) 1.實(shí)驗(yàn)的時(shí)候粗心大意沒有注意到應(yīng)該使用ARM Executable Image for μC/OS-II(for LPC2200)工程模板來建立工程,依舊使用之前的模板導(dǎo)致浪費(fèi)了許多時(shí)間。2.編寫完程序后進(jìn)行編譯,一開始出現(xiàn)的實(shí)驗(yàn)現(xiàn)象是按鍵后蜂鳴器響而流水燈循環(huán)不變,修改程序后變?yōu)椋喊存I后蜂鳴器響流水燈循環(huán)停止,第二次按鍵后流水燈任務(wù)恢復(fù);再請(qǐng)教老師后,發(fā)現(xiàn)問題在于任務(wù)1沒有設(shè)置好流水燈任務(wù)(即任務(wù)2)的掛起與恢復(fù)。正確設(shè)置任務(wù)2的掛起后,發(fā)現(xiàn)現(xiàn)象為:按鍵后蜂鳴器響流水燈循環(huán)停止,按住按鍵不放流水燈任務(wù)恢復(fù),但在此過程中蜂鳴器鳴叫了兩次。嚴(yán)格要求的老師驗(yàn)收后不予通過,繼而我只好繼續(xù)修改程序,最終達(dá)到了老師的要求。 3.最終的實(shí)驗(yàn)現(xiàn)象為:按下按鍵后流水燈任務(wù)掛起,蜂鳴器響;長(zhǎng)按按鍵流水燈任務(wù)掛起蜂鳴器響,松開后流水燈任務(wù)恢復(fù)而蜂鳴器不響。/ 4 實(shí)驗(yàn)四 LCD顯示實(shí)驗(yàn) 一、LCD顯示原理 LCD顯示器是通過給不同的液晶單元供電,控制其光線的通過與否,從而達(dá)到顯示的目的。因此,LCD的驅(qū)動(dòng)控制歸于對(duì)每個(gè)液晶單元通斷電的控制,每個(gè)液晶單元都對(duì)應(yīng)著一個(gè)電極,對(duì)其通電,便可使用光線通過(也有剛好相反的,即不通電時(shí)光線通過,通電時(shí)光線不通過)。 光源的提供方式有兩種:透射式和反射式。筆記本電腦的LCD顯示屏即為透射式,屏后面有一個(gè)光源,因此外界環(huán)境可以不需要光源。而一般微控制器上使用的LCD為反射式,需要外界提供光源,靠反射光來工作。 LCD的驅(qū)動(dòng)控制 – 總線驅(qū)動(dòng)方式: 一般帶有驅(qū)動(dòng)模塊的LCD顯示屏使用總線驅(qū)動(dòng)方式,這種LCD可以方便地與各種低檔單片機(jī)進(jìn)行接口,如8051系列單片機(jī)。由于LCD已經(jīng)帶有驅(qū)動(dòng)硬件電路,因此模塊給出的是總線接口,便于與單片機(jī)的總線進(jìn)行接口。驅(qū)動(dòng)模塊具有八位數(shù)據(jù)總線,外加一些電源接口和控制信號(hào)。而且還自帶顯示緩存,只需要將要顯示的內(nèi)容送到顯示緩存中就可以實(shí)現(xiàn)內(nèi)容的顯示。由于只有八條數(shù)據(jù)線,因此常常通過引腳信號(hào)來實(shí)現(xiàn)地址與數(shù)據(jù)線復(fù)用,以達(dá)到把相應(yīng)數(shù)據(jù)送到相應(yīng)顯示緩存的目的。 掃描器控制方式LCD顯示屏沒有驅(qū)動(dòng)電路,需要與驅(qū)動(dòng)電路配合使用。這種LCD體積小,但需要另外的驅(qū)動(dòng)芯片。通??梢允褂脦в蠰CD驅(qū)動(dòng)能力的高檔MCU驅(qū)動(dòng),如ARM系列的S3C44B0。 S3C44B0中具有內(nèi)置的LCD控制器,它具有將顯示緩存中的圖象數(shù)據(jù)傳輸?shù)酵獠縇CD驅(qū)動(dòng)電路的邏輯功能。S3C44B0中內(nèi)置的LCD控制器可支持灰度LCD和彩色LCD??梢灾С謫紊?、4 級(jí)灰度和16 級(jí)灰度模式的灰度LCD以及256級(jí)彩色。對(duì)于不同尺寸的LCD,具有不同數(shù)量的垂直和水平象素、數(shù)據(jù)接口的數(shù)據(jù)寬度、接口時(shí)間及刷新率,而LCD控制器可以進(jìn)行編程控制相應(yīng)的寄存器值,以適應(yīng)不同的LCD顯示板。二 JXARM9-2410 LCD圖形顯示原理: JXARM9-2410的LCD顯示模塊由S3C2410的LCD控制器和256色其顯示方式以直接操作顯示緩沖區(qū)的內(nèi)容進(jìn)行,LCD控制器會(huì)通過DMA從顯示緩沖區(qū)中獲取數(shù)據(jù),不需要CPU干預(yù)。彩色LCD顯示器組成。本系統(tǒng)采用的LCD分辨率為320X240,工作在256色彩色顯示模式,在該模式下,顯示緩沖區(qū)中的一個(gè)字節(jié)數(shù)據(jù)代表LCD上的一個(gè)點(diǎn)的顏色信息,因此,所需要的顯示緩沖區(qū)大小為320X240X1字節(jié)。其中每個(gè)字節(jié)的彩色數(shù)。 其中每個(gè)字節(jié)的彩色數(shù)據(jù)格式如下圖所示: JXARM9-2410 LCD控制器初始化: 初始化LCD端口,由于LCD控制端口與CPU的GPIO端口是復(fù)用的,因此必須設(shè)置相應(yīng)寄存器為L(zhǎng)CD驅(qū)動(dòng)控制端口。 申請(qǐng)顯示緩沖區(qū),大小為320X240X1字節(jié)。初始化LCD控制寄存器,包括設(shè)置LCD分辨率,掃描頻率,顯示緩沖區(qū)等。HZK組成:每個(gè)漢字占用32個(gè)字節(jié),每個(gè)區(qū)為94個(gè)漢字。 在計(jì)算機(jī)中,漢字是以機(jī)內(nèi)碼的形式存儲(chǔ)的,每個(gè)漢字占用兩個(gè)字節(jié):第一個(gè)字節(jié)為區(qū)碼(qh),為了與ASCII碼區(qū)別,范圍從十六進(jìn)制的0A1H開始(小于80H的為ASCII碼字符),對(duì)應(yīng)區(qū)位碼中區(qū)碼的第一區(qū);第二個(gè)字節(jié)為位碼(wh),范圍也是從0A1H開始,對(duì)應(yīng)某區(qū)中的第一個(gè)位碼。 這樣,將漢字機(jī)內(nèi)碼減去0A0AH就得該漢字的區(qū)位碼。因此,漢字在漢字庫(kù)中的具體位置計(jì)算公式為: location =(94*(qh-1)+wh-1)*一個(gè)漢字字模占用字節(jié)數(shù) 一個(gè)漢字字模占用的字節(jié)數(shù)根據(jù)漢字庫(kù)的漢字大小不同而不同。以HZK16點(diǎn)陣字庫(kù)為例,字模中每一點(diǎn)使用一個(gè)二進(jìn)制位(Bit)表示,如果是1,則說明此處有點(diǎn),若是0,則說明沒有。這樣,一個(gè)16×16點(diǎn)陣的漢字總共需要16*16/8=32個(gè)字節(jié)表示。 字模的表示順序?yàn)椋合葟淖蟮接?,再?gòu)纳系较?,也就是先畫左上方?個(gè)點(diǎn),再是右上方的8個(gè)點(diǎn),然后是第二行左邊8個(gè)點(diǎn),右邊8個(gè)點(diǎn),依此類推,畫滿16×16個(gè)點(diǎn)。因此,HZK16中漢字在漢字庫(kù)中具體位置的計(jì)算公式為:(94*(qh-1)+(wh-1))*32。 漢字“房”的機(jī)內(nèi)碼為十六進(jìn)制的“B7BF”,其中“B7”表示區(qū)碼,“BF”表示位碼。所以“房”的區(qū)位碼為0B7BFH-0A0A0H=171FH。將區(qū)碼和位碼分別轉(zhuǎn)換為十進(jìn)制得漢字“房”的區(qū)位碼為“2331”,即“房”的點(diǎn)陣位于第23區(qū)的第31個(gè)字的位置,相當(dāng)于在文件HZK16中的位置為第32×[(23-1)×94+(31-1)]=67136B以后的32個(gè)字節(jié)為“房”的顯示點(diǎn)陣。 三、實(shí)驗(yàn)基本步驟: 1.將仿真器及usb線,com串行線,S3C2410實(shí)驗(yàn)板與電腦連接好。 2.添加asm、common、include、misc、五個(gè)文件,在軟件ADT中新建文件,建立工程。 3.設(shè)置運(yùn)行所需要的參數(shù):將一般設(shè)置設(shè)為arm9usb,添加相應(yīng)的腳本文件。 4.main函數(shù)及顯示函數(shù)如下: *********************************************************************/ void Main(void){ /* 配置系統(tǒng)時(shí)鐘 */ ChangeClockDivider(1,1); // 1:2:4 ChangeMPllValue(0xa1,0x3,0x1); // FCLK=202.8MHz /* 初始化端口 */ Port_Init(); /* 初始化串口 */ Uart_Init(0,115200); Uart_Select(0); /* 打印提示信息 */ PRINTF(“n---LCD測(cè)試程序---n”);PRINTF(“n請(qǐng)將UART0與PC串口進(jìn)行連接,然后啟動(dòng)超級(jí)終端程序(115200, 8, N, 1)n”); /* LCD初始化 */ Lcd_Port_Init();#ifdef STN_LCD Lcd_Init(MODE_CSTN_8BIT); Glib_Init(MODE_CSTN_8BIT); Lcd_CstnOnOff(1); Glib_ClearScr(0xff, MODE_CSTN_8BIT);#else #ifdef TFT_8_0 rGPCCON &= ~(3<<8); rGPCCON |=(2<<8); Lcd_Init(MODE_TFT_16BIT_640480); Glib_Init(MODE_TFT_16BIT_640480); Glib_ClearScr(0xffff, MODE_TFT_16BIT_640480); Lcd_PowerEnable(0, 1); Lcd_EnvidOnOff(1); #else Lcd_Init(MODE_TFT_16BIT_240320); Glib_Init(MODE_TFT_16BIT_240320); Glib_ClearScr(0xffff, MODE_TFT_16BIT_240320); Lcd_PowerEnable(0, 1); Lcd_EnvidOnOff(1); #endif #endif #define LCD_DISP_CHAR #ifdef LCD_DISP_CHAR Lcd_Disp_Char();#else Lcd_Disp_Grap();#endif while(1){ } } void Lcd_Disp_Char(void){ /* 顯示字符串 */ Glib_disp_hzk16(30,100,“武漢創(chuàng)維特信息技術(shù)有限公司”, 0x0);while(1);} void Lcd_Disp_Grap(void){ int i,j; for(j=0;j<240;j++)for(i=0;i<320;i++)//RRRGGGBB PutPixel(i,j,((i/40)<<5)+((j/30)<<2)+(((j/15)%2)<<1)+((i/20)%2));} 5.編譯工程文件-->連接-->下載-->全速運(yùn)行; 6.Lcd將會(huì)顯示漢字“武漢創(chuàng)維特信息技術(shù)有限公司”。 7.至此實(shí)驗(yàn)完畢。 四.實(shí)驗(yàn)小結(jié): 通過本次試驗(yàn),通過了lcd顯示實(shí)驗(yàn)效果,使我更加直觀的看到嵌入式實(shí)驗(yàn)的功能與其強(qiáng)大的功能,對(duì)自己選擇嵌入式為學(xué)習(xí)對(duì)感到十分驕傲和自豪,我一定會(huì)努力學(xué)習(xí)相關(guān)知識(shí),在嵌入式方面獲得更多地提高。第二篇:嵌入式實(shí)驗(yàn)四實(shí)驗(yàn)報(bào)告
第三篇:嵌入式應(yīng)用實(shí)驗(yàn)報(bào)告,實(shí)驗(yàn)四 LCD顯示實(shí)驗(yàn)信科10級(jí)cumt