第一篇:ARM9嵌入式系統(tǒng)設(shè)計基于S3C2410與Linux
ARM9嵌入式系統(tǒng)設(shè)計:基于S3C2410與Linux》針對在嵌入式市場上頗具競爭力的ARM9處理器——S3C2410和開放源碼的Linux操作系統(tǒng),講述嵌入式系統(tǒng)的概念、軟硬件的開發(fā)和調(diào)試手段、嵌入式Linux驅(qū)動程序和應(yīng)用程序的開發(fā)以及圖形用戶界面MiniGUI的移植和應(yīng)用。《ARM9嵌入式系統(tǒng)設(shè)計:基于S3C2410與Linux》的特點(diǎn)是集嵌入式系統(tǒng)開發(fā)的理論知識和實驗教學(xué)于一體,并結(jié)合北京精儀達(dá)盛科技有限公司的開發(fā)板,給出了大量實例。
編輯推薦
《ARM9嵌入式系統(tǒng)設(shè)計:基于S3C2410與Linux》可作為高等院校嵌入式系統(tǒng)課程的教材,也可作為對嵌入式系統(tǒng)開發(fā)感興趣的讀者的入門教材,同時還可以作為從事ARM嵌入式系統(tǒng)應(yīng)用開發(fā)工程師的參考書。
當(dāng)前,嵌入式技術(shù)的應(yīng)用越來越廣泛,從航天科技到民用產(chǎn)品,嵌入式產(chǎn)品的身影無處不在,而這些嵌入式產(chǎn)品的核心——處理器決定了產(chǎn)品的市場和性能。在32位嵌入式處理器市場中,ARM處理器占有很大的份額。ARM不僅是一個公司、一種技術(shù),也是一種經(jīng)營理念,即由ARM公司提供核心技術(shù),只出售芯片中的IP授權(quán),采取了別具一格的“Chipless模式”(無芯片的芯片企業(yè)),不參與生產(chǎn),而是由合作廠商去生產(chǎn)具體的芯片和產(chǎn)品。
現(xiàn)在由于存儲空間等原因,在嵌入式芯片上編程有較大的困難,選取合適的平臺就顯得很重要。Linux自出現(xiàn)以來,得到了迅猛的發(fā)展。Linux是開放源碼的操作系統(tǒng),吸引著全世界的程序員參與到發(fā)展和完善的工作中來,所以Linux保持了穩(wěn)定而且卓越的性能。Linux在服務(wù)器領(lǐng)域已經(jīng)占有很大的份額,在圖形界面方面也不輸于Windows。由于源碼可以修改、移植,Linux在嵌入式領(lǐng)域中的應(yīng)用也越來越廣。選用Linux作為平臺,可以根據(jù)具體需要自由地裁減源碼,打造適合目標(biāo)平臺的環(huán)境,編寫最有效率的應(yīng)用程序。查看所有商品描述
第二篇:基于嵌入式ARM9的USB設(shè)計與實現(xiàn)
基于嵌入式ARM9的USB設(shè)計與實現(xiàn)
引 言
USB(Universal Serial Bus)是通用串行總線的縮寫,因其具有方便易用,動態(tài)分配帶寬,容錯性優(yōu)越和高性價比等特點(diǎn),現(xiàn)已成為計算機(jī)的主流接口。
隨著嵌入式系統(tǒng)的廣泛應(yīng)用,各種小型終端需要開發(fā)出與外界聯(lián)系的USB接口。目前,常用的技術(shù)有兩種。基于單片機(jī)的USB接口,特點(diǎn)是需要外置芯片,電路復(fù)雜,留下的CPU資源不多;基于ARM的USB接口,特點(diǎn)是資源豐富,但ARM系列產(chǎn)品較多,如果選型不當(dāng),還需要搭接較多的外圍電路,且不能很好地發(fā)揮CPU性能。USB 接口原理
USB1.1 規(guī)范[1]將USB 分為5 部分:控制器、控制器驅(qū)動程序、USB 芯片驅(qū)動程序、USB設(shè)備以及針對不同USB 設(shè)備的客戶端驅(qū)動程序。
(1)控制器(Host Controller)主要負(fù)責(zé)執(zhí)行由控制器驅(qū)動程序發(fā)出的命令。
(2)控制器驅(qū)動程序(Host Controller Driver), 在控制器與USB 設(shè)備間建立通信
管道(Pipe)。
(3)USB 驅(qū)動程序(USB Driver),提供對不同USB 設(shè)備及芯片的支持。(4)USB 設(shè)備(USB Device), 有兩類USB 設(shè)備:一類稱為功能設(shè)備(Function),另
一類是稱為USB 集線器(HUB),可以連接多個USB 設(shè)備。
(5)USB 設(shè)備驅(qū)動程序(Client Driver Software)及特定應(yīng)用程序。主控制器的驅(qū)動軟件由操作系統(tǒng)支持,USB 設(shè)備開發(fā)人員一般只需編寫客戶驅(qū)動程序,實現(xiàn)特定功能,設(shè)備端所有功能軟件需要全面設(shè)計。USB 的四種數(shù)據(jù)傳輸模式分別是:控制型傳輸、中斷型傳輸、批量型傳輸、實時型傳輸。第一種在缺省通道中傳輸U(kuò)SB 接口本身的配置等控制信息,后面三種用于功能部件傳輸數(shù)據(jù)。中斷型用于鍵盤等的異步輸入輸出少量數(shù)據(jù)傳輸,批量傳輸主要用于象硬盤等塊設(shè)備的數(shù)據(jù)傳輸,在中斷和批量的傳輸過程中要傳遞交互握手信號,確保數(shù)據(jù)準(zhǔn)確無誤。實時傳輸對帶寬有嚴(yán)格要求,但允許有一定誤碼,省去了交互握手信號的傳遞,常用于音視頻碼流數(shù)據(jù)傳輸。四種類型數(shù)據(jù)都按帶寬要求分配在1ms 一幀的數(shù)據(jù)幀內(nèi)進(jìn)行傳輸,連到端點(diǎn)(EndPoint)通道.1.1嵌入式系統(tǒng)USB 接口設(shè)計
要滿足高性能ARM嵌入式系統(tǒng)的要求,擴(kuò)展USB接口必須選擇高性能USB控制器芯片,Philips公司的PDISUBD12 USB器件,是與微處理器配合使用的高性能USB接口器件,性價比很高[2][4]。PDIUSBD12主要特性有:
(1)符合USB 1.1 技術(shù)規(guī)范;
(2)USB控制器并行接口與處理器間的數(shù)據(jù)傳輸速度高達(dá)2M 字節(jié)/秒;(3)在批量模式和同步模式下均可實現(xiàn)1M 字節(jié)/秒的數(shù)據(jù)傳輸速率;(4)集成了FIFO存儲收發(fā)器,支持DMA 操作;(5)內(nèi)置時鐘倍頻PLL電路,可編程時鐘頻率輸出;(6)多中斷模式實現(xiàn)批量和同步傳輸;
1.2音頻碼流USB 設(shè)備驅(qū)動程序
Windows2000 中各種USB 設(shè)備客戶驅(qū)動程序結(jié)構(gòu)框架基本相同,可以從Windows2000 DDK 中獲得USB 設(shè)備驅(qū)動程序范例代碼,對范例代碼作少量修改就可以滿足特定功能需要。圖1 顯示了驅(qū)動程序各層間的數(shù)據(jù)傳遞關(guān)系,底層USB 主控制器驅(qū)動程序(USB Host Driver)由操作系統(tǒng)提供支持,設(shè)備驅(qū)動程序只需要對USB Host Driver 上傳的I/O 數(shù)據(jù)包IRP 作出響應(yīng),并把要輸出數(shù)據(jù)以IRP 形式下傳給USB Host Driver 即可[5] [6]。在ISO(實時型)模式下傳輸音頻碼流,USB 客戶程序除了WDM(Windows Driver Model)驅(qū)動常規(guī)處理外,必須計算好帶寬,并為驅(qū)動程序在非分頁存儲區(qū)內(nèi)分配好環(huán)行緩沖區(qū)(Ringbuffer),以便USB 主控制器可以不間斷輸出實時數(shù)據(jù)。RingBuffer 的大小按下式 計算:
每幀字節(jié)數(shù) × 每緩沖幀數(shù) × 緩沖區(qū)數(shù) ; 每傳完一緩沖區(qū),USB Host Driver 回調(diào)(CallBack)一次客戶驅(qū)動程序,USB 帶寬
按每1ms 傳送1 幀數(shù)據(jù)來分配,要實現(xiàn)8kHz 采樣頻率、8bits 編碼的音頻PCM 碼流傳輸,幀數(shù)據(jù)包大小必須設(shè)為8Bytes,若設(shè)置4 個緩沖區(qū)交替工作,每緩沖區(qū)分20 幀傳送, 則RingBuffer 的大小為640Bytes,那么USB 主控制器每20ms 的頻率中斷回調(diào)一次客戶驅(qū)動程序是合適的。驅(qū)動程序通過IoSetCompletionRoutine()函數(shù)給每個IRP 設(shè)置回調(diào)函數(shù)入口地址[6],每完成一個IRP 緩沖區(qū)數(shù)據(jù)傳送操作,回調(diào)一次該地址指向的函數(shù),以便把下一緩沖包數(shù)據(jù)壓入到IRP 棧,直到全部數(shù)據(jù)流傳送完畢或人為終止傳送。S3C2440A特點(diǎn)
S3C2440A的CPU部分主要集成了電源模塊、復(fù)位和時鐘模塊、觸摸屏和小鍵盤模塊、程序存儲器和數(shù)據(jù)存儲器模塊。同時提供如下豐富的外圍接口:同步存儲器(SDRAM)和NAND FLASH控制接口,可擴(kuò)展到1 GB的存儲的空間;4個DMA通道和24個中斷端口;能控制STN LCD和TFT液晶屏顯示,支持觸摸屏功;USB接口A型和B型各一個;3個串行口、I2C,SPI,I2S等接口;帶AC97音頻接口;具備SD卡、數(shù)碼相機(jī)接口和網(wǎng)絡(luò)接口。
S3C2440A還具備多種工作模式,管腳為17×17方型分布,橫向從左1到右17編號,縱向從下A到上U編號,分類為A1~A17,B1~B17,C1~C17依此類推到U1~U17。這些管腳所對應(yīng)的功能并不是惟一的,通常只要使能變化,S3C2440A就能實現(xiàn)不同的控制功能。該設(shè)計涉及到的 S3C2440A,其管腳如表1所示分為3類。
串口電路
串口在該設(shè)計中的作用是通過計算機(jī)加載USB驅(qū)動程序,原理如圖2所示。
3.1電源電路
由于S3C2440A芯片的管腳對電壓提出了不同要求,所以需要完成電源的變壓,其原理 如圖3所示。驅(qū)動程序的研究
按USB接口,其設(shè)備結(jié)構(gòu)可分為USB Host(主機(jī))和USB Device(外部設(shè)備)。USB主機(jī)控制USB設(shè)備進(jìn)行通信,而主機(jī)與主機(jī)之間,或USB設(shè)備與USB設(shè)備之間是不能通信的。
4.1 USB主機(jī)
USB主機(jī)的功能通常包含以下幾個部分:驗證USB設(shè)備是否安插好或拔除;控制USB主機(jī)與設(shè)備兩者中的數(shù)據(jù)流;返回USB主機(jī)的所顯狀態(tài)。
USB系統(tǒng)軟件由以下3個部分組成:主機(jī)控制器驅(qū)動(HCD)、USB驅(qū)動(USBD)、主機(jī)軟件(Host Software)。主機(jī)控制器所具備的功能如表2所示。HCD和USBD包含基于不同抽象層次的軟件接口,兩者以一定的方式協(xié)同完成任務(wù),用以實現(xiàn) USB系統(tǒng)的功能。它們的任務(wù)差別沒有具體定義,然而HCD要具備的一項功能就是必須支持多種不同主機(jī)控制器芯片。在一些操作系統(tǒng)中,當(dāng)系統(tǒng)必須實現(xiàn)某些基本功能時,可由Host Software實現(xiàn)。
4.2 USB傳輸類型
USB定義了4種傳送類型:控制傳送、同步傳送、中斷傳送、批傳送。其中,控制傳送是指可靠的、非周期性的、突發(fā)的,并由主機(jī)客戶軟件所發(fā)起的通信,主要應(yīng)用于控制命令和狀態(tài)信息的傳送;同步傳送是指在主機(jī)和設(shè)備之間周期性的、連續(xù)的通信,一般用于傳送時實信息,這種類型保留了將時間概念包含于數(shù)據(jù)的能力,但傳送并不一定很緊急;中斷傳送是指少量數(shù)據(jù)的、低速的、周期的傳送;批傳送是指非周期的、大量的、可靠的傳送,其典型應(yīng)用在于傳送那些可以利用帶寬的數(shù)據(jù)。
4.3 USB設(shè)備請求
USB設(shè)備應(yīng)通過缺省控制管道(Default Control Pipe)響應(yīng)來自主機(jī)的請求命令。這些請求是通過使用控制傳輸來完成的。請求及請求的參數(shù)通過Setup包發(fā)向設(shè)備,由主機(jī)負(fù)責(zé)設(shè)置Setup包內(nèi)的每個域的值。USB設(shè)備請求包含的請求類型有三種:標(biāo)準(zhǔn)、廠商和設(shè)備類。標(biāo)準(zhǔn)請求用來完成設(shè)備的枚舉過程;廠商請求用來完成使用者自己定義的請求;設(shè)備類請求指的是某些特定的USB設(shè)備類所傳輸出的請求,例如打印機(jī)類就屬于這一類。設(shè)備請求要求有嚴(yán)格的定義,包含的內(nèi)容有類型、設(shè)備請求、值、索引和長度。
4.4 USB驅(qū)動程序結(jié)構(gòu) S3C2440A芯片支持USB1.1協(xié)議和USB 2.0協(xié)議。該設(shè)計是針對USB Host(主機(jī),A型),并基于USB 1.1協(xié)議編寫的。程序結(jié)構(gòu)和數(shù)據(jù)傳輸?shù)牧飨蛉鐖D4所示。
驅(qū)動程序的編寫主要分為以下幾個部分考慮:硬件提取層、中斷服務(wù)程序、標(biāo)準(zhǔn)設(shè)備請求和主循環(huán)。硬件提取層實現(xiàn)的是S3C2440A對I/O端口直接的讀寫操作;中斷服務(wù)程序處理各種中斷,包括總線任務(wù)上的請求;標(biāo)準(zhǔn)設(shè)備請求完成主機(jī)送來的各種標(biāo)準(zhǔn)請求,用于完成各種枚舉請求;而主循環(huán)則負(fù)責(zé)完成前臺的數(shù)據(jù)采集等工作,所有的任務(wù)結(jié)束后都要回到主循環(huán)上去。
5結(jié) 語
該設(shè)計采用三星公司ARM9的S3C2440A芯片作為CPU,比原來基于單片機(jī)的模式,外圍電路簡單,容易可靠地實現(xiàn)嵌入式終端的USB接口功能。在調(diào)試中,用到的嵌入式開發(fā)板GEC2440A套件還提供了串口工具DNW。用這一工具可以檢測驅(qū)動程序的正確與否,如:程序編寫無誤,則DNW串口會提示 “USB IS CONNECT”。由于S3C2440A芯片功能豐富,如處理器可提高運(yùn)算速度,LCD可人機(jī)交互,網(wǎng)口可連接因特網(wǎng),所以開發(fā)出的嵌入式終端不但可提升整體性能,還為日后的應(yīng)用奠定了基礎(chǔ)。
第三篇:ARM9嵌入式復(fù)習(xí)總結(jié)
ARM9嵌入式復(fù)習(xí)
第一章
1.嵌入式微處理器的分類。
a)什么是嵌入式微處理器?
1.嵌入式微處理器是嵌入式系統(tǒng)硬件層的核心,嵌入式微處理器將通用CPU中許多由板卡完成的任務(wù)集成到芯片內(nèi)部,從而有利于系統(tǒng)設(shè)計趨于小型化、高效率和高可靠性。嵌入式微處理器大多工作在為特定用戶群所專門設(shè)計的系統(tǒng)中。
2.嵌入式微處理器的體系結(jié)構(gòu)可以采用馮·諾依曼體系結(jié)構(gòu)或哈佛體系結(jié)構(gòu),指令系統(tǒng)可以選用精簡指令系統(tǒng)(Reduced Instruction Set Computer,RISC)和復(fù)雜指令集系統(tǒng)CISC(Complex Instruction Set Computer, CISC)。b)嵌入式微處理器分類
1.按照系列分:ARM系列、MIPS系列、PowerPC系列。2.按照指令復(fù)雜程度分:CISC和RISC兩類
2.微處理器劃分:
a)嵌入式微控制器 b)嵌入式微處理器 c)DSP處理器
d)嵌入式片上系統(tǒng) e)多核處理器
3.嵌入式操作系統(tǒng)(EOS)的特性
EOS除具備了一般操作系統(tǒng)最基本的任務(wù)調(diào)度、同步機(jī)制、中斷處理、文件處理等功能外,還具有如下特點(diǎn):強(qiáng)實時性;支持開放性和可伸縮性的體系結(jié)構(gòu),具有可裁減性;提供統(tǒng)一的設(shè)備驅(qū)動接口;提供操作方便、簡單、友好的圖形GUI和圖形界面;支持TCP/IP協(xié)議及其他協(xié)議,提供TCP/UDP/IP/PPP協(xié)議支持及統(tǒng)一的MAC訪問層接口,提供強(qiáng)大的網(wǎng)絡(luò)功能。
第二章
1.ARM7TDMI命名
2.3級流水線與總線架構(gòu) 三級流水線:
流水線使用3個階段,因此指令分為3個階段執(zhí)行 1.取指:從程序存儲器中讀取指令,放入流水線中
2.譯碼:操作碼和操作數(shù)被譯碼,決定執(zhí)行什么功能,為下一個始終周期準(zhǔn)備數(shù)據(jù)路
徑所需要的控制信號。
3.執(zhí)行:執(zhí)行已譯碼的指令
注:程序計數(shù)器(PC)指向被取指的指令,而不是指向正在執(zhí)行的指令 在正常操作的過程中,在執(zhí)行一條指令的同時對下一條指令進(jìn)行譯碼,并將第三條指令從存儲器中取出
3.ARM的兩種狀態(tài)與7種工作模式
a)兩種狀態(tài)。
i.ARM狀態(tài):32位,這種狀態(tài)下執(zhí)行的是字方式的ARM指令; ii.Thumb狀態(tài):16位,這種狀態(tài)下執(zhí)行半字方式的Thumb指令。注:兩個狀態(tài)之間的切換并不影響處理器模式或寄存器內(nèi)容,可以使用BX指令切換兩種狀態(tài).狀態(tài)寄存器CPSR的T位反應(yīng)了處理器運(yùn)行不同指令的當(dāng)前狀態(tài).b)7種工作模式。
注:除用戶模式外,其它模式均為特權(quán)模式。ARM內(nèi)部寄存器和一些片內(nèi)外設(shè)在硬件設(shè)計上只允許(或者可選為只允許)特權(quán)模式下訪問。此外,特權(quán)模式可以自由的切換處理器模式,而用戶模式不能直接切換到別的模式。
題目:ARM微處理器復(fù)位后,PC的地址通常是 0x0,初始的工作模式是Supervisor 4.ARM常用幾個寄存器功能
在ARM7TDMI處理器內(nèi)部有37個用戶可見的寄存器。31個通用32位寄存器,6個狀態(tài)寄存器。
a.堆棧寄存器(SP):R13,在ARM指令集當(dāng)中,沒有以特殊方式使用R13的指令或其它
功能,只是習(xí)慣上都這樣使用。但是在Thumb指令集中存在使用R13的指令。
b.鏈接寄存器(LR):R14,在結(jié)構(gòu)上有兩個特殊功能:
1.在每種模式下,模式自身的R14版本用于保存子程序返回地址; 2.當(dāng)發(fā)生異常時,將R14對應(yīng)的異常模式版本設(shè)置為異常返回地址(有些異常有一
個小的固定偏移量)。c.程序計數(shù)器(PC):R15,在ARM狀態(tài),位[1:0]為0,位[31:2]保存PC。在Thumb狀
態(tài),位[0]為0,位[31:1]保存PC。對于ARM指令集而言,PC總是指向當(dāng)前指令的下
兩條指令的地址,即PC的值為當(dāng)前指令的地址值加8字節(jié)。
d.程序狀態(tài)寄存器(CPSR):R16,在所有處理器模式下都可以訪問CPSR。每種異常模
式都有一個程序狀態(tài)保存寄存器(SPSR),在異常發(fā)生時,SPSR用于保存CPSR的狀
態(tài)。5.條件代碼標(biāo)志
N 運(yùn)算結(jié)果的最高位反映在該標(biāo)志位。對于有符號二進(jìn)制補(bǔ)碼,結(jié)果為負(fù)數(shù)時N=1,結(jié)果為正數(shù)或零時N=0;
Z 指令結(jié)果為0時Z=1(通常表示比較結(jié)果“相等”),否則Z=0;
C 當(dāng)進(jìn)行加法運(yùn)算(包括CMN指令),并且最高位產(chǎn)生進(jìn)位時C=1,否則C=0。當(dāng)進(jìn)行
減法運(yùn)算(包括CMP 指令),并且最高位產(chǎn)生借位時C=0,否則C=1。對于結(jié)合移位
操作的非加法/減法指令,C為從最高位最后移出的值,其它指令C通常不變;
V 當(dāng)進(jìn)行加法/減法運(yùn)算,并且發(fā)生有符號溢出時V=1,否則V=0,其它指令V通常不
變。
附:控制位
I、F中斷控制位——控制允許和禁止中斷 T控制(標(biāo)志)位——反映處理器的運(yùn)行狀態(tài) M控制位——決定了處理器的運(yùn)行模式 6.中斷號、中斷向量與優(yōu)先級。(7種異常)7.存儲器格式。
a)ARM體系結(jié)構(gòu)使用232個字節(jié)的單
一、線性地址空間。將字節(jié)地址做為無符號數(shù)看待,范圍為0~232-1 b)對于字對齊的地址A,地址空間規(guī)則要求如下:
● 地址位于A的字由地址為A、A+
1、A+2和A+3的字節(jié)組成; ● 地址位于A的半字由地址為A和A+1的字節(jié)組成;
● 地址位于A+2的半字由地址為A+2和A+3的字節(jié)組成; ● 地址位于A的字由地址為A和A+2的半字組成。注:這樣并不能完全定義字,半字和字節(jié)之間的映射。存儲器采用下列映射機(jī)制中的一種。
大端存儲:字?jǐn)?shù)據(jù)的高字節(jié)存儲在低地址中,而字?jǐn)?shù)據(jù)的低字節(jié)則存放在高地址中
小端存儲:低地址中存放的是字?jǐn)?shù)據(jù)的低字節(jié),高地址存放的是字?jǐn)?shù)據(jù)的高字節(jié)
例如,假設(shè)一個32位字長的微處理器上定義一個int類型的常量a,其內(nèi)存地址位 于0x6000處,其值用十六進(jìn)制表示為0x23456789。如圖1.2.2(a)所示,如果按小端法存儲,則其最低字節(jié)數(shù)據(jù)0x89存放在內(nèi)存低地址0x6000處,最高字 節(jié)數(shù)據(jù)0x23存放在內(nèi)存高地址0x6003處。如圖1.2.2(b)所示,如果按大端法存儲,則其最高字節(jié)數(shù)據(jù)0x23存放在內(nèi)存的低地址0x6000處,而最低字節(jié)數(shù)據(jù)0x89存放在內(nèi)存的高地址0x6003處。
第三章
一:尋址方式。1.寄存器尋址
操作數(shù)的值在寄存器中,指令中的地址碼字段給出的是寄存器編號,寄存器的內(nèi)容是操作數(shù),指令執(zhí)行時直接取出寄存器值操作。
例如指令:
MOV R1,R2 ;R1←R2 SUB R0,R1,R2 ;R0←R1-R2 2.立即尋址
在立即尋址指令中數(shù)據(jù)就包含在指令當(dāng)中,立即尋址指令的操作碼字段后面的地址碼部分就是操作數(shù)本身,取出指令也就取出了可以立即使用的操作數(shù)(也稱為立即數(shù))。立即數(shù)要以“?!睘榍熬Y,表示16進(jìn)制數(shù)值時以“0x”表示。
SUBS R0,R0,#1;R0減1,結(jié)果放入R0,并且影響標(biāo)志位 MOV R0,#0xFF000;將立即數(shù)0xFF000裝入R0寄存器 3.寄存器移位尋址。
寄存器移位尋址是ARM指令集特有的尋址方式。當(dāng)?shù)?個操作數(shù)是寄存器移位方式時,第2個寄存器操作數(shù)在與第1個操作數(shù)結(jié)合之前,選擇進(jìn)行移位操作。寄存器移位尋址指令舉例如下:
MOV R0,R2,LSL #3;R2的值左移3位,結(jié)果放入R0,即是R0=R2×8 ANDS R1,R1,R2,LSL R3;R2的值左移R3位,然后和R1相“與”操作,結(jié)果放入R1 4.寄存器間接尋址
寄存器間接尋址指令中的地址碼給出的是一個通用寄存器的編號,所需的操作數(shù)保存在寄存器指定地址的存儲單元中,即寄存器為操作數(shù)的地址指針。寄存器間接尋址指令舉例如下:
LDR R1,[R2];將R2指向的存儲單元的數(shù)據(jù)讀出保存在R1中
SWP R1,R1,[R2];將寄存器R1的值和R2指定的存儲單元的內(nèi)容交換 5.基址尋址
基址尋址就是將基址寄存器的內(nèi)容與指令中給出的偏移量相加,形成操作數(shù)的有效地址?;穼ぶ酚糜谠L問基址附近的存儲單元,常用于查表、數(shù)組操作、功能部件寄存器訪問等?;穼ぶ分噶钆e例如下:
LDR R2,[R3,#0x0C];讀取R3+0x0C地址上的存儲單元的內(nèi)容,放入R2 STR R1,[R0,#-4]!;先R0=R0-4,然后把R1的值寄存到保存到R0指定的存儲單元
6.多寄存器尋址
多寄存器尋址一次可傳送幾個寄存器值,允許一條指令傳送16個寄存器的任何子集或所有寄存器。多寄存器尋址指令舉例如下:
LDMIA R1!,{R2-R7,R12};將R1指向的單元中的數(shù)據(jù)讀出到R2~R7、R12中(R1自
動加1)STMIA R0!,{R2-R7,R12};將寄存器R2~R7、R12的值保存到R0指向的存儲單元中
R0自動加1 7.堆棧尋址
堆棧是一個按特定順序進(jìn)行存取的存儲區(qū),操作順序為“后進(jìn)先出”。堆棧尋址是隱含的,它使用一個專門的寄存器(堆棧指針)指向一塊存儲區(qū)域(堆棧),指針?biāo)赶虻拇鎯卧词嵌褩5臈m?。存儲器堆??煞譃閮煞N:
向上生長:向高地址方向生長,稱為遞增堆棧 向下生長:向低地址方向生長,稱為遞減堆棧 8.塊拷貝尋址
多寄存器傳送指令用于將一塊數(shù)據(jù)從存儲器的某一位置拷貝到另一位置。如: STMIA R0!,{R1-R7};將R1~R7的數(shù)據(jù)保存到存儲器中。
;存儲指針在保存第一個值之后增加,;增長方向為向上增長。STMIB R0!,{R1-R7};將R1~R7的數(shù)據(jù)保存到存儲器中。
;存儲指針在保存第一個值之前增加,;增長方向為向上增長。9.相對尋址
相對尋址是基址尋址的一種變通。由程序計數(shù)器PC提供基準(zhǔn)地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址。相對尋址指令舉例如下:
BL SUBR1;調(diào)用到SUBR1子程序
BEQ LOOP;條件跳轉(zhuǎn)到LOOP標(biāo)號處
...LOOP MOV R6,#1...SUBR1...二:指令集(LDR STR MOV ADD SUB)
1.ARM指令集 2.Thumb指令集 3.常用指令
a)LDR:加載字?jǐn)?shù)據(jù) b)STR:存儲字?jǐn)?shù)據(jù)
LDR/STR指令尋址非常靈活,它由兩部分組成,其中一部分為一個基址寄存器,可以為任一個通用寄存器;另一部分為一個地址偏移量。地址偏移量有以下3種格式: 立即數(shù)。立即數(shù)可以是一個無符號的數(shù)值。這個數(shù)據(jù)可以加到基址寄存器,也可以從基址寄存器中減去這個數(shù)值。如:LDR R1,[R0,#0x12] 寄存器。寄存器中的數(shù)值可以加到基址寄存器,也可以從基址寄存器中減去這個數(shù)值。如:LDR R1,[R0,R2] 寄存器及移位常數(shù)。寄存器移位后的值可以加到基址寄存器,也可以從基址寄存器中減去這個數(shù)值。
如:LDR R1,[R0,R2,LSL #2]
從尋址方式的地址計算方法分,加載/存儲指令有以下4種格式: 零偏移。如:LDR Rd,[Rn] 前索引偏移。如:LDR Rd,[Rn,#0x04]!程序相對偏移。如:LDR Rd,labe1 后索引偏移。如:LDR Rd,[Rn],#0x04 c)MOV:數(shù)據(jù)傳送指令
d)ADD:加法運(yùn)算指令
e)SUB:減法運(yùn)算指令
第四章
一:最小系統(tǒng)一個嵌入式處理器自己是不能獨(dú)立工作的,必須給它供電、加上時鐘信號、提供復(fù)位信號,如果芯片沒有片內(nèi)程序存儲器,則還要加上存儲器系統(tǒng),然后嵌入式處理器芯片才可能工作。這些提供嵌入式處理器運(yùn)行所必須的條件的電路與嵌入式處理器共同構(gòu)成了這個嵌入式處理器的最小系統(tǒng)。而大多數(shù)基于ARM7處理器核的微控制器都有調(diào)試接口,這部分在芯片實際工作時不是必需的,但因為這部分在開發(fā)時很重要,所以也把這部分也歸入最小系統(tǒng)中。
二:時鐘產(chǎn)生單元
目前所有的微控制器均為時序電路,需要一個時鐘信號才能工作,大多數(shù)微控制器具有晶體振蕩器。簡單的方法是利用微控制器內(nèi)部的晶體振蕩器,但有些場合(如減少功耗、需要嚴(yán)格同步等情況)需要使用外部振蕩源提供時鐘信號。
三:I2C的概念與應(yīng)用
I2C BUS(Inter Integrated Circuit BUS,內(nèi)部集成電路總線)是由Philips公司推出的二線制串行擴(kuò)展總線,用于連接微控制器及其外圍設(shè)備。I2C總線是具備總線仲裁和高低速設(shè)備同步等功能的高性能多主機(jī)總線,直接用導(dǎo)線連接設(shè)備,通信時無需片選信號。
如圖6.2.1所示,在I2C總線上,只需要兩條線—串行數(shù)據(jù)SDA線和串行時鐘SCL線,它們用于總線上器件之間的信息傳遞。SDA和SCL都是雙向的。每個器件都有一個唯一的地址以供識別,而且各器件都可以作為一個發(fā)送器或接收器(由器件的功能決定)。2C總線有如下操作模式:主發(fā)送模式、主接收模式、從發(fā)送模式、從接收模式。下面介紹其通用傳輸過程、信號及數(shù)據(jù)格式。
*數(shù)據(jù)有效:在傳輸數(shù)據(jù)的時候,SDA線必須在時鐘的高電平周期保持穩(wěn)定,SDA的高或低電平狀態(tài)只有在SCL線的時鐘信號是低電平時才能改變.*起始停止
當(dāng)I2C接口處于從模式時,要想數(shù)據(jù)傳輸,必須檢測SDA線上的啟動信號,啟動信號由主器件產(chǎn)生。如圖6.2.2所示,在SCL信號為高時,SDA產(chǎn)生一個由高變低的電平變化,即產(chǎn)生一個啟動信號。當(dāng)I2C總線上產(chǎn)生了啟動信號后,那么這條總線就被發(fā)出啟動信號的主器件占用了,變成“忙”狀態(tài);如圖6.2.2所示,在SCL信號為高時,SDA產(chǎn)生一個由低變高的電平變化,產(chǎn)生停止信號。停止信號也由主器件產(chǎn)生,作用是停止與某個從器件之間的數(shù)據(jù)傳輸。當(dāng)I2C總線上產(chǎn)生了一個停止信號后,那么在幾個時鐘周期之后總線就被釋放,變成“閑”狀態(tài)。主器件產(chǎn)生一個啟動信號后,它還會立即送出一個從地址,用來通知將與它進(jìn)行數(shù)據(jù)通信的從器件。1個字節(jié)的地址包括7位的地址信息和1位的傳輸方向指示位,如果第7位為“0”,表示馬上要進(jìn)行一個寫操作;如果為“1”,表示馬上要進(jìn)行一個讀操作。
*傳輸格式 SDA線上傳輸?shù)拿總€字節(jié)長度都是8位,每次傳輸中字節(jié)的數(shù)量是沒有限制的。在起始條件后面的第一個字節(jié)是地址域,之后每個傳輸?shù)淖止?jié)后面都有一個應(yīng)答(ACK)位。傳輸中串行數(shù)據(jù)的MSB(字節(jié)的高位)首先發(fā)送。
*應(yīng)答信號
為了完成1個字節(jié)的傳輸操作,接收器應(yīng)該在接收完1個字節(jié)之后發(fā)送ACK位到發(fā)送器,告訴發(fā)送器,已經(jīng)收到了這個字節(jié)。ACK脈沖信號在SCL線上第9個時鐘處發(fā)出(前面8個時鐘完成1個字節(jié)的數(shù)據(jù)傳輸,SCL上的時鐘都是由主器件產(chǎn)生的)。當(dāng)發(fā)送器要接收ACK脈沖時,應(yīng)該釋放SDA信號線,即將SDA置高。接收器在接收完前面8位數(shù)據(jù)后,將SDA拉低。發(fā)送器探測到SDA為低,就認(rèn)為接收器成功接收了前面的8位數(shù)據(jù)。
*I2C總線的數(shù)據(jù)傳輸過程
① 開始:主設(shè)備產(chǎn)生啟動信號,表明數(shù)據(jù)傳輸開始。
② 地址:主設(shè)備發(fā)送地址信息,包含7位的從設(shè)備地址和1位的數(shù)據(jù)方向指示位(讀或?qū)懳?,表示?shù)據(jù)流的方向)。
③ 數(shù)據(jù):根據(jù)指示位,數(shù)據(jù)在主設(shè)備和從設(shè)備之間進(jìn)行傳輸。數(shù)據(jù)一般以8位傳輸,最重要的位放在前面;具體能傳輸多少量的數(shù)據(jù)并沒有限制。接收器產(chǎn)生1位的ACK(應(yīng)答信號)表明收到了每個字節(jié)。傳輸過程可以被中止和重新開始。
④ 停止:主設(shè)備產(chǎn)生停止信號,結(jié)束數(shù)據(jù)傳輸。
第五章
一:串口的概念(串行接口)常用的數(shù)據(jù)通信方式有并行通信和串行通信兩種。當(dāng)兩臺數(shù)字設(shè)備之間傳輸距離較遠(yuǎn)時,數(shù)據(jù)往往以串行方式傳輸。串行通信的數(shù)據(jù)是一位一位地進(jìn)行傳輸?shù)?,在傳輸中每一位?shù)據(jù)都占據(jù)一個固定的時間長度。與并行通信相比,如果n位并行接口傳送n位數(shù)據(jù)需時間T,則串行傳送的時間最少為nT。串行通信具有傳輸線少、成本低等優(yōu)點(diǎn),特別適合遠(yuǎn)距離傳送。
① 串行數(shù)據(jù)通信模式
串行數(shù)據(jù)通信模式有單工通信、半雙工通信和全雙工通信3種基本的通信模式?!?單工通信:數(shù)據(jù)僅能從設(shè)備A到設(shè)備B進(jìn)行單一方向的傳輸。● 半雙工通信:數(shù)據(jù)可以從設(shè)備A到設(shè)備B進(jìn)行傳輸,也可以從設(shè)備B到設(shè)備A進(jìn)行傳輸,但不能在同一時刻進(jìn)行雙向傳輸。
● 全雙工通信:數(shù)據(jù)可以在同一時刻從設(shè)備A傳輸?shù)皆O(shè)備B,或從設(shè)備B傳輸?shù)皆O(shè)備A,即可以同時雙向傳輸。
② 串行通信方式 a.異步通信方式
異步通信時數(shù)據(jù)是一幀一幀傳送的,每幀數(shù)據(jù)包含有起始位(”0”)、數(shù)據(jù)位、奇偶校驗位和停止位(”1”),每幀數(shù)據(jù)的傳送靠起始位來同步。一幀數(shù)據(jù)的各位代碼間的時間間隔是固定的,而相鄰兩幀的數(shù)據(jù)其時間間隔是不固定的。在異步通信的數(shù)據(jù)傳送中,傳輸線上允許空字符。
異步通信對字符的格式、波特率、校驗位有確定的要求?!?字符的格式
每個字符傳送時,必須前面加一起始位,后面加上1、1.5或2位停止位。例如ASCII碼傳送時,一幀數(shù)據(jù)的組成是:前面1個起始位,接著7位ASCII編碼,再接著一位奇偶校驗位,最后一位停止位,共10位。
● 波特率
傳送數(shù)據(jù)位的速率稱為波特率,用位/秒(bit/s)來表示,稱之為波特。例如,數(shù)據(jù)傳送的速率為120字符/秒,每幀包括10個數(shù)據(jù)位,則傳送波特率為:
10×120=1200b/s=1200波特
每一位的傳送時間是波特的倒數(shù),如1/1200=0.833ms。異步通信的波特率的數(shù)值通常為:150、300、600、1200、2400、4800、9600、14400、28800等,數(shù)值成倍數(shù)變化。
● 校驗位
在一個有8位的字節(jié)(byte)中,其中必有奇數(shù)個或偶數(shù)個的“1”狀態(tài)位。對于偶校驗就是要使字符加上校驗位有偶數(shù)個“1”;奇校驗就是要使字符加上校驗位有奇數(shù)個“1”。例如數(shù)據(jù)“00010011”,共有奇數(shù)個“1”,所以當(dāng)接收器要接收偶數(shù)個“1”時(即偶校驗時),則校驗位就置為“1”,反之,接收器要接收奇數(shù)個“1”時(即奇校驗時),則校驗位就置為“0”。
一般校驗位的產(chǎn)生和檢查是由串行通信控制器內(nèi)部自動產(chǎn)生,除了加上校驗位以外,通信控制器還自動加上停止位,用來指明欲傳送字符的結(jié)束。停止位通常取1、1.5或2個位。對接收器而言,若未能檢測到停止位則意味著傳送過程發(fā)生了錯誤。
在異步通信方式中,在發(fā)送的數(shù)據(jù)中含有起始位和停止位這兩個與實際需要傳送的數(shù)據(jù)毫無相關(guān)的位。如果在傳送1個8位的字符時,其校驗位、起始位和停止位都為1個位,則相當(dāng)于要傳送11個位信號,傳送效率只有約80%。
(2)同步通信方式
為了提高通信效率可以采用同步通信方式。同步傳輸采用字符塊的方式,減少每一個字符的控制和錯誤檢測數(shù)據(jù)位,因而可以具有較高的傳輸速率。
與異步方式不同的是,同步通信方式不僅在字符的本身之間是同步的,而且在字符與字符之間的時序仍然是同步的,即同步方式是將許多的字符聚集成一字符塊后,在每塊信息(常常稱之為信息幀)之前要加上1~2個同步字符,字符塊之后再加入適當(dāng)?shù)腻e誤檢測數(shù)據(jù)才傳送出去。在同步通信時必須連續(xù)傳輸,不允許有間隙,在傳輸線上沒有字符傳輸時,要發(fā)送專用的”空閑”字符或同步字符。
在同步方式中產(chǎn)生一種所謂“冗余”字符,防止錯誤傳送。假設(shè)欲傳送的數(shù)據(jù)位當(dāng)作一被除數(shù),而發(fā)送器本身產(chǎn)生一固定的除數(shù),將前者除以后者所得的余數(shù)即為該“冗余”字符。當(dāng)數(shù)據(jù)位和“冗余”字符位一起被傳送到接收器時,接收器產(chǎn)生和發(fā)送器相同的除數(shù),如此即可檢查出數(shù)據(jù)在傳送過程中是否發(fā)生了錯誤。統(tǒng)計數(shù)據(jù)表明采用”冗余”字符方法錯誤防止率可達(dá)99%以上。
二:NAND FLASH與NOR FLASH異同.答:不同:
1)NOR Flash把整個存儲區(qū)分成若干個扇區(qū)(Sector),而NAND Flash把整個存儲區(qū) 分成若干個塊(Block),可以對以塊或扇區(qū)為單位的內(nèi)存單元進(jìn)行擦寫和再編程。
2)NAND Flash執(zhí)行擦除操作是十分簡單的,而NOR型內(nèi)存則要求在進(jìn)行擦除前先 要將目標(biāo)塊內(nèi)所有的位都寫為0。由于擦除NOR Flash時是以64~128KB為單位的塊進(jìn)行的,執(zhí)行一個寫入/擦除操作的時間為5s,與此相反,擦除NAND Flash是以8~32KB的塊進(jìn)行的,執(zhí)行相同的操作最多只需要4ms。
3)NOR Flash的讀速度比NAND Flash稍快一些,NAND Flash的寫入速度比NOR Flash 快很多。NAND Flash的隨機(jī)讀取能力差,適合大量數(shù)據(jù)的連續(xù)讀取。
4)NOR Flash容量通常在1 MB~8MB之間。而NAND Flash用在8MB以上的產(chǎn)品當(dāng) 中。NOR Flash主要應(yīng)用在代碼存儲介質(zhì)中,NAND Flash適用于資料存儲。
5)在NOR Flash上運(yùn)行代碼不需要任何的軟件支持。在NAND Flash上進(jìn)行同樣操作 時,通常需要驅(qū)動程序,也就是內(nèi)存技術(shù)驅(qū)動程序(MTD)。NAND Flash和NOR Flash在進(jìn)行寫入和擦除操作時都需要MTD。
6)在NAND Flash中每個塊的最大擦寫次數(shù)是一百萬次,而NOR Flash的擦寫次數(shù)是 十萬次。
區(qū)別:兩者工藝不一樣,NOR讀取速度快,成本高,容量不易做大,NAND讀取慢,成本低,容量很容易作大。
相同點(diǎn):都是采用FLASH技術(shù)生產(chǎn)
功能:NOR適合作為芯片程序存儲的ROM使用,NAND適合作為非易失性數(shù)據(jù)存儲器 第八章
一:Linux的最常用的命令
答:1)adduser 示例:創(chuàng)建pdr帳戶 adduser pdr 2)cat 示例:
cat text 在屏幕上顯示文件text的內(nèi)容;
cat-n textfile1 > textfile2 把 textfile1 的文件內(nèi)容加上行號后輸入 textfile2 這個文件里; 3)cd 示例:假設(shè)用戶當(dāng)前目錄是 /home/xu 現(xiàn)需要更換到/home/xu/pro 目錄中 $ cd pro 4)cp 示例:
$ cp-r /usr/xu/ /usr/liu/ 表示將/usr/xu 目錄中的所有文件及其子目錄拷貝到目錄 /usr/liu中。
5)export 示例:顯示當(dāng)前所有環(huán)境變量的設(shè)置情況 #export 6)Fdisk 示例:查看當(dāng)前系統(tǒng)中磁盤的分區(qū)狀況,包括硬盤、U盤等fdisk-l 7)Ln: 類似windows下的快捷方式
示例:要為當(dāng)前目錄下的file文件建立一個硬鏈接,名為/home/lbt/doc/file/, 可用如下命令: ln file /home/lbt/doc/file 8)locate 示例:locate filename: 尋找系統(tǒng)中所有叫filename的文件
9)Ls 示例:將 /bin 目錄以下所有目錄及文件詳細(xì)資料列出 : ls-lR /bin 10)minicom 示例:開啟minicom的配置界面 minicom –s 11)Mkdir 示例:在當(dāng)前目錄中創(chuàng)建嵌套的目錄層次inin 和inin下的mail目錄權(quán)限設(shè)置為只有文件擁有者有讀、寫和執(zhí)行權(quán)限。mkdir-p-m 700./inin/mail/ 12)Mount 示例:掛載ntfs格式的hda7分區(qū)到/mnt/cdrom文件夾mount-o iocharset=cp936 /dev/hda7 /mnt/cdrom 13)mv 示例:$ mv /usr/xu/ *.表示將/usr/xu 中的所有文件移到當(dāng)前目錄 用.表示
14)Passwd:passwd 作為普通用戶和超級權(quán)限用戶都可以運(yùn)行,但作為普通用戶只能 更改自己的用戶密碼,但前提是沒有被root用戶鎖定;如果root用戶運(yùn) 行passwd,可以設(shè)置或修改任何用戶的密碼;passwd 命令后面不接任何參數(shù)或用戶名,則表示修改當(dāng)前用戶的密碼
示例:passwd pengdr 15)ping 示例:ping 004km.cn 16)pwd:查看”當(dāng)前工作目錄“的完整路徑 示例:
[root@localhost ~]# pwd /root 17)reboot:執(zhí)行reboot指令可讓系統(tǒng)停止運(yùn)作,并重新開機(jī)。示例:做個重開機(jī)的模擬(只有紀(jì)錄并不會真的重開機(jī))。reboot –w 18)rmdir 示例:在工作目錄下的 BBB 目錄中,刪除名為 Test 的子目錄。若 Test 刪 除后,BBB 目錄成為空目錄,則 BBB 亦予刪除。
rmdir-p BBB/Tes [root@localhost ~]# 19)setup 功能說明:設(shè)置程序,類似windows控制面板 語法:setup 20)su功能說明:變更用戶身份。示例:變更賬號為超級用戶,并在執(zhí)行df命令后 還原使用者。su-c df root 21)tar 功能說明:備份或解壓文件。示例:壓縮目錄/etc為tar.gz后綴。# tar cvf backup.tar /etc 解壓#tar –zxvf file.tar.gz #tar –jxvf file.tar.bz2 22)umount 功能:卸除文件系統(tǒng)。示例:卸載 /mnt區(qū): umount /mnt/cdrom 23)whereis 功能:查詢某個二進(jìn)制命令文件、幫助文件等所在目錄.比如:查找“l(fā)s” 這個二進(jìn)制命令文件所在的目錄 whereis ls
第九章
一:ADS編譯環(huán)境的設(shè)置
二:系統(tǒng)啟動代碼bootloader概念
在嵌入式系統(tǒng)中,通常沒有像BIOS那樣的固件程序,因此整個系統(tǒng)的加載啟動任務(wù)就完全由BootLoader來完成。比如在一個基于 ARM7TDMI core的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時都從地址 0x00000000開始執(zhí)行。而在這個地址處安排的通常就是系統(tǒng)的BootLoader程序。
BootLoader就是在操作系統(tǒng)運(yùn)行之前運(yùn)行的一段小程序。通過它可以初始化硬件設(shè)備,從而將系統(tǒng)的軟硬件環(huán)境設(shè)置到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)做好準(zhǔn)備。Bootloader是在嵌入式系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段引導(dǎo)加載程序。
作用:將內(nèi)核映像從硬盤上讀到RAM中,然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行,即開始啟動操作系統(tǒng)。
嵌入式系統(tǒng)常見的Bootloader有vivi和U-Boot,RedBoot
題目一:簡述Bootloader啟動過程。
1、第一階段
(1)、基本的硬件設(shè)備初始化(2)、為階段2代碼準(zhǔn)備RAM空間(3)、拷貝階段2代碼到RAM空間(4)、設(shè)置好堆棧
(5)、跳轉(zhuǎn)到階段2的C程序入口點(diǎn)
2、第二階段
(1)、初始化本階段要使用到的硬件(2)、檢測系統(tǒng)內(nèi)存映射(memory map)(3)、將kernel和根文件系統(tǒng)映像從flash讀到RAM空間(4)、為kernel設(shè)置啟動參數(shù)(5)、調(diào)用內(nèi)核
題目二:請簡述嵌入式軟件Bootloader的兩種工作模式。
啟動加載模式:啟動加載模式稱為“自舉”(Autonomous)模式。即Bootloader從目標(biāo)機(jī)上的某個固態(tài)存儲設(shè)備上將操作系統(tǒng)加載到 RAM 中運(yùn)行,整個過程并沒有用戶的介入。啟動加載模式是 Bootloader的正常工作模式,在嵌入式產(chǎn)品發(fā)布的時侯,Bootloader必須工作在這種模式下。
下載模式:在這種模式下,目標(biāo)機(jī)上的Bootloader將通過串口連接或網(wǎng)絡(luò)連接等通信手段從主機(jī)下載文件。下載內(nèi)容及存儲:主要是下載內(nèi)核映像和根文件系統(tǒng)映像等。從主機(jī)下載的文件通常首先被Bootloader保存到目標(biāo)機(jī)的RAM中,然后再被 Bootloader寫到目標(biāo)機(jī)上的FLASH 類固態(tài)存儲設(shè)備中
三:Makefile文件的用途與寫法
1.用途:makefile關(guān)系到了整個工程的編譯規(guī)則。一個工程中的源文件不計數(shù),其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規(guī)則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進(jìn)行更復(fù)雜的功能操作,因為makefile就像一個Shell腳本一樣,其中也可以執(zhí)行操作系統(tǒng)的命令。2.寫法: 1)需要由make工具創(chuàng)建的目標(biāo)體(target),通常是目標(biāo)文件右可執(zhí)行文件;2)要創(chuàng)建的目標(biāo)體所依賴的文件(dependency_file);3)創(chuàng)建每個目標(biāo)體進(jìn)需要運(yùn)行的命令(command)格式:target:dependency_files command 例如,有兩個文件分別為hello.c和hello.h,創(chuàng)建的目標(biāo)體為hello.o,執(zhí)行的命令為gcc編譯指令:gcc –c hello.c,那么,對應(yīng)的Makefile就可以寫為:
#The simplest example hello.o:hello.c hello.h gcc –c hello.c –o hello.o 接著就可以make了。使用make的格式為:#make target,這樣make就會自動讀入Makefile(也可以是首寫字母小寫makefile)并執(zhí)行對應(yīng)target的commank語句,并會找到相應(yīng)的依賴文件。如下所示:
[root @localhost makefile] # make hello.o Gcc –c hello.c –o hello.o [root @localhost makefile] # ls Hello,c hello.h hello.o Makefile 可以看到,Makefile執(zhí)行了”hello.o”對應(yīng)的命令語句,并生成了”hello.o”的目標(biāo)體.附:makefile的自動變量:
$* 不包括擴(kuò)展名的目標(biāo)文件名稱
$+ 所以的依賴文件,以空格分開,并以出現(xiàn)的先后為序,可能包含重復(fù)的依賴文件 $< 第一個依賴文件
$? 所以時間戳比目標(biāo)文件晚的依賴文件,并以空格分開 $@ 目標(biāo)文件的完整名稱
$^ 所有不重復(fù)的依賴文件,以空格分開
$% 如果目標(biāo)是歸檔成員,則該變量表示目標(biāo)的歸檔成員名稱
題目一:Makefile和Make各實現(xiàn)什么功能?
Makefile文件內(nèi)容 按照規(guī)則,對系統(tǒng)中本目錄下的文件(.c、.s、.o、.h、.lib等)根據(jù)相互關(guān)系和要求進(jìn)行組織,設(shè)定各自的編譯方法,指定所生成的目標(biāo)。Makefile是一種文本格式文件。
Make是Makefile文件的解釋器
Make對Makefile文件解釋后,生成Linux的shell命令和gcc編譯命令,接著對命令執(zhí)行,最終生成目標(biāo)文件。
Makefile是工程系統(tǒng)編譯批處理文件。
第十章
一:嵌入式編譯環(huán)境的概念、建立方法以及步驟
第十一章
一:Linux驅(qū)動設(shè)備的分類與常用的數(shù)據(jù)結(jié)構(gòu)
1.Linux系統(tǒng)設(shè)備分為三類:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備 2.數(shù)據(jù)結(jié)構(gòu): 用戶應(yīng)用程序調(diào)用設(shè)備的功能都是在設(shè)備驅(qū)動程序中定義的,也就是設(shè)備驅(qū)動程序中所定義的功能入口點(diǎn)函數(shù)(或稱為功能接口函數(shù))。這些設(shè)備的功能接口函數(shù)都被定義在
struct file_operations{ };
struct inode{ };
struct file{ }; 二:內(nèi)核驅(qū)動代碼的書寫規(guī)則
第四篇:嵌入式linu學(xué)習(xí)心得
嵌入式Linux學(xué)習(xí)心得
1、Linux命令
ls:查看目錄-l以列表方式查看;ls –l 與ll的功能一樣 pwd: 查看當(dāng)前的目錄
cd:改變當(dāng)前操作目錄cd /直接跳到根目錄 cd..回到上一級目錄 cat: 打印顯示當(dāng)前文件的內(nèi)容信息
mkdir:創(chuàng)建目錄
fdisk: 查看硬盤分區(qū)信息,-l以列表方式查看
->代表是鏈接文件,類似window下的快捷方式。
cp: 復(fù)制命令,例子cp 文件名 /home/dir/
mv: 移動或改名,如mv sonf.confsonf.txt(改名)移動:mv sonf.conf / rm:刪除命令,如rm –f test.c;如刪除目錄rm –fr d
man:查看某個命令的幫助,man 命令
2、各系統(tǒng)目錄的功能
drw—r—w--:d代表是目錄,drw代表當(dāng)前用戶的權(quán)限,r代表組用戶的權(quán)限,w代表其它用戶的權(quán)限。x代表有執(zhí)行權(quán)限。
/boot/gruff.conf: 啟動引導(dǎo)程序
/dev:brw—rw--:b代表是塊設(shè)備。Linux設(shè)備有三種,塊設(shè)備(b開頭)、字符設(shè)備(c開頭)、網(wǎng)絡(luò)設(shè)備。had代表第一個硬盤,hdb代表第二個硬盤。Hdb2代表第二塊硬盤的第二個分區(qū)。3,67代表主設(shè)備為3,從設(shè)備為67./etc:存放的是系統(tǒng)的配置文件。Inittab文件存放不同啟動方式下必須啟動的進(jìn)程。Inittab文件中有6個啟動level,wait中對應(yīng)著6個level的目錄,respawn代表當(dāng)一個進(jìn)程被意外終止了,但會自動啟動的進(jìn)程,如守護(hù)進(jìn)程。rc.d目錄中存放了一個rc.sysinit文件,里面存放系統(tǒng)初始化配置信息。/etc還有一個vsftpd里面存放tcp、ftp的配置。
/home : 用戶目錄,存放用戶的文件,/lib:存放庫文件,后綴為so的文件代表動態(tài)鏈接庫。
/lost+found:系統(tǒng)意外終止,存放一些可以找回的文件。
/mnt:掛載外部設(shè)備,如掛載光驅(qū):mount –t /dev/cdrom/mnt/cdrom,如
果在雙系統(tǒng)中,要查看windows中D盤的文件,首先應(yīng)該將D盤的文件映射過來,mount –t /dev/hda2/mnt/windows/d
/opt:用戶安裝的應(yīng)用程序
/proc:是系統(tǒng)運(yùn)行的映射,比較重要。里面的文件數(shù)字代表進(jìn)程號。每個進(jìn)程號目錄下包含進(jìn)程的基本信息。還有其他信息,如cpuinfo等,內(nèi)核支持的文件系統(tǒng)filesystem等。系統(tǒng)支持的中斷interrupts,iomen代表內(nèi)存分配情況。ioport存放IO端口號。還有分區(qū)信息,modole信息,狀態(tài)信息,版本信息
對于Linux的設(shè)備驅(qū)動程序,有兩種加載模式,一種是直接加載進(jìn)linux內(nèi)核,一種是以模塊的方式加載到內(nèi)核。
/sbin: 系統(tǒng)管理的一些工具。如poweroff關(guān)機(jī)工具。
/usr: 安裝系統(tǒng)時很多文件放在此目錄下面,包含一些更新等,include包含的頭文件,lib 是Linux的庫文件,src包含Linux2.4的內(nèi)核源碼
/var:存放是臨時變量
3、
第五篇:嵌入式系統(tǒng)設(shè)計報告
嵌入式系統(tǒng)設(shè)計實驗報告
班 級:學(xué) 號:姓 名:成 績:指導(dǎo)教師:
20090612 2009112107 侯金鐘 武俊鵬、劉書勇 1.實驗一
1.1 實驗名稱
嵌入式系統(tǒng)硬件開發(fā)環(huán)境
1.2 實驗?zāi)康?/p>
1.熟悉UP-net3000實驗平臺。
2.超級終端設(shè)置及BIOS 功能使用。
1.3 實驗環(huán)境
硬件:ARM 嵌入式開發(fā)平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機(jī)Pentium100 以 上、串口線。
軟件:PC 機(jī)操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發(fā) 環(huán)境、仿真器驅(qū)動程序、超級終端通訊程序。
1.4 實驗內(nèi)容及要求
熟悉UP-net3000實驗平臺的硬件電路和外設(shè),ARM JTAG的安裝和使用,利用超級終端檢驗外設(shè)的工作狀態(tài)。
1.5 實驗設(shè)計與實驗步驟
1.建立工程
(1)運(yùn)行ARM SDT 2.5 集成開發(fā)環(huán)境(ARM Project Manager).(2)在新建的工程中,如圖1A-2 所示,選中工程樹的“根部”。
(3)因為開發(fā)板上的嵌入式處理器ARM7TDMI 沒有浮點(diǎn)處理器,所以,如圖1A-3 所
示,在彈出的對話框中設(shè)置Floating Point Processor 為none,并保持其他的設(shè)置不變。(4)選中工程樹的“根部”,通過菜單Project | Tool Configuration for work1.apj | asmlink | Set,對整個工程的連接方式進(jìn)行設(shè)置。(5)在彈出的對話框中,選中Entry and Base 標(biāo)簽,如圖1A-4 所示,設(shè)置連接的Read-Only(只讀)和Read-Write(讀寫)地址。
(6)選擇Linker Configuration 的ImageLayout 標(biāo)簽,(7)選擇Project | Edit Project Tamplete 菜單,彈出Project Template Editor 對話框。
(8)選擇Project | Edit Variables for work1.apj,彈出Edit Variables for work1.apj 對話框。
2.進(jìn)行程序的在線仿真、調(diào)試
1.6 實驗過程與分析
熟悉UP-net3000實驗平臺的硬件電路和外設(shè),安裝了ARM JTAG,利用超級終端檢驗了外設(shè)的工作狀態(tài)。
1.7 實驗結(jié)果總結(jié)
軟件安裝成功,結(jié)果顯示正常。
1.8 心得體會
通過此次試驗,我對ARM的環(huán)境的功能有一定的了解與完善。對試驗臺有了基本的認(rèn)識與使用。
2.實驗二
2.1 實驗名稱
嵌入式系統(tǒng)軟件開發(fā)環(huán)境
2.2 實驗?zāi)康?/p>
1.熟悉ADS1.2 開發(fā)環(huán)境,學(xué)會ARM 仿真器的使用。
2.使用ADS 編譯、下載、調(diào)試并跟蹤一段已有的程序,了解嵌入式開發(fā)的基本思想和過程。
2.3 實驗環(huán)境
硬件:ARM 嵌入式開發(fā)平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機(jī)Pentium100 以 上、串口線。
軟件:PC 機(jī)操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發(fā) 環(huán)境、仿真器驅(qū)動程序、超級終端通訊程序。
2.4 實驗內(nèi)容及要求
本次實驗使用ADS 集成開發(fā)環(huán)境。新建一個簡單的工程文件,并編譯這個工程文件。學(xué)習(xí)ARM 仿真器的使用和開發(fā)環(huán)境的設(shè)置。下載已經(jīng)編譯好的文件到嵌入式控制器中運(yùn)行。學(xué)會在程序中設(shè)置斷點(diǎn),觀察系統(tǒng)內(nèi)存和變量。
2.5 實驗設(shè)計與實驗步驟
(1)運(yùn)行ADS1.2 集成開發(fā)環(huán)境(CodeWarrior for ARM Developer Suite)。
(2)在新建的工程中,選擇Debug 版本,使用Edit | Debug Settings菜單對Debug 版本進(jìn)行參數(shù)設(shè)置。(3)在Debug Settings 對話框中選擇Target Settings 項。在Post-linker一欄中選擇ARM from ELF。
(4)在Debug Settings 對話框中選擇ARM Linker 項
(5)在第四步中如果選擇簡單的地址連接設(shè)置,在Debug Settings 對話框中選擇ARM Linker 項
(6)回到的工程窗口中,選擇Release 版本,使用Edit | Release Settings 菜單對Release 版本進(jìn)行參數(shù)設(shè)置。(7)參照第(3)、(4)、(5)、(6)步在Release Settings 對話框中設(shè)置Release版本的Post-linker、連接地址范圍、入口模塊和輸出文件。(8)回到如圖1B-3 所示的工程窗口中,選擇Targets 選項卡,如圖1B-11 所示。選中DebugRel 版本,按Del 鍵將其刪除。DebugRel 子樹是一個折衷版本,通常用不到,所以在這里刪除。
2.6 實驗過程與分析
1)回到工程窗口選中Debug 版本,執(zhí)行菜單Project | Make 對工程進(jìn)行編譯連接。(2)在ADS 中執(zhí)行菜單Project | Debug 啟動ADS1.2 的調(diào)試工具AXD。(3)在AXD 中執(zhí)行菜單Options | Configure Target 對AXD 進(jìn)行設(shè)置。(4)點(diǎn)Select 按鈕選擇遠(yuǎn)程連接為ARM ethernet driver,點(diǎn)Configure 按鈕輸入仿真器的IP 地址。
(5)等待程序裝載完畢以后,通過Execute | Go 菜單以及Execute | Stop(或者工具欄中的相應(yīng)按鈕)運(yùn)行或暫停程序。程序暫停后在窗口中將顯示出程序暫停的位置。(6)通過Execute | Step 菜單(或者工具欄中的相應(yīng)按鈕)可以單步運(yùn)行程序。
(7)程序停止后可以通過Processor Views | Sources 菜單查看源文件,并可在適當(dāng)位置按F9 設(shè)置端點(diǎn)。
(8)使用在Processor View 菜單下的Registers、Variables 和Memory 命令可以查看工作寄存器或者內(nèi)存變量。讀者可以逐一地嘗試,為以后調(diào)試程序打下基礎(chǔ)。
2.7 實驗結(jié)果總結(jié)
超級終端輸出“Hello World!”。
2.8 心得體會
基本了解了ADS1.2的配置條件,學(xué)會了ARM仿真器的使用方法。
3.實驗三
3.1 實驗名稱
鍵盤及LED實驗
3.2 實驗?zāi)康?/p>
1.學(xué)習(xí)鍵盤及LED 驅(qū)動原理。
2.掌握ZLG7289芯片串行接口的使用方法,用ZLG7289芯片驅(qū)動17鍵的鍵盤和8個共陰極LED。
3.3 實驗環(huán)境
硬件:ARM 嵌入式開發(fā)平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機(jī)Pentium100 以 上、串口線。
軟件:PC 機(jī)操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發(fā) 環(huán)境、仿真器驅(qū)動程序、超級終端通訊程序。
3.4 實驗內(nèi)容及要求
通過ZLG7289芯片驅(qū)動17鍵的鍵盤和8個共陰極LED,將按鍵值在LED上顯示出來。要求從右至左循環(huán)顯示至少四位數(shù)字。
基本功能實現(xiàn)之后可考慮實現(xiàn)從左至右顯示四位及四位以上數(shù)字(最大八位),并可設(shè)置清零鍵等擴(kuò)展功能。
3.5 實驗設(shè)計與實驗步驟
利用所給的基礎(chǔ)代碼進(jìn)行調(diào)試,觀察輸出結(jié)果,結(jié)合指導(dǎo)書和教材掌握基本原理和源代碼的編寫方式。根據(jù)實驗的要求設(shè)計函數(shù)流程,并反復(fù)調(diào)試,實現(xiàn)功能。1.新建工程,將“Exp3 鍵盤及LED 驅(qū)動實驗”中的文件添加到工程。2.定義ZLG7289 寄存器(ZLG7289.h)
#define ZLG7289_CS(0x20)//GPB5 #define ZLG7289_KEY(0x10)//GPG4 #define ZLG7289_ENABLE()do{ZLG7289SIOBand=rSBRDR;ZLG7289SIOCtrl=rSIOCON;rSIOCON=0x31;rSBRDR=0xff;rPDATB&=(~ZLG7289_CS);}while(0)#define ZLG7289_DISABLE()do{rPDATB|=ZLG7289_CS;rSBRDR=ZLG7289SIOBand;rSIOCON=ZLG7289SIOCtrl;}while(0)3.編寫ZLG7289 驅(qū)動函數(shù)(ZLG7289.c)4.定義鍵盤映射表:(Keyboard16.c)
unsigned char KeyBoard_Map[]= {4,8,11,0,0,0,0,0,5,9,12,15,1,0,0,0,6,10,13,16,2,3,0,0,7,0,14,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//64 鍵值映射表,通過查找鍵盤映射表來確定鍵盤掃描碼對應(yīng)的按鍵值。
5.定義鍵值讀取函數(shù)。(Keyboard16.c)6.編寫主函數(shù),將按鍵值在數(shù)碼管上顯示。
3.6 實驗過程與分析
利用鍵盤驅(qū)動函數(shù)實現(xiàn)基本數(shù)字輸入,然后利用循環(huán)左移函數(shù)實現(xiàn)輸入數(shù)字做一樣功能,并通過改變函數(shù)中相應(yīng)delay的值來消除鍵盤按鍵帶來的抖動。
3.7 實驗結(jié)果總結(jié)
按鍵值可以在LED上顯示出來。要求從右至左循環(huán)顯示八位數(shù)字,同時可以復(fù)位清零。達(dá)到實驗的效果。
3.8 心得體會
通過本次實驗,我了解了LED的顯示屏幕的數(shù)字的移位功能,這個功能不止可以用一個方法實現(xiàn),而循環(huán)左移是其中比較巧妙且省力的一種,在遇到類似情況的時候,可以優(yōu)先考慮能不能利用到文件中已經(jīng)存在的函數(shù),這樣可以不必自己編寫函數(shù),省時省力。是一種可靠的方法。4.實驗四
4.1 實驗名稱
電機(jī)轉(zhuǎn)動控制及中斷實驗
4.2 實驗?zāi)康?/p>
1.熟悉ARM本身自帶的六路即三對PWM,掌握相應(yīng)寄存器的配置。
2.編程實現(xiàn)ARM系統(tǒng)的PWM輸出和I/O輸出,前者用于控制直流電機(jī),后者用于控制步進(jìn)電機(jī)。
3.了解直流電機(jī)和步進(jìn)電機(jī)的工作原理,學(xué)會用軟件的方法實現(xiàn)步進(jìn)電機(jī)的脈沖分配,即用軟件的方法代替硬件的脈沖分配器。
4.了解44B0處理器上中斷的應(yīng)用。5.學(xué)習(xí)在44B0處理器上中斷的應(yīng)用。
6.進(jìn)一步熟悉平臺外圍硬件及其驅(qū)動程序的編寫。
4.3 實驗環(huán)境
硬件:ARM 嵌入式開發(fā)平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機(jī)Pentium100 以 上、串口線。
軟件:PC 機(jī)操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發(fā) 環(huán)境、仿真器驅(qū)動程序、超級終端通訊程序。
4.4 實驗內(nèi)容及要求
1.學(xué)習(xí)步進(jìn)電機(jī)和直流電機(jī)的工作原理,了解實現(xiàn)兩個電機(jī)轉(zhuǎn)動對于系統(tǒng)的軟件和硬件要求。學(xué)習(xí)ARM 知識,掌握 PWM 的生成方法,同時也要掌握 I/O的控制方法。
2.編程實現(xiàn)ARM芯片的一對PWM輸出用于控制直流電機(jī)的轉(zhuǎn)動,通過A/D旋鈕控制其轉(zhuǎn)動方式。
3.編程實現(xiàn)ARM的四路I/O通道,實現(xiàn)環(huán)形脈沖分配用于控制步進(jìn)電機(jī)的轉(zhuǎn)動,通過A/D旋鈕控制步進(jìn)電機(jī)的轉(zhuǎn)角。
4.通過鍵盤控制直流電機(jī)與步進(jìn)電機(jī)的切換。5.設(shè)置并啟動定時器。
6.設(shè)置中斷,編寫定時器中斷服務(wù)程序,對中斷次數(shù)進(jìn)行計數(shù)并在LED上顯示結(jié)果。
4.5 實驗設(shè)計與實驗步驟
1.添加并打開工程。
2.進(jìn)行直流電機(jī)初始化設(shè)置和代碼編寫。3.進(jìn)行步進(jìn)電機(jī)初始化設(shè)置和代碼編寫。
4.對Timer3編程,編寫定時器中斷服務(wù)程序,完成對中斷次數(shù)的計數(shù)。5.編寫LED計數(shù)顯示函數(shù),使LED能正確計數(shù)并顯示0-9999。6.編寫中斷初始化函數(shù)和中斷響應(yīng)函數(shù)。7.終端下載測試。
4.6 實驗過程與分析 1.對直流電機(jī)進(jìn)行編程和測試,掌握轉(zhuǎn)速和旋轉(zhuǎn)方向的設(shè)定方法。
2.對步進(jìn)電機(jī)進(jìn)行編程和測試,掌握ARM的四路I/O通道,實現(xiàn)環(huán)形脈沖分配用于控制步進(jìn)電機(jī)的轉(zhuǎn)動,通過A/D旋鈕控制步進(jìn)電機(jī)的轉(zhuǎn)角。
3.對主函數(shù)進(jìn)行編程,用鍵盤響應(yīng)直流電機(jī)與步進(jìn)電機(jī)的切換控制。
4.掌握中斷相關(guān)語句的應(yīng)用,弄清定義的中斷向量、中斷向量號,編寫中斷響應(yīng)函數(shù),并完成中斷響應(yīng)控制。
4.7 實驗結(jié)果總結(jié)
實現(xiàn)了直流電機(jī)與步進(jìn)電機(jī)的基本設(shè)置和控制,可以通過鍵盤控制電機(jī)之間的切換。完成了中斷的響應(yīng)和定時中斷。當(dāng)對其中一個旋鈕轉(zhuǎn)動時,就可以由直流電機(jī)轉(zhuǎn)換成步進(jìn)電機(jī)的轉(zhuǎn)換,達(dá)到實驗的效果。
4.8 心得體會
通過本次實驗,我了解了直流電機(jī)和步進(jìn)電機(jī)的工作原理,同時也知曉了電機(jī)間的轉(zhuǎn)換過程,了解其中的道理內(nèi)涵,熟悉了ARM自帶的A/D轉(zhuǎn)換器的工作原理及編程方法,了解了中斷的意義和實現(xiàn)方法,實現(xiàn)了簡單了中斷處理程序。同時我也收獲了很多關(guān)于ARM處理機(jī)的相關(guān)知識。
5.實驗五
5.1 實驗名稱
觸摸屏驅(qū)動實驗
5.2 實驗?zāi)康?/p>
1.了解觸摸屏的基本概念與原理。
2.理解觸摸屏與LCD的關(guān)系。3.編程實現(xiàn)對觸摸屏的控制。
4.熟悉用 ARM 內(nèi)置的 LCD控制器驅(qū)動 LCD。
5.3 實驗環(huán)境
硬件:ARM 嵌入式開發(fā)平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機(jī)Pentium100 以 上、串口線。
軟件:PC 機(jī)操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發(fā) 環(huán)境、仿真器驅(qū)動程序、超級終端通訊程序。
5.4 實驗內(nèi)容及要求
1.了解觸摸屏基本原理,理解對觸摸屏進(jìn)行輸出標(biāo)定、與LCD顯示器配合的過程。2.通過編程實現(xiàn)觸摸兩點(diǎn)自動在兩點(diǎn)間劃直線。3.通過編程實現(xiàn)在觸摸屏上動態(tài)畫出曲線。5.5 實驗設(shè)計與實驗步驟
1.添加并打開工程。
2.在頭文件中定義宏和常量及驅(qū)動函數(shù)。
#define ADS7843_CTRL_START 0x80 #define ADS7843_GET_X 0x50 #define ADS7843_GET_Y 0x10 #define ADS7843_CTRL_12MODE 0x0 #define ADS7843_CTRL_8MODE 0x8 #define ADS7843_CTRL_SER 0x4 #define ADS7843_CTRL_DFR 0x0 #define ADS7843_CTRL_DISPWD 0x3 // Disable power down #define ADS7843_CTRL_ENPWD 0x0 // enable power down #define ADS7843_PIN_CS(1<<6)//GPF6 #define ADS7843_PIN_PEN(1<<5)//GPG5 /////////觸摸屏動作//////// #define TCHSCR_ACTION_NULL 0 #define TCHSCR_ACTION_CLICK 1 //觸摸屏單擊 #define TCHSCR_ACTION_DBCLICK 2 //觸摸屏雙擊 #define TCHSCR_ACTION_DOWN 3 //觸摸屏按下 #define TCHSCR_ACTION_UP 4 //觸摸屏抬起 #define TCHSCR_ACTION_MOVE 5 //觸摸屏移動
#define TCHSCR_IsPenNotDown()(rPDATG&ADS7843_PIN_PEN)(ADS7843_CTRL_START|ADS7843_GET_X|ADS7843_CTRL_12MODE |ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)//采樣x 軸電壓值,數(shù)據(jù)為12 位,參考電壓輸入模式為差分模式,允許省電模式
#defineADS7843_CMD_Y(ADS7843_CTRL_START|ADS7843_GET_Y|ADS7843_CTRL_12MODE |ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)int TchScr_Xmax=1840,TchScr_Xmin=176, TchScr_Ymax=195,TchScr_Ymin=1910;//觸摸屏返回電壓值范圍 #defineADS7843_CMD_X 3.校準(zhǔn)觸摸屏坐標(biāo),進(jìn)行坐標(biāo)轉(zhuǎn)換。
4.實現(xiàn)觸屏取點(diǎn)并顯示功能。
將觸摸動作及觸摸點(diǎn)坐標(biāo)在超級終端上顯示出來。5.實現(xiàn)兩點(diǎn)間自動劃線功能。6.實現(xiàn)觸摸屏動態(tài)劃線功能。
可以使用TchScr_GetScrXY()函數(shù)(第三個參數(shù)為0)來獲得液晶屏的x、y 方向的電壓
范圍,分別點(diǎn)觸摸屏有效面積的左上角和右下角,得到下列參數(shù):
TchScr_Xmax=1840;TchScr_Xmin=176;TchScr_Ymax=195;TchScr_Ymin=1910;//此數(shù)值僅供參考,請以實際校對為準(zhǔn)
5.6 實驗過程與分析 1.在定義觸屏響應(yīng)功能的函數(shù)中對點(diǎn)擊觸屏進(jìn)行響應(yīng)函數(shù)的修改,在其中添加修改點(diǎn)顏色的函數(shù),修改得到的觸摸點(diǎn)的顏色,并顯示在LCD上。
2.獲取第一個點(diǎn)坐標(biāo)并儲存,獲取第二個點(diǎn)坐標(biāo)并儲存,由編寫的劃線函數(shù)取得儲存的兩點(diǎn)間直線上所有點(diǎn)的坐標(biāo),并對其改變顏色,顯示在LCD上,即完成劃直線功能。
3.將劃線函數(shù)應(yīng)用到響應(yīng)觸屏移動消息的函數(shù)下,即可對連續(xù)獲得的觸摸坐標(biāo)進(jìn)行連續(xù)的畫短直線,連接成曲線,完成動態(tài)劃線功能。
5.7 實驗結(jié)果總結(jié)
了解了觸摸屏響應(yīng)動作消息的函數(shù)的工作原理,通過修改實現(xiàn)了觸摸屏響應(yīng)不同動作進(jìn)行畫點(diǎn)、劃線、動態(tài)劃線的功能。驗證觸摸屏的靈敏度的實驗。
5.8 心得體會
通過這次實驗,我基本掌握了通過編程驅(qū)動觸摸屏以及觸摸屏響應(yīng)時間,實現(xiàn)了觸摸屏對不同動作消息的響應(yīng)。同時也知曉了在觸摸屏上的描點(diǎn)畫線的實現(xiàn),但是由于不知名的原因,描點(diǎn)畫線的誤差較大,位置偏差較大,同時觸摸屏有時會不靈敏,出現(xiàn)時好時壞的現(xiàn)象,但是由于我們的辛勤鉆研,最終克服了這個困難,實現(xiàn)了最后的觸摸屏的實現(xiàn)。
6.實驗六
6.1 實驗名稱
UCOS-Ⅱ在ARM微處理器上的裁剪
6.2 實驗?zāi)康?/p>
1.了解UCOS-Ⅱ內(nèi)核的主要結(jié)構(gòu)。
2.掌握UCOS-Ⅱ裁剪的基本原理與嵌入式編程實現(xiàn)方法。3.學(xué)習(xí)如何根據(jù)具體情況對UCOS-Ⅱ操作系統(tǒng)進(jìn)行裁剪。
4.通過對UCOS-Ⅱ配置文件(OS_CFG.H)中相關(guān)的配置常量進(jìn)行設(shè)置,實現(xiàn)對UCOS-Ⅱ的裁剪。
6.3 實驗環(huán)境
硬件:ARM 嵌入式開發(fā)平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機(jī)Pentium100 以 上、串口線。
軟件:PC 機(jī)操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發(fā) 環(huán)境、仿真器驅(qū)動程序、超級終端通訊程序。
6.4 實驗內(nèi)容及要求
對UCOS-Ⅱ內(nèi)核進(jìn)行裁剪并移植到ARM7微處理器上。
6.5 實驗設(shè)計與實驗步驟 1.按照要求,載入STARTUP目錄下文件,完成系統(tǒng)初始化、環(huán)境配置。2.載入UCOS-Ⅱ的全部源碼,與處理器架構(gòu)相關(guān)的文件位于arch目錄下。3.在os_cpu.h中編寫與處理器和編譯器相關(guān)的代碼。
4.編寫os_cpu_c.c等6個與操作系統(tǒng)相關(guān)的函數(shù)。5.編寫os_cpu.asm等4個與處理器相關(guān)的函數(shù)。
6.6 實驗過程與分析
按照實驗步驟進(jìn)行,得到了需要的系統(tǒng)。
6.7 實驗結(jié)果總結(jié)
按照要求進(jìn)行了裁剪,得到了滿足需要又緊湊的應(yīng)用軟件系統(tǒng)。
6.8 心得體會
通過本次實驗,我了解了UCOS-Ⅱ內(nèi)核的主要結(jié)構(gòu),掌握UCOS-Ⅱ裁剪的基本原理與嵌入式編程實現(xiàn)方法,學(xué)會了如何根據(jù)具體情況對UCOS-Ⅱ操作系統(tǒng)進(jìn)行裁剪。
7.實驗七
7.1 實驗名稱
UCOS-Ⅱ在ARM微處理器上的移植和編譯
7.2 實驗?zāi)康?/p>
1.了解UCOS-Ⅱ內(nèi)核的主要結(jié)構(gòu)。
2.掌握將UCOS-Ⅱ內(nèi)核移植到ARM7處理器上的基本方法。
7.3 實驗環(huán)境
硬件:ARM 嵌入式開發(fā)平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機(jī)Pentium100 以 上、串口線。
軟件:PC 機(jī)操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發(fā) 環(huán)境、仿真器驅(qū)動程序、超級終端通訊程序。
7.4 實驗內(nèi)容及要求
1.將UCOS-Ⅱ內(nèi)核進(jìn)行移植到ARM7微處理器上。
2.編寫兩個簡單任務(wù),在超級終端上觀察兩個任務(wù)的切換。
7.5 實驗設(shè)計與實驗步驟
1.該實驗的文件分為兩類,其一是 STARTUP 目錄下的系統(tǒng)初始化、配置等文件,其二是 UCOS-Ⅱ的全部源碼,arch 目錄下的 3 個文件是和處理器架構(gòu)相關(guān)的。
2.設(shè)置 os_cpu.h 中與處理器和編譯器相關(guān)的代碼。
3.用 C 語言編寫 6 個操作系統(tǒng)相關(guān)的函數(shù)(OS_CPU_C.C)。4.用匯編語言編寫 4 個與處理器相關(guān)的函數(shù)(OS_CPU.ASM)。5.編寫一個簡單的多任務(wù)程序來測試一下移植是否成功。6.編譯并下載移植后的 UCOS-Ⅱ。
7.6 實驗過程與分析
1.按照實驗步驟進(jìn)行,將μC/OS-II 內(nèi)核移植到了ARM7 微處理器上。2編寫了兩個簡單任務(wù),在超級終端上觀察兩個任務(wù)的切換。
7.7 實驗結(jié)果總結(jié)
將μC/OS-II 內(nèi)核順利移植到了ARM7 微處理器上。
7.8 心得體會
通過本次實驗,使我更加了解了μC/OS-II 內(nèi)核的主要結(jié)構(gòu),掌握了ARM的C語言和匯編語言的編程方法,了解了ARM7處理器結(jié)構(gòu),掌握了將μC/OS-II 內(nèi)核移植到ARM 7 處理器上的基本原理與嵌入式編程實現(xiàn)方法。
8.實驗八
8.1 實驗名稱
綜合實驗
8.2 實驗?zāi)康?/p>
對前七次實驗進(jìn)行總結(jié),應(yīng)用之前所學(xué)的知識,將前幾次實驗內(nèi)容結(jié)合起來,完成鍵盤,LED,觸摸屏,直流電機(jī),步進(jìn)電機(jī)各種功能的組合。實現(xiàn)一個較為全面的功能結(jié)構(gòu)。
8.3 實驗環(huán)境
硬件:ARM 嵌入式開發(fā)平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機(jī)Pentium100 以 上、串口線。
軟件:PC 機(jī)操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發(fā) 環(huán)境、仿真器驅(qū)動程序、超級終端通訊程序。
8.4 實驗內(nèi)容及要求
對前七次實驗進(jìn)行總結(jié),應(yīng)用之前所學(xué)的知識,完成自擬的嵌入式系統(tǒng),要求綜合前期基礎(chǔ)實驗的各種功能。
8.5 實驗設(shè)計與實驗步驟
1.添加并打開工程。2.進(jìn)行LCD設(shè)計,在LCD顯示屏輸出文本。
3.進(jìn)行LED及鍵盤設(shè)計,完成LED輸出顯示功能和鍵盤輸入功能。4.進(jìn)行電機(jī)控制設(shè)計,完成鍵盤控制電機(jī)轉(zhuǎn)動功能。5.進(jìn)行中斷設(shè)計,完成定時中斷功能。
6.進(jìn)行觸摸屏設(shè)計,完成觸摸屏感應(yīng)和劃線功能。7.進(jìn)行裁剪和移植功能設(shè)計和完成。
8.6 實驗過程與分析
1.完成LCD顯示功能,在LCD顯示屏上輸出文本:“Hello World!”。2.進(jìn)入界面觸屏控制選擇功能,實現(xiàn)觸屏選擇功能。
3.自定義四種種功能,第一為電機(jī)控制,從鍵盤讀取命令,并將功能編號顯示在LED上,LED顯示的是計數(shù)的數(shù)據(jù),同時旋轉(zhuǎn)按鈕完成電機(jī)轉(zhuǎn)速的控制選擇。
4.第三種功能為劃線,功能編號顯示在LED高四位上,同時LCD屏幕清屏,為劃線功能做準(zhǔn)備,可以實現(xiàn)劃線功能。
5.第四種功能為定時中斷,當(dāng)由鍵盤控制時,LED顯示數(shù)值清零,實現(xiàn)了中斷。6.實現(xiàn)裁剪與移植功能。
8.7 實驗結(jié)果總結(jié)
完成了各種基本功能,并通過自擬的系統(tǒng)將各種功能整合起來,完成了一個小的嵌入式系統(tǒng),對前七次的功能有了更深入的了解。通過LED的計數(shù),當(dāng)在計數(shù)值在前30秒之內(nèi),由鍵盤控制LED的數(shù)值及顯示,按鍵盤上的某一個按鍵,實現(xiàn)對LED上的數(shù)值清零,后30秒由觸摸屏控制清零,并且在前30秒之內(nèi),旋轉(zhuǎn)按鈕,實現(xiàn)對直流電機(jī)的運(yùn)轉(zhuǎn),并且到步進(jìn)電機(jī)的轉(zhuǎn)換。
8.8 心得體會
通過這次實驗,我更加深刻地掌握了前幾次實驗中的基本功能的實現(xiàn)方法,并且把幾種功能聯(lián)合在一起,實現(xiàn)一些功能,把LED 顯示屏,LCD觸摸屏,鍵盤,直流電機(jī),步進(jìn)電機(jī)等等設(shè)備聯(lián)合在一起,對該實驗有一定的幫助與提高,而我和我的隊友也對嵌入式系統(tǒng)有了更深入的了解,在此期間,也學(xué)習(xí)了關(guān)于ARM處理器的開發(fā)與實踐,了解了關(guān)于手機(jī)的嵌入式設(shè)備的產(chǎn)生過程,我也深深的對此充滿了興趣,對未來的嵌入式課程設(shè)計奠定了深厚的基礎(chǔ),可是令我遺憾的是,我和隊員的水平所限,沒有完成中斷優(yōu)先級的控制。本來想完成更多的功能,可是最后由于時間緊迫,也有一些其他的事情來分神分心,所以就只能完成這些,但是在未來的幾周內(nèi),嵌入式課程設(shè)計也給了我們很大的空間去做未完成的事情。我相信我們會做的更加完美,功能更強(qiáng)大,用于未來的生活中去實踐。