




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Exynos4412 設備驅動 及測試程序設計實驗報告15281099 劉梓麟計算機科學與技術2018年4月15日一、 實驗目的1. 理解Text LCD設備在4412系統(tǒng)中的設備端口定義2. 掌握用戶程序借助于系統(tǒng)調用對Text LCD 控制的原理3. 掌握TextLCD 驅動程序設計的主要內容4. 完成TextLCD測試程序設計二、 實驗原理1. TextLCD驅動程序1.1 功能及原理012: #define TEXTLCD_ADDRESS 0x05000010013: #define TEXTLCD_ADDRESS_RANGE 0x1000 定義Text LCD設備地址值。022: #
2、define TEXTLCD_ON 1023: #define TEXTLCD_OFF 2024: #define TEXTLCD_INIT 3025: #define TEXT_CLEAR 4026:027: #define TEXT_LINE1 5028: #define TEXT_LINE2 6 為了控制Text LCD,定義ioctl()函數(shù)中使用的命令參數(shù)。044: void writeCharacter(char ch)045: 046: unsigned short int data;047: data = ch & 0x00FF;048: *textlcd_iorema
3、p = 0x0400;049: udelay(1000);050: *textlcd_ioremap = data | 0x0500;051: udelay(1000);052: *textlcd_ioremap = data | 0x0400;053: udelay(1000);054: 033: void runCommand(void)034: 035: command &= 0x00FF;036: *textlcd_ioremap = command | 0x0000;037: udelay(1000);038: *textlcd_ioremap = command | 0x0
4、100;039: udelay(1000);040: *textlcd_ioremap = command | 0x0000;041: udelay(1000);042: runCommand() 按照時序,向Text LCD發(fā)送控制命令。38行的數(shù)據為0x0100表示 EN(enable) 信號。 向Text LCD寫顯示數(shù)據。第48行,RS為1,寫數(shù)據寄存器;第50行,使能EN為1,同時送出數(shù)據;第52行,EN變?yōu)?。056: void clearDisplay(void)062: void returnHome(void)068: void entryModeSet(int increa
5、se, int shift)075: void displayOnOffControl(int display, int cursor, int blink)082: void cursorOrDisplayshift(int screenOrCursor, int rightOrLeft)089: void setFunctionSet(int dataLength, int row, int font)/096: void setCGRamAddress(int address)103: void setDDRamAddress(int address)110: void readBusy
6、FlagAndAddress(int *pBusyFlag, int *pAddressCounter) 控制Text LCD 函數(shù)56: clearDisplay()清屏 ,并把光標返回到HOME位置。62:不改變 DD RAM(顯示)內容,只把光標放到Home的位置。68:當讀或寫LCD數(shù)據時,要決定增加(I/D=1)或減少(I/D=0)光標位置,還要決定卷屏(S=1)或不卷屏(S=0)。75:設置D顯示文本,C顯示光標,或C閃爍光標。82:決定把畫面(S/C=1)或光標(S/C=0)向右(R/L=1)或向右(R/L=0)移動。89:設置接口的數(shù)據傳輸長度為8比特(DL=1) 或4比特(D
7、L=0);設置顯示行數(shù)為 2行(N=1)或者1行(N=0),并且把字符字體指定為5Ï10點陣(F=1)或者5Ï7 點陣(F=0)。當TextLCD模塊連接電源后,需要50ms的復位時間,所以,向TextLCD發(fā)送命令,要在加電后等待一段時間(大于50ms)。另外,當接口使用4位傳輸數(shù)據時,要先傳送高位4位,再傳送低4位。103:指定顯示存儲器DDRam的地址。110:讀LCD模塊內部忙標志Busy Flag(BF)以及讀取地址計數(shù)器對應的內容。LCD模塊執(zhí)行每個操作控制命令時需要一定的時間,所以當MCU發(fā)出一個操作控制命令后,可以通過讀取BF的方式,提高傳輸效率。當MCU讀
8、到BF為1時,需要等待;直到BF為0后,才發(fā)送下一個控制命令。134: void initializeTextLcd(void)135: 136: setFunctionSet(1, 1, 0); /1 dataLen: 8; 1 line: 2; 0 font: 5Ï7 dot137: displayOnOffControl(1, 0, 0); /1 display on;0 cursor off;0 cursor blink off138: clearDisplay();139: entryModeSet(1, 0); / 1 after data is read or writ
9、ten, curor pos increase; 0 screen scroll off140: returnHome();141: initializeTextLcd()136:接口傳輸數(shù)據的長度:8;顯示線數(shù):2;字符點陣:5Ï7。137:把display設置為on,不顯示光標,光標不閃爍。139:讀寫一數(shù)據后,地址自動增加。不滾屏顯示。202: switch(cmd)203: case TEXTLCD_ON:204: displayOnOffControl(1, 0, 0);205: break;206: case TEXTLCD_OFF:207: displayOnOffCo
10、ntrol(0, 0, 0);208: break;209: case TEXTLCD_INIT:210: initializeTextLcd();211: break;212: case TEXT_CLEAR:213: clearDisplay();214: break;215: case TEXT_LINE1:216: setDDRamAddress(0x00);217: break;218: case TEXT_LINE2:219: setDDRamAddress(0x40);220: break; Ioctl()2. TextLCD測試程序2.1 功能及原理 打開設備文件024: fd
11、 = open("/dev/fpga_textlcd", O_WRONLY);打開TextLcd 設備驅動程序。驅動程序的路徑是 “/dev/fpga_textlcd”。Fd為設備文件標識符。O_WRONLY表示以只寫的形式打開。015: ioctl(fd, TEXTLCD_INIT);035: ioctl(fd, TEXTLCD_OFF); TextLCD 初始化和關閉操作028: ioctl(fd, TEXTLCD_CLEAR);029: ioctl(fd, TEXTLCD_LINE1);030: write(fd, msgs0, strlen(msgs0);031:
12、ioctl(fd, TEXTLCD_LINE2);032: write(fd, msgs1, strlen(msgs1); TextLCD顯示輸出28:清屏。29-31:通過操作命令,設置Text LCD顯示格式。32:使用write()函數(shù)輸出顯示字符串。3. KeyPad原理圖2-3-1 M3模塊的keypad和4412的連接關系圖2-3-2 M3模塊的keypad原理圖4. 蜂鳴器原理PiezoController包含一個八位的寄存器Piezo,由控制寄存器控制。表1-4-1表示的是Piezo控制寄存器的數(shù)據位結構。表2-4-1 Piezo 控制寄存器Piezo表示的八位寄存器,音階數(shù)據
13、如下。 序號音階數(shù)據1哆0x012#來0x313來0x024#咪0x325咪0x036發(fā)0x047#唆0x339唆0x0510#拉0x3411拉0x0612#西0x3513西0x0714哆0x1115#來0x4116來0x1217#咪0x4218咪0x1319發(fā)0x1420#唆0x4321唆0x1522#拉0x4423拉0x1624#西0x4525西0x1726哆0x2127#來0x5128來0x2229#咪0x5230咪0x2331發(fā)0x2432#唆0x5333唆0x2534#拉0x5435拉0x2636#西0x5537西0x27表 2-4-2 用Piezo表示的音階三、 實驗結果1. 顯示
14、字符串由兩行變?yōu)橐恍衖nt lengthofline1;/全局變量在fpga_textlcd_write()函數(shù)中,用全局變量lengthifline1保存length的值。lengthofline1=length;在fpga_textlcd_ioctl()函數(shù)中,把case TEXTLCD_LINE2中setDDRamAddress函數(shù)的參數(shù)修改為lengthofline1,即可在第一行內容后繼續(xù)顯示原來第二行的內容。2. 顯示字符的左移(或右移)功能在case TEXTLCD_LINE1和case TEXTLCD_LINE2后分別加入一層循環(huán),循環(huán)中加入一行代碼:cursorOrDispl
15、ayshift(1,0)即可實現(xiàn)輸入內容的左移,將第二個參數(shù)修改為1即可實現(xiàn)右移。3. 顯示字符的卷屏左移(或右移)功能在case TEXTLCD_LINE1和case TEXTLCD_LINE2后分別加入一行代碼entryModeSet(1,1)可以實現(xiàn)卷屏。4. 綜合編程編寫新的測試函數(shù),并導入之前的keypad、piezo驅動程序:#include <unistd.h>#include <stdlib.h>#include <stdio.h> #include <fcntl.h>#include <assert.h>#inclu
16、de "textlcd.h"int main(void)int fd_keypad, fd_piezo, fd_textlcd;char buf20;char msg16 = 0;unsigned char inputNumber;unsigned char nullValue = 0x00;unsigned char values = 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x21;fd_keypad = open("/dev/fpga_keypad",O_RDWR);fd_piezo = open(&qu
17、ot;/dev/fpga_piezo",O_RDWR);fd_textlcd = open("/dev/fpga_textlcd",O_RDWR);if(fd_keypad < 0) printf( "Device Open ERROR!n");return -1;if(fd_piezo < 0)printf("Device Open ERROR!n");return -1;if(fd_textlcd < 0)printf("Device Open ERROR!n");return -1
18、;buf0 = 0;buf1 = 0;char temp2;printf("Please push the button !n");ioctl(fd_textlcd, TEXTLCD_INIT);/初始化/循環(huán)while(1)read(fd_keypad,buf,20);/讀鍵盤號printf("%srn", buf);/獲取鍵盤號對應的數(shù)字1-8if(buf0 =p)inputNumber = 0;else if(buf1 = 32)inputNumber = buf0 - 48;/輸出對應的音符printf("input:%dn"
19、, inputNumber);write(fd_piezo, &valuesinputNumber-1, 1);ioctl(fd_textlcd, TEXTLCD_CLEAR);/輸出對應的textlcd符號switch(inputNumber)case 1:msg0 = 1;ioctl(fd_textlcd, TEXTLCD_LINE1);write(fd_textlcd, msg, strlen(msg);break;case 2: msg0 = 2; ioctl(fd_textlcd, TEXTLCD_LINE1); write(fd_textlcd, msg, strlen(msg); br
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公路工程考試知識薄弱環(huán)節(jié)分析試題及答案
- 供應商管理中的測試要求試題及答案
- 金屬加工機械的塑性變形與成形工藝考核試卷
- 金屬冶煉安全應急響應與處理考核試卷
- 發(fā)展?jié)摿η度胧较到y(tǒng)試題及答案
- 禮儀用品行業(yè)綠色生產考核試卷
- 軟件測試中的自動化與效率提升試題及答案
- 嵌入式系統(tǒng)的前沿技術考題及答案
- 信息系統(tǒng)監(jiān)理師考試成功秘笈試題及答案2025
- 公路建設項目評審試題及答案
- 變電站數(shù)字孿生框架構建與關鍵技術研究
- 2025-2030年中國報廢汽車回收行業(yè)市場十三五發(fā)展規(guī)劃及投資戰(zhàn)略研究報告新版
- DIP支付下的病案首頁填寫
- 兩癌防治知識培訓
- KCA試題庫完整版
- 2025屆湖南省高考化學第一輪復習模擬選擇題-化學與生活43道(附答案)
- 《思想政治教育方法論》考研(第3版)鄭永廷配套考試題庫及答案【含名校真題、典型題】
- 肩袖損傷的治療與護理
- 【MOOC】創(chuàng)業(yè)基礎-浙江科技學院 中國大學慕課MOOC答案
- 物理-2025年中考終極押題猜想(廣州專用)(原卷版)
- 江蘇省蘇州市(2024年-2025年小學五年級語文)統(tǒng)編版期末考試(下學期)試卷及答案
評論
0/150
提交評論