




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
TECHV|DM365使用說明書
目錄TOC\o"1-3"\h\u7692第一章硬件資源介紹 1298951.1DM365關(guān)鍵板 188871.1.1概述 1127191.1.2主處理器TMS320DM365 2278651.1.3關(guān)鍵板硬件說明 12112201.2TECHV擴(kuò)展板 18254491.2.1概述 18197851.2.2接口說明 19213101.2.3Techv總線基本描述 22220981.2.4視頻專用信號擴(kuò)展 2612077第二章CCS開發(fā)環(huán)境下硬件測試程序編寫 2923435第1節(jié)DDR2測試程序 2923057第2節(jié)NANDFLASH測試程序 316730第3節(jié)GPIO口測試程序 334655第4節(jié)I2C口測試程序 3531997第三章DM365BOOTLOADER 374240第1節(jié)UBOOT移植 3714228第2節(jié)UBOOT編譯 3817473第3節(jié)UBOOT命令介紹 3925664第4節(jié)UBOOT燒寫 404260第四章LINUX操作系統(tǒng)移植及其應(yīng)用程序、驅(qū)動(dòng)程序編寫 422818第1節(jié)LINUX操作系統(tǒng)移植 4228469第2節(jié)LINUX內(nèi)核燒寫 444838第3節(jié)LINUX驅(qū)動(dòng)程序編寫 456247DM365USB驅(qū)動(dòng)編寫 5120955DM365SD卡驅(qū)動(dòng)編寫 5413450第4節(jié)LINUX應(yīng)用程序編寫 5722663第五章視頻音頻編解碼試驗(yàn) 5923779第1節(jié)G711格式語音編碼試驗(yàn) 5916779第2節(jié)G711格式語音解碼試驗(yàn) 6213900第3節(jié)H264圖像編碼試驗(yàn) 6418448第4節(jié)H264圖像解碼試驗(yàn) 6631261第5節(jié)語音圖像同時(shí)編碼試驗(yàn) 6818328第6節(jié)語音圖像同時(shí)解碼試驗(yàn) 7010037第7節(jié)H264圖像編解碼試驗(yàn) 725983附錄一TDS560USB仿真器配置 749298附錄二LINUX根文件系統(tǒng)燒寫 78第一章硬件資源介紹1.1DM365關(guān)鍵板1.1.1概述Techvdm365板卡硬件資源包含:TMS320DM365Davinci處理器,主頻率300MHz512MBytesNANDFlash存放器128MBytesDDR2-533MHz內(nèi)存10M/100Mbps網(wǎng)卡USB2.0接口可配置為Host/Slave兩種模式可配置BOOT模式可配置JTAG模式經(jīng)過插接件引出全部IO接口Techvdm365功效結(jié)構(gòu)圖功效概述TechvDM365達(dá)芬奇視頻開發(fā)板經(jīng)過專用DDR2存放控制器接口擴(kuò)展了128MbytesDDR2SDRAM,為視頻應(yīng)用帶來了高吞吐、高容量存放能力;512M(可擴(kuò)展1G)bytesNandFlash為視頻應(yīng)用程序脫機(jī)運(yùn)行提供了有力確保,CPU還提供了視頻DAC,經(jīng)過內(nèi)部集成TV信號產(chǎn)生功效即可把DDR2存放器內(nèi)數(shù)據(jù)輸出為用戶可在電視屏幕上觀察到圖像信號,非常方便;除此之外,還包含很多其它資源,包含音頻輸入輸出、10M/100M自適應(yīng)以太網(wǎng)接口、USB2.0接口、實(shí)時(shí)時(shí)鐘、EMAC、SD/MMC接口等一系列功效模塊;最主要是全部外部存放器接口信號都連接到擴(kuò)展接口上,用戶能夠經(jīng)過設(shè)計(jì)外部子板擴(kuò)展自己功效。板卡經(jīng)過標(biāo)準(zhǔn)接口提供電源輸入,采取單5V供電方式(注意供電電流需要大于2A),電源轉(zhuǎn)換模塊為微處理器及其余外設(shè)提供3.3V和1.8V/1.35V電壓。1.1.2主處理器TMS320DM365TMS320DM365內(nèi)部集成了:ARM核子系統(tǒng)(ARMSS):ARM926RISCCPU核與相關(guān)存放器Video視頻處理子系統(tǒng)(VPSS):包含VideoProcessingFrontEnd(VPFE),ImageInput和ImageProcessingSubsystem圖像處理系統(tǒng),和VideoProcessingBackEnd(VPBE)DisplaySubsystem強(qiáng)勁DMA系統(tǒng)外圍設(shè)備控制器:DDR2EMIF控制器AEMIF控制器,包含NANDflash接口UART(DM355可支持2路UART串口)Timers定時(shí)器RealTimeOut(RTO)脈沖寬度調(diào)制(PWM)I2C總線通信(I2C)Multi-MediaCard/SecureDigital(MMC/SD卡)音頻串行端口AudioSerialPort(ASP)USB控制器SPI端口DM365細(xì)節(jié)框架以下列圖ARM核子系統(tǒng)(ARMSS):ARM926EJ-SARM926EJ-S處理器為ARM9系列中一個(gè),主要面向大存放管理,高性能,低功耗多任務(wù)應(yīng)用程序。ARM926EJ-S處理器支持32位ARM和16位THUMB指令集,方便客戶達(dá)成高性能與高密代碼密度統(tǒng)一。ARM926EJ-S處理器支持ARM調(diào)試架構(gòu)。包含軟件與硬件聯(lián)合邏輯調(diào)試輔助功效.ARM926EJ-Sprocessor具備哈佛架構(gòu),提供完全高性能系統(tǒng):ARM926EJ-Sintegercore集成內(nèi)核MemoryManagementUnit(MMU)存放器管理單元指令與數(shù)據(jù)分離AMBAAHB總線接口指令與數(shù)據(jù)分開TCM接口ARM926EJ-S處理器實(shí)現(xiàn)ARMVer.5TEJ架構(gòu)。ARM926EJ-S新增擴(kuò)展16位固定有號運(yùn)算,經(jīng)過在一個(gè)指令周期內(nèi)完成32x16乘累加MAC運(yùn)算。經(jīng)過一個(gè)仲裁,I-TCM與D-TCM接口能夠訪問ARM子系統(tǒng)內(nèi)16KB內(nèi)部RAM和8KB內(nèi)部ROM。該仲裁為DM355DMSoC其它部分提供了DMA從接口,另外,ARM有DMA和CFG總線主端口,掛在AHB總線接口上。運(yùn)行狀態(tài)與模式ARM運(yùn)行兩種狀態(tài):ARM(32-bit)模式Thumb(16-bit)模式.用BX指令來進(jìn)行模式切換ARM工作幾個(gè)模式:·用戶模式:非特權(quán)模式,用來運(yùn)行大量用戶程序·快速中止模式Fastinterruptmode(FIQ):快速中止處理·中止模式Interruptmode(IRQ):通常中止事務(wù)處理·監(jiān)管模式Supervisormode(SVC):用于操作系統(tǒng),實(shí)現(xiàn)現(xiàn)場等保護(hù)處理·異常模式Abortmode(ABT):數(shù)據(jù)異常或預(yù)取異常進(jìn)入異常模式·系統(tǒng)模式Systemmode(SYS):用于操作系統(tǒng)特權(quán)模式·未定義模式Undefinedmode(UND):執(zhí)行未定義指令等時(shí),引發(fā)ARM進(jìn)入未定義模式能夠從其余特權(quán)模式進(jìn)入某一特權(quán)模式(系統(tǒng)模式與監(jiān)管模式)。經(jīng)過軟件中止SWI,從用戶模式進(jìn)入監(jiān)管模式,另外IRQ中止請求,能夠使處理器進(jìn)入中止模式,F(xiàn)IQ中止能夠引發(fā)處理器進(jìn)入快速中止模式,不一樣模式有不一樣堆棧,當(dāng)模式進(jìn)行切換時(shí),堆棧指針SP會(huì)自動(dòng)改變到對應(yīng)模式SP。處理器狀態(tài)存放器PSRPSR狀態(tài)存放器用來控制中止使能與禁止,以其處理器模式切換,PSR[7:0]為控制部分,PSR[27:8]用于保留兼容,PSR[31:28]為狀態(tài)位PSR[7:0]定義以下:·Bit7–I位:禁止IRQ(I=1)或使能IRQ(I=0)·Bit6-F位:禁止FIQ(F=1)或使能FIQ(F=0)·Bit5-T位:進(jìn)入thumb模式(T=1)或者ARM模式(T=0)·Bits4:0模式:處理器模式控制位–PSR[4:0]=10000:用戶模式Usermode–PSR[4:0]=10001:快速中止模式FIQmode–PSR[4:0]=10010:外部中止IRQmode–PSR[4:0]=10011:監(jiān)管模式Supervisormode–PSR[4:0]=10111:異常模式Abortmode–PSR[4:0]=11011:未定義模式Undefinedmode–PSR[4:0]=11111:系統(tǒng)模式SystemmodePSR[31:28]狀態(tài)位反應(yīng)最近ALU運(yùn)算結(jié)果,其定義以下:·Bit31-Nbit:Negativeorlessthan運(yùn)算結(jié)果為負(fù)數(shù)或小于·Bit30-Zbit:Zero運(yùn)算結(jié)果全0·Bit29-Cbit:Carryorborrow進(jìn)位或借位·Bit28-Vbit:Overfloworunderflow溢出或下溢異常與異常向量當(dāng)正常執(zhí)行程序被中止,暫時(shí)掛起而引發(fā)異常發(fā)生。ARM系統(tǒng)引發(fā)異常類型包含以下幾個(gè):·復(fù)位中止Resetexception:processorreset處理復(fù)位·快速中止FIQinterrupt:fastinterrupt快速中止處理·IRQ中止interrupt:normalinterrupt中止事件處理·異常Abort中止:當(dāng)前存放空間無法訪問時(shí),引發(fā)abort異常,或者訪問指令時(shí)預(yù)取中止Abort與數(shù)據(jù)運(yùn)算時(shí)Abort?!WI軟件中止:在程序中經(jīng)過SWI指令進(jìn)入監(jiān)管模式·未定義指令異常:當(dāng)處理器運(yùn)行未定義指令時(shí)而進(jìn)入此異常模式異常處理按優(yōu)先級從高到低排列:復(fù)位,數(shù)據(jù)Abort,FIQ,IRQ,預(yù)取Abort,未定義指令異常,SWI軟件中止。SWI軟件中止與未定義指令異常優(yōu)先級相同。異常中止向量表起始地址,依照VINTH值或者協(xié)處理器CP15存放器設(shè)置來決定:0x00000000(VINTH=0)或者0xFFFF0000(VINTH=1)。注意:此為ARM926EJ-S核特征,因?yàn)镈MSoC存放地址0xFFFF0000不存在,所以不能對VINTH設(shè)置。默認(rèn)異常中止向量表參考ExceptionVectorTableforARMARM異常中止向量表16位/32位指令集BIS16位指令集基于高度精簡指令架構(gòu)思想,ARM926EJ-S支持兩種指令集:·ARM模式或標(biāo)準(zhǔn)32位指令集·Thumb模式或者16指令集對比傳統(tǒng)16位處理器(使用16位存放器),16位長16BIS能實(shí)現(xiàn)32BIS大部分高性能,代碼密度提升靠近2倍。而且16BIS代碼在32BIS模式下看成32位指令運(yùn)行。占32BIS代碼65%空間,性能卻達(dá)成同等32BIS處理器搭配16位存放器160%。16-BIS/32-BIS優(yōu)勢16位操作指令配置標(biāo)準(zhǔn)32位存放器配置,能夠在32位與16位達(dá)成最好性能,每一條16位指令都有對應(yīng)32位指令。32位架構(gòu)對比16位架構(gòu)最大優(yōu)勢是一條指令完成32位整數(shù)運(yùn)算,以及高效處理大地址空間。當(dāng)處理32位數(shù)據(jù),16位架構(gòu)最少需要兩條指令來執(zhí)行,而32位指令完成一樣任務(wù)一條即可。然而,并非全部代碼都是處理數(shù)據(jù)都為32位數(shù)據(jù)(比如,代碼,執(zhí)行字符串處理),以及一些指令(如分支跳轉(zhuǎn)指令)不處理任何數(shù)據(jù)。假如一個(gè)16位架構(gòu)只有16位指示,和一個(gè)32位微控制器架構(gòu)只有32位指令,那么總體而言16位架構(gòu)具備愈加好代碼密度,而且優(yōu)勢超出32位架構(gòu)二分之一。顯然,32位性能犧牲了代碼密度成本。Coprocessor15(CP15)系統(tǒng)控制協(xié)處理器(CP15)是用于配置和控制指令和數(shù)據(jù)高速緩存器,緊耦合存放器Tightly-CoupledMemories(TCMs),內(nèi)存管理單元(MMUs),許多系統(tǒng)功效。CP15存放器是唯一被MRC和MCR指令可訪問,不過必需在ARMprivilegedmode下,如supervisormodeorsystemmode。ARM926EJ-S地址三種不一樣類型地址存在在ARM926EJ-S系統(tǒng)中。它們以下:DifferentAddressTypesinARMSystem內(nèi)存管理單元ARM926EJ-SMMU提供虛擬內(nèi)存功效,適應(yīng)操作系統(tǒng)要求,如Symbian操作系統(tǒng),WindowsCE和Linux。在主內(nèi)存中一套兩級頁存放表控制地址翻譯,許可檢驗(yàn),和數(shù)據(jù)和指令訪問內(nèi)存區(qū)域?qū)傩?。MMU使用一個(gè)統(tǒng)一TranslationLookasideBuffer(TLB)來匹配頁表信息。MMU特點(diǎn)以下:·標(biāo)準(zhǔn)ARM架構(gòu),第4版和第5版MMU映射大小,domains網(wǎng)域,訪問保護(hù)方案?!び成涑叽纾?MB(sections),64KB(largepages),4KB(smallpages)and1KB(tinypages)·大型和小型頁頁面訪問權(quán)限,可分別為頁面每部分而不一樣?!ardwarepagetablewalks·無效入口TLB,使用CP15存放器8·無效TLB入口,MVA來選擇,使用CP15存放器8·鎖定TLB入口,使用CP15存放器10Caches和WriteBufferARM926EJ-Sprocessor支持:指令緩存cache(Icache)16KB數(shù)據(jù)緩存cache(Dcache)8KB寫緩沖區(qū)17字節(jié)緩存caches具備以下特點(diǎn):Virtualindex,virtualtag,地址訪問,使用ModifiedVirtualAddress(MVA)。Four-waysetassociative4路集聯(lián)方式,cache緩存長度8個(gè)字,每行32字節(jié),和Dcache中有兩個(gè)dirty位。Dcache支持寫入write-through和回寫write-back(或復(fù)制備份)緩存操作,MMUtranslationtables表中C和B位。Performcritical-wordfirstcacherefilling執(zhí)行關(guān)鍵字緩存替換。Cachelockdownregisters緩存鎖定存放器使控制哪些緩存用于linefill上分配,提供一個(gè)機(jī)制,即鎖定和控制高速緩存pollution。依照存放在TAGRAM虛擬地址VirtualAddressTAG來使用cachelinewrite-backs,Dcache存放PhysicalAddressTAG(PATAG),對應(yīng)TAGRAM中每個(gè)Dcache入口地址。這意味著MMU不參加Dcache回寫操作,消除了TLB回寫錯(cuò)過漏寫可能性。Cache維護(hù)選項(xiàng)為以下資源提供高效操作。–整個(gè)DcacheorIcache–DcacheorIcacheRegions–整個(gè)Dcache–虛擬內(nèi)存virtualmemoryRegions還提供了高效率去除無效數(shù)據(jù):–DcacheRegions–整個(gè)Dcache–虛擬內(nèi)存virtualmemoryRegions緊耦合存放ARM926EJ-S具備緊密耦存放接口,為ARM提供了數(shù)據(jù)與指令分開TCM緊密耦存放接口。TCMs意味著存放實(shí)時(shí)和高性能關(guān)鍵代碼。DM355支持指令instructionTCM(I-TCM)and數(shù)據(jù)dataTCM(D-TCM)。instructionTCM為0x0000:0000to0x0000:7FFF,數(shù)據(jù)dataTCM為0x0001:0000to0x0001:9FFFITCM/DTCMMemoryMapTCM狀態(tài)能夠從TCMstatusregister存放器中讀取,即CP15register0。指令以下:MRCp15,#0,Rd,c0,c0,#2;readTCMstatusregisterRd為任何存放器,保持狀態(tài)數(shù)據(jù)。數(shù)據(jù)格式以下:假如DTCM位為0,DataTCM數(shù)據(jù)不存在,假如DTCM位是1,DataTCM數(shù)據(jù)存在。假如ITCM位為0,InstructionTCM不存在,假如ITCM位是1,InstructionTCM存在。使用ITCM/DTCM存放器使能ITCM和DTCM。ITCM和DTCM操作以下:MRCp15,#0,Rd,c9,c0,#0;readDTCMregionregisterMCRp15,#0,Rd,c9,c0,#0;writeDTCMregionregisterMRCp15,#0,Rd,c9,c0,#1;readITCMregionregisterMCRp15,#0,Rd,c9,c0,#1;writeITCMregionregisterRd為任何存放器,保持狀態(tài)數(shù)據(jù)。數(shù)據(jù)格式以下:寫ENBbit為0,使能ITCMandDTCM,寫1為相反。物理地址參看ADDRESS域。SIZE反應(yīng)大小。大小解碼參見表ITCM/DTCMSizeEncodingEmbeddedTraceSupport為了支持實(shí)時(shí)追蹤,ARM926EJ-S處理器提供了一個(gè)接口,使用EmbeddedTraceMacrocell(ETM).DM355中ARM926ES-J包含EmbeddedTraceBuffer(ETB),ETM包含兩個(gè)部分:traceport和triggeringfacilities。這兩個(gè)部分顯示ETMPartDescriptionsETM用來壓縮跟蹤信息和經(jīng)過一個(gè)狹窄traceport導(dǎo)出這些數(shù)據(jù)。外部TracePortAnalyzer(TPA)用來捕捉這些跟蹤trace信息Video視頻處理子系統(tǒng)(VPSS)視頻處理前端(VPFE)視頻處理前端由CCD控制器(CCDC),預(yù)覽器(Previewer),圖像縮放裝置(Resizer),硬件自動(dòng)白平衡、自動(dòng)對焦、自動(dòng)曝光裝置(H3A)和柱狀圖模塊(Histogramblock)組成。 CCD控制器從傳感器(CMOS或CCD)接收原始圖像/視頻數(shù)據(jù)或者從視頻解碼裝置接收YUV格式視頻數(shù)據(jù)。預(yù)覽器將從傳感器(CMOS或CCD)接收原始未處理圖像/視頻數(shù)據(jù)轉(zhuǎn)化成YCbCr422格式數(shù)據(jù)。預(yù)覽器輸出能夠用于視頻壓縮,或者外部顯示設(shè)備,如NTSC/PAL模擬編碼器或數(shù)字LCD。 圖像縮放裝置從硬件實(shí)現(xiàn)圖像大小縮放。能夠從預(yù)覽器或者DDR2接收輸入圖像/視頻數(shù)據(jù),輸出到DDR2。 H3A模塊是提供自動(dòng)白平衡、自動(dòng)對焦、自動(dòng)曝光控制環(huán)路。包含兩個(gè)主要模塊: VENC模擬/DACs接口有以下特征: 自動(dòng)對焦(AF)引擎裝置 自動(dòng)曝光(AE)與自動(dòng)白平衡(AWB)引擎裝置 柱狀圖模塊依靠輸入顏色像素和提供統(tǒng)計(jì)需求來執(zhí)行不一樣3A算法,最終調(diào)整最終圖像和視頻輸出。柱狀圖模塊數(shù)據(jù)源通常為CCD/CMOS傳感器(經(jīng)過CCDC模塊)或者DDR2.視頻圖像協(xié)處理器在內(nèi)核中直接硬連接兩個(gè)視頻圖像協(xié)處理器HDVICP和MJCP,顯著增強(qiáng)DM365性能。它們能夠完成H.264,MPEG4,MPEG2,MJPEG,JPEGWMV9/VC1編碼解碼等運(yùn)算。這些運(yùn)算都是調(diào)用xDM(xDIAS數(shù)字媒體)API接口。視頻處理后端(VPBE)Dm365視頻處理后端(VPBE)支持SDTV和HDTV輸出。它由OSD模塊和視頻編碼器(VENC)組成。VENC包含數(shù)字LCD(DLCD)和模擬(DAC等)接口。視頻編碼器產(chǎn)生模擬視頻輸出。DLCD控制器產(chǎn)生數(shù)字RGB/YCbCr數(shù)據(jù)輸出和時(shí)鐘信號。 OSD模塊主要功效是在硬件上實(shí)現(xiàn)圖形、字符疊加。同時(shí)支持2個(gè)視頻窗和2個(gè)圖形、字符(OSD)窗口,支持8種視頻窗數(shù)據(jù)與OSD窗數(shù)據(jù)混合方法。圖形、字符數(shù)據(jù)從外部存放器讀入,通常為DDR2。OSD經(jīng)過控制和參數(shù)存放器編程實(shí)現(xiàn)其功效。地址空間映射注:在TECHV開發(fā)板上我們把CE1地址空間細(xì)分為E_NETCS(0x04000000-0x04000fff)TECHVCS0(0x04004000-0x04004FFF)TECHVCS1(0x04008000-0x04008FFF)TECHVCS2(0x0400C000-0X0400CFFF)CS1空間經(jīng)過一個(gè)74ALS138進(jìn)行片選譯碼,經(jīng)過A13、A12譯碼選擇TechvCS0、TechvCS1或者TechvCS2,其中TechvCS2外接擴(kuò)展槽2個(gè)相同引腳,詳細(xì)能夠參考原理圖;當(dāng)DM365EMIF配置為8總線接口模式時(shí),BA00和BA01被當(dāng)成是最低兩位地址,即是說,總尋址空間為A13~A0+BA01、BA00,所以A13、A12實(shí)際上代表了總線A15、A14;而配置為16位時(shí),BA00變?yōu)锳14,最低位自動(dòng)無效,而BA01變?yōu)榈诙?;此時(shí)尋址為BA0,A13~A0+BA1+(無效位)。比如,要訪問EMIFA16位地址最低位,能夠這么操作:*(int*)0x04000002=0x2;此時(shí)BA1=1,而最低位自動(dòng)無效。1.1.3關(guān)鍵板硬件說明1、板卡元件布局正面視圖以下列圖所表示:元件、接口說明:J1、J2、J3:CPU擴(kuò)展信號接口,請參看原理圖USB主從模式配置選擇:USB主從模式經(jīng)過cpu板上r102和r103配置,焊接r103選擇主模式,焊接r102選擇從模式。配置CPU開啟模式:DM365CPU開啟模式是由cpu特定管腳在RESET期間狀態(tài)決定,這些管腳包含:A10~A8(對應(yīng)CFG[2:0])A13~A11(對應(yīng)BOOTMODE[2:0])配置說明以下:CFG[2:0]——配置地址、數(shù)據(jù)總線寬度,能夠經(jīng)過電阻R17~R25焊接配置EM_A10EM_A9EM_8AEMIFMODE0008-BITAEMIF00116-BITAEMIF原理圖以下:BOOTMODE[2:0]——配置開啟位置,能夠經(jīng)過電阻R14~R22焊接來設(shè)置。EM_A13EM_A12EM_11AEMIFMODE000NAND010MMC/SD0011UART0100USB101SPI0110EMAC111HPI原理圖以下:10M/100M網(wǎng)卡接口說明:DM365專用網(wǎng)卡,接口采取MINIUSB插接件,以節(jié)約PCB空間(附帶MINIUSB轉(zhuǎn)網(wǎng)口轉(zhuǎn)接線)。網(wǎng)卡接口原理以下列圖所表示:
1.2TECHV擴(kuò)展板1.2.1概述?1路TV視頻輸出,用戶可選PAL/NTSC制式?1個(gè)實(shí)時(shí)時(shí)鐘日歷,帶各種報(bào)警功效(包含一個(gè)備用電池)?1路模擬視頻輸入,包含一個(gè)視頻編碼器?數(shù)字視頻輸入接口,能夠方便與CMOS影像傳感器連接,支持YUV4:2:2、BT656等格式?1個(gè)10M/100Mbps自適應(yīng)以太網(wǎng)接口?1路立體聲音頻輸入、1路麥克風(fēng)輸入,1路立體聲音頻輸出?USB2.0-OTG高速接口,方便與PC、U盤連接?UART接口,可做主通信接口,?2個(gè)撥碼開關(guān),5個(gè)用戶輸入按鍵?1個(gè)與IO口復(fù)用狀態(tài)指示LED?1個(gè)SD/MMC卡插座接口?JTAG仿真器接口?單電源+5V供電1.2.2接口說明J12是5V電源輸入接口,如圖8所表示:+5V插座極性J9是TIJTAG,用來調(diào)試CPU。注意:仿真器接頭切忌接反ARMJTAG接口TP5為地GND測試點(diǎn) J8:USB-A接座,Slave/Host復(fù)用,經(jīng)過CPU關(guān)鍵板配置,以下列圖所表示:J6:RS232串口線接口,采取miniusb插座連接,用戶購置本版卡時(shí)會(huì)附送一根連接好MiniUSB轉(zhuǎn)串口線,接口定義以下: P1:復(fù)合信號輸入端子,用于電視信號、攝像頭信號輸入;結(jié)構(gòu)方框圖和信號描述以下:引腳信號名稱1信號輸入2GND復(fù)合視頻端子結(jié)構(gòu)圖 復(fù)合視頻輸入端子信號描述J7:TV信號輸出,結(jié)構(gòu)和信號如上P1一樣;TechV總線P6、P7、P8含義以下:P6:地址、數(shù)據(jù)總線;P7:中止、串行接口等;P8:視頻專用信號及其余。SW1:復(fù)位開關(guān),按下此按鈕將造成板卡上全部芯片、CPU復(fù)位。P5:10/100Mbps以太網(wǎng)RJ45接口,內(nèi)帶變壓器和指示燈,其結(jié)構(gòu)圖及網(wǎng)線接頭以下所表示:RJ45接口及接頭圖P3:AudioOut,音頻輸出接口;P2:音頻信號輸入;用戶需要采取3.5mm標(biāo)準(zhǔn)插頭。P4:MIC,麥克風(fēng)輸入。麥克風(fēng)直接焊接在板卡上,用戶不需要外接麥克風(fēng)。J10:Mini視頻輸入接口,之所以稱之為Mini,是因?yàn)橹恍枰?位Y、UV復(fù)用信號即可,此接口方便掛接各種CMOS攝像頭。1.2.3Techv總線基本描述總線采取EMIFA8位訪問模式(亦可配為16位)。達(dá)盛企業(yè)Techv總線,提供中止、定時(shí)器脈沖等輸入,及定時(shí)器、IO輸出。請參考原理圖來設(shè)計(jì)用戶擴(kuò)展板卡。標(biāo)準(zhǔn)管腳信號圖 Techv總線一覽詳細(xì)連接請參考原理圖。P6插槽信號描述:引腳號信號描述引腳號信號描述1+5V41NC2+5V42NC3NC43NC4NC44NC5NC45NC6地址A14*46NC7A1347NC8A1248NC9A1149NC10A1050NC11GND51NC12GND52NC13A953數(shù)據(jù)D15引腳號信號描述引腳號信號描述14A854D1415A755D1316A656D1217A557D1118A458D1019A359D920A260D821+5V61GND22+5V62GND23A163D724A064D625BA165D526BA066D427NC67D328NC68D229NC69D130NC70D031GND71GND32GND72GND33EM_CLK73EM_OE34EM_CE074EM_WE35EM_ADV75EM_OE36NC76EM_WAIT37NC77TechvCS138NC78TechvCS039NC79GND40NC80GND注:NC表示沒有連接;A14與BA0共用。P7插槽信號描述:引腳號信號描述引腳號信號描述1NC41NC2NC42SPI1_SDI3GND43GND4GND44GND5+5V45NC6+5V46NC7GND47NC8GND48EXTINT59+5V49NC10+5V50NC11NC51GND12NC52GND引腳號信號描述引腳號信號描述13NC53EXTINT414NC54NC15NC55NC16NC56NC17NC57NC18NC58NC19NC59RESETn20NC60NC21CLKX061GND22NC62GND23FSX063NC24DX064NC25GND65NC26GND66NC27CLKR067EXTINT628NC68EXTINT729FSR069TechvCS230DR070TechvCS231GND71NC32GND72NC33SPI1_SCLK73NC34NC74NC35SPI1_ENA075NC36SPI1_SDO76GND37GND77GND38GND78CLKOUT339NC79GND40NC80GND1.2.4視頻專用信號擴(kuò)展 DM365數(shù)字媒體處理器最大特色就是具備專門圖象數(shù)據(jù)接口,比如數(shù)字前端視頻捕捉、后端數(shù)字視頻輸出、LCD接口等。這些引腳跟GPIO是復(fù)用,使用時(shí)應(yīng)該注意。圖視頻信號接口其信號意義描述以下表:引腳號信號描述引腳號信號描述1+5V41NC2+5V42NC3視頻輸入YIN743NC4CIN744NC5YIN645NC6CIN646NC7YIN547視頻輸出YOUT38CIN548YOUT4_R49YIN449YOUT5_R510CIN450YOUT6_R611YIN351YOUT7_R712CIN352COUT5_G213YIN253COUT6_G314CIN254COUT7_G415YIN155YOUT0_G516CIN156YOUT1_G617YIN057YOUT2_G7引腳號信號描述引腳號信號描述18CIN058COUT0_B319VSYNC59COUT1_B420GND60COUT2_B521HSYNC61COUT3_B622WEN62COUT4_B723GND63TOUCHX-24NC64TOUCHY-25PCLK65TOUCHY+26NC66TOUCHX+27NC67LCD_OE_OUT28NC68VSYNC_OUT29NC69HSYNC_OUT30NC70VCLK_OUT31NC71GND32NC72GND33NC73NC34NC74GND35NC75I2C_SCLK36NC76EXTCLK37NC77I2C_DATA38NC78FIELD_OUT39NC79GND40NC80GND注:詳細(xì)信號作用能夠參考TMS320DM365芯片手冊
第二章CCS開發(fā)環(huán)境下硬件測試程序編寫第1節(jié)DDR2測試程序試驗(yàn)?zāi)繕?biāo):對DM365CPU板上DDR2進(jìn)行讀寫測試試驗(yàn)器件:計(jì)算機(jī)、Techvdm365CPU板,仿真器(ADT-XDS560USB仿真器),CCS3.3以上版本試驗(yàn)原理:試驗(yàn)代碼原理是CPU先向DDR2一段空間內(nèi)寫入數(shù)據(jù),然后CPU再讀取剛寫入數(shù)據(jù),進(jìn)行讀寫數(shù)據(jù)校驗(yàn),假如校驗(yàn)成功,則說明CPU能夠?qū)DR2進(jìn)行數(shù)據(jù)讀取,不然則不能。試驗(yàn)步驟:1.正確連接好仿真器和電源。2.打開測試程序“evmdm365_v1\tests\\ddr\ddr.pjt”,以下列圖所表示:3.編譯全部文件并裝載4.跳到主程序開始5.運(yùn)行程序,觀察輸出窗口信息,出現(xiàn)以下消息則表示測試經(jīng)過。6.測試試驗(yàn)完成。
第2節(jié)NANDFLASH測試程序試驗(yàn)?zāi)繕?biāo):對CPU板上NANDFLASH進(jìn)行讀寫測試試驗(yàn)器件:計(jì)算機(jī)、Techvdm365CPU板,仿真器(ADT-XDS560USB仿真器),CCS3.3以上版本試驗(yàn)原理:讀取NANDFLASHID號,判斷正確否,然后向nandflash中寫入數(shù)據(jù),然后再讀取NANDFLASH空間數(shù)據(jù),最終校驗(yàn)數(shù)據(jù)一致性。假如校驗(yàn)成功,則說明CPU能夠?qū)ANDFLASH進(jìn)行存放操作,不然則不能。試驗(yàn)步驟:1.正確連接好仿真器和電源。2.打開測試程序“evmdm365_v1\tests\nandflash\nandflash.pjt”,以下列圖所表示:3.編譯全部文件并裝載4.跳到主程序開始5.運(yùn)行程序,觀察輸出窗口輸出信息,出現(xiàn)以下信息則表示測試經(jīng)過。6.測試試驗(yàn)完成。
第3節(jié)GPIO口測試程序試驗(yàn)?zāi)繕?biāo):簡單測試GPIO。試驗(yàn)器件:計(jì)算機(jī)、Techvdm365CPU板,仿真器(ADT-XDS560USB仿真器),CCS3.3以上版本試驗(yàn)原理:本試驗(yàn)是經(jīng)過利用GPIO口來控制具備多路選擇功效器件。SN74BTLV3257PW,連通需要線路,然后使GPIO口輸出高低電平,控制底板LED燈閃爍。原理圖以下:GPIO36控制SN74CBTLV3257PW:GPIO36=0:A-->1B1GPIO36=1:A-->1B2(詳細(xì)應(yīng)用請參看芯片數(shù)據(jù)手冊)SPI_SDENA(GPIO25)連接到底板D2LED燈(詳細(xì)參看原理圖)試驗(yàn)步驟:1.正確連接好仿真器和電源。2.打開測試程序“evmdm365_v1\tests\GPIO\GPIO.pjt”,以下列圖所表示:3.編譯全部文件并裝載4.跳到主程序開始5.運(yùn)行程序,觀察窗口輸出信息和底板上D2燈是否閃爍。假如有這兩種情況出現(xiàn)表示GPIO口設(shè)置正確,以下列圖所表示:6.測試試驗(yàn)完成。
第4節(jié)I2C口測試程序試驗(yàn)?zāi)繕?biāo):簡單測試I2C接口。試驗(yàn)器件:計(jì)算機(jī)、Techvdm365CPU板,仿真器(ADT-XDS560USB仿真器),CCS3.3以上版本試驗(yàn)原理:本試驗(yàn)是經(jīng)過底板上鍵盤來測試I2C口。包括到原理圖以下:
詳細(xì)芯片原理請參看詳細(xì)數(shù)據(jù)手冊。試驗(yàn)步驟:1.正確連接好仿真器和電源。2.打開測試程序“evmdm365_v1\tests\GPIO\GPIO.pjt”,以下列圖所表示:3.編譯全部文件并裝載4.跳到主程序開始5.運(yùn)行程序,依次按動(dòng)底板上鍵盤,此時(shí)會(huì)在下面觀察窗口出現(xiàn)以下信息,表示測試經(jīng)過:6.測試試驗(yàn)完成。
第三章DM365BOOTLOADER我們在TECHV-DM6446開發(fā)上采取Uboot作為BOOTLOADER。Uboot是德國DENX小組開發(fā)用于多個(gè)嵌入式CPUbootloader程序。UBoot不但僅支持嵌入式Linux系統(tǒng),還支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS等嵌入式操作系統(tǒng)。UBoot除了支持PowerPC系列處理器外,還能支持MIPS、x86、ARM、NIOS、XScale等很多系列處理器。
第1節(jié)UBOOT移植uboot源碼中通常包含:boardcommoncpudiskdocdriversdttexamplesfsincludelib_armlib_genericnetpostrtctools等目錄。其介紹以下:1、board:一些已經(jīng)有開發(fā)板關(guān)于文件.每一個(gè)開發(fā)板都以一個(gè)子目錄出現(xiàn)。2、common:實(shí)現(xiàn)uboot命令行下支持命令,每一條命令都對應(yīng)一個(gè)文件。3、cpu:與特定CPU架構(gòu)相關(guān)文件,Uboot支持CPU在該目錄下都有一個(gè)子目錄。4、disk:對磁盤支持文件。5、doc:Uboot說明文檔,推薦大家參考閱讀。6、drivers:Uboot支持設(shè)備驅(qū)動(dòng)程序目錄,網(wǎng)卡、串口和USB等驅(qū)動(dòng)程序存放在該目錄。7、fs:支持文件系統(tǒng),Uboot現(xiàn)在支持cramfs、fat、fdos、jffs2和registerfs。8、include:Uboot使用頭文件,還有對各種硬件平臺支持匯編文件,系統(tǒng)配置文件和對文件系統(tǒng)支持文件。9、lib_xxxx:與體系結(jié)構(gòu)相關(guān)庫文件。10、net:與網(wǎng)絡(luò)協(xié)議棧相關(guān)代碼,BOOTP協(xié)議、TFTP協(xié)議、RARP協(xié)議和NFS文件系統(tǒng)實(shí)現(xiàn)。11、tools:Uboot工具目錄。U-Boot本身支持很多開發(fā)板,在其源代碼中,通常每個(gè)板子都對應(yīng)一個(gè)board/目錄下文件夾以及include/configs/目錄下目標(biāo)板配置頭文件。所以,要添加U-Boot對我們目標(biāo)板支持,首先就是要建立目標(biāo)板文件夾和配置頭文件,并修改相關(guān)Makefile。下面簡明說明為U-Boot添加新目標(biāo)板定義過程:(1)在board/目錄下建立目標(biāo)板目錄:davinci/dm365_evm,并依照目標(biāo)板硬件編寫(或從相近開發(fā)板修改)board_init.s、dm365_board.c、Makefile等文件文件。(2)在include/configs/目錄下建立目標(biāo)板配置頭文件:davinci_dm365_evm.h。(3)修改Makefile。在U-Boot源碼頂層目錄下Makefile中加入目標(biāo)板編譯配置選項(xiàng):davinci_dm365_evm_config: unconfig @$(MKCONFIG)$(@:_config=)armarm926ejsdm365_evmdavincidavinci定義CROSS_COMPILE值:CROSS_COMPILE=/home/workdir/dm365/montavista/pro/devkit/arm/v5t_le/bin/arm_v5t_le-當(dāng)然,要使編譯出來u-boot能真正適適用于我們目標(biāo)板,還有很多工作要做,包含處理器工作狀態(tài)、存放器映射設(shè)置、網(wǎng)卡驅(qū)動(dòng)移植等等。移植好文件在/home/workdir/dm365/u-boot中。第2節(jié)UBOOT編譯在命令窗口中切換到/home/workdir/dm365/u-boot目錄下,按次序輸入以下命令:makedistcleanmakedavinci_dm365_evm_configmake編譯完成,會(huì)出現(xiàn)以下界面:同時(shí),我們會(huì)看到/home/workdir/dm365/u-boot/目錄下生成二進(jìn)制文件:u-boot.bin第3節(jié)UBOOT命令介紹Printenv打印環(huán)境變量:例:printenv
Setenv設(shè)置新變量:例:setenvethaddreth0Saveenv保留變量:例:saveenv命令將當(dāng)前定義全部變量及其值存入flash中。用來存放變量及其值空間只有8k字節(jié),應(yīng)不要超出。Loadb經(jīng)過串口Kermit協(xié)議下載二進(jìn)制數(shù)據(jù)。Tftp經(jīng)過網(wǎng)絡(luò)下載程序,需要先設(shè)置好網(wǎng)絡(luò)配置。例:tftp80800000uImage(uImage應(yīng)位于tftp服務(wù)程序目錄中)Md顯示內(nèi)存區(qū)內(nèi)容。Mm修改內(nèi)存,地址自動(dòng)遞增。Nm修改內(nèi)存,地址不自動(dòng)遞增。Mw用模型填充內(nèi)存Cp拷貝一塊內(nèi)存到另一塊Cmp比較兩塊內(nèi)存區(qū)這些內(nèi)存操作命令后都可加一個(gè)后綴表示操作數(shù)據(jù)大小(比如cp.b表示按字節(jié)拷貝)Protect寫保護(hù)操作run執(zhí)行設(shè)置好腳本例:run腳本名bootcmduboot保留環(huán)境變量,也是一個(gè)腳本。假如定義了該變量,在autoboot模式下,將會(huì)執(zhí)行該腳本內(nèi)容。Go執(zhí)行內(nèi)存中二進(jìn)制代碼,一個(gè)簡單跳轉(zhuǎn)到指定地址。Bootm執(zhí)行內(nèi)存中二進(jìn)制代碼。要求二進(jìn)制代碼為制訂格式。通常為mkimage處理過二進(jìn)制文件。
Bootp經(jīng)過網(wǎng)絡(luò)開啟,需要提前設(shè)置好硬件地址。ping
(只能開發(fā)板PING服務(wù)器)例:ping47?得到全部命令列表help
得到命令幫助信息例:help命令名更多命令信息可用?和help查詢。第4節(jié)UBOOT燒寫按照附錄TDS560USB仿真器配置說明配置仿真器,連接開發(fā)板。將dm365bootwrite文件夾拷貝到C盤根目錄;CCS連上目標(biāo)板后使用LoadProgram…命令將c:\dm365bootwrite\NANDWriter_DM36x.out下載到目標(biāo)板上;點(diǎn)擊運(yùn)行程序,彈出第一個(gè)對話框,輸入c:\dm365bootwrite\UBL_DM36x_NAND.bin后回車;等候彈出第二個(gè)對話框時(shí)輸入c:\dm365bootwrite\u-boot-1.3.4-dm365_evm.bin回車;等候彈出第三個(gè)對話框時(shí)輸入c:\dm365bootwrite\u-boot-w.bin回車;等候彈出第四個(gè)對話框時(shí)輸入c:\dm365bootwrite\u_boot.bin回車;等到燒寫完成(CCS下面信息框會(huì)出現(xiàn)Burncomplete提醒),斷電,斷開仿真器。使用串口線、網(wǎng)線將目標(biāo)板和電腦連接好;打開電腦上超級終端,并設(shè)置參數(shù)以下所表示:打開開發(fā)板電源,在3秒內(nèi)按下電腦鍵盤空格鍵,我們看到超級終端輸出入下信息TechShineDM365EthernetPHY:GENERIC@0x00Hitanykeytostopautoboot:0DM365EVM:>uboot燒寫成功。
第四章LINUX操作系統(tǒng)移植及其應(yīng)用程序、驅(qū)動(dòng)程序編寫第1節(jié)LINUX操作系統(tǒng)移植我們使用linux內(nèi)核版本是2.6.18。打開/home/workdir/dm365/linux-2.6.18_pro500即可看到其源碼:/arch子目錄包含了全部與硬件體系結(jié)構(gòu)相關(guān)內(nèi)核移植代碼。其中每一個(gè)目錄都代表一個(gè)硬件平臺,對于每種平臺都應(yīng)該包含:boot:包含開啟內(nèi)核所使用部分或全部平臺相關(guān)代碼。kernel:包含支持體系結(jié)構(gòu)特有特征代碼lib:包含存放體系結(jié)構(gòu)特有通用函數(shù)實(shí)當(dāng)代碼mm:包含存放體系結(jié)構(gòu)特有內(nèi)存管理程序?qū)崿F(xiàn)mach-xxx:包含存放該處理器移植代碼/Documentation子目錄包含關(guān)于內(nèi)核許多非常詳細(xì)文檔。/drivers子目錄包含內(nèi)核中全部設(shè)備驅(qū)動(dòng)程序。/fs子目錄包含了全部文件系統(tǒng)代碼。/include子目錄包含了建立內(nèi)核代碼時(shí)所需大部分庫文件頭文件,該模塊利用其余模塊重建內(nèi)核。同時(shí),它也包含不一樣平臺需要庫文件。/init子目錄包含了內(nèi)核初始化代碼,內(nèi)核從此目錄下開始工作。/ipc子目錄包含了內(nèi)核進(jìn)程間通訊代碼。/kernel子目錄包含了主內(nèi)核代碼,如進(jìn)程調(diào)度等。/lib子目錄包含了通用庫函數(shù)代碼等。/mm子目錄包含了內(nèi)核內(nèi)存管理代碼。/net子目錄包含了內(nèi)核網(wǎng)絡(luò)相關(guān)代碼。/scripts子目錄包含了配置內(nèi)核一些腳本文件通常在每個(gè)目錄下,都有一個(gè).depend文件和一個(gè)Makefile文件,這兩個(gè)文件都是編譯時(shí)使用輔助文件,仔細(xì)閱讀這兩個(gè)文件對搞清各個(gè)文件這間聯(lián)絡(luò)和依靠關(guān)系很有幫助;而且,在有目錄下還有Readme文件,它是對該目錄下文件一些說明,一樣有利于我們對內(nèi)核源碼了解。設(shè)置目標(biāo)平臺和指定交叉編譯器嵌入式系統(tǒng)硬件平臺千差萬別,其處理器也各不相同,針對不一樣處理器我們要使用對應(yīng)交叉編譯環(huán)境。所以在編譯之前要對指定交叉編譯器。在根目錄Makefile文件中,修改以下:###########################ARCH:=arm###########################CROSS_COMPILE=/home/workdir/dm365/montavista/pro/devkit/arm/v5t_le/bin/arm_v5t_le-###########################配置內(nèi)核Linux有三種方式來配置內(nèi)核:makeconfig、makemenuconfig和makexconfig。后兩種界面好操作方便。我們用makexconfig。在命令行中輸入:cd/home/workdir/dm365/linux-2.6.18_pro500makexconfig稍等,我們會(huì)看到彈出以下窗口:然后,我們就能夠在這個(gè)窗口中定制內(nèi)核了。配置完后,保留退出。系統(tǒng)會(huì)把我們配置寫入內(nèi)核根目錄中.config文件中。編譯時(shí),make會(huì)自動(dòng)調(diào)用.config文件。接著,我們在命令行輸入:makeuImage我們會(huì)看到編譯輸出信息,編譯時(shí)間和您電腦性能關(guān)于,編譯完成后就會(huì)得到linux內(nèi)核文件:uImage(在目錄/home/workdir/dm365/linux-2.6.18_pro500/arch/arm/boot中)當(dāng)然要把linux移植到自己硬件平臺上還有很多工作要做。要求我們對linux和目標(biāo)平臺都要很熟悉。不過不用擔(dān)心,芯片制造商和開發(fā)板制造商會(huì)給您提供很多移植好代碼,您只需要在這些代碼基礎(chǔ)上依照自己硬件修改就行了。精儀達(dá)盛企業(yè)為您提供在EL_TECHV_DM365開發(fā)板上移植好linux代碼位于/home/workdir/dm365/linux-2.6.18_pro500中。第2節(jié)LINUX內(nèi)核燒寫在下載內(nèi)核之前,要連接電腦主機(jī)和開發(fā)板串口和網(wǎng)口并確保目標(biāo)板uboot能夠正常工作。打開虛擬機(jī)Vmare,并登錄到虛擬機(jī)Linux;把上一節(jié)編譯好內(nèi)核拷貝到/tftpboot目錄下。給開發(fā)板上電,并在三秒內(nèi)按下電腦鍵盤空格鍵進(jìn)入uboot命令行。把上述uImage文件下到DDR內(nèi)存中,在uboot命令行中輸入以下命令:tftp0x80800000uImage 稍等即可看到:在uboot命令行中輸入以下命令:nanderase40000000 等候Flash擦除完成。最終在uboot命令行中輸入以下命令:nandwrite8080000040000000燒寫完成后,輸入boot命令或按下復(fù)位鍵,即可看到dm365用新固化在nandflash中kernel開啟。第3節(jié)LINUX驅(qū)動(dòng)程序編寫系統(tǒng)調(diào)用是操作系統(tǒng)內(nèi)核和應(yīng)用程序之間接口,設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)內(nèi)核和機(jī)器硬件之間接口.設(shè)備驅(qū)動(dòng)程序?yàn)閼?yīng)用程序屏蔽了硬件細(xì)節(jié),這么在應(yīng)用程序看來,硬件設(shè)備只是一個(gè)設(shè)備文件,應(yīng)用程序能夠像操作普通文件一樣對硬件設(shè)備進(jìn)行操作.設(shè)備驅(qū)動(dòng)程序是內(nèi)核一部分,它完成以下功效:1、對設(shè)備初始化和釋放.2、把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù).3、讀取應(yīng)用程序傳送給設(shè)備文件數(shù)據(jù)和回送應(yīng)用程序請求數(shù)據(jù).4、檢測和處理設(shè)備出現(xiàn)錯(cuò)誤.在Linux操作系統(tǒng)下有兩類主要設(shè)備文件類型,一個(gè)是字符設(shè)備,另一個(gè)是塊設(shè)備.字符設(shè)備和塊設(shè)備主要區(qū)分是:在對字符設(shè)備發(fā)出讀/寫請求時(shí),實(shí)際硬件I/O通常就緊接著發(fā)生了,塊設(shè)備則不然,它利用一塊系統(tǒng)內(nèi)存作緩沖區(qū),當(dāng)用戶進(jìn)程對設(shè)備請求能滿足用戶要求,就返回請求數(shù)據(jù),假如不能,就調(diào)用請求函數(shù)來進(jìn)行實(shí)際I/O操作.塊設(shè)備是主要針對磁盤等慢速設(shè)備設(shè)計(jì),以免花費(fèi)過多CPU時(shí)間來等候.用戶進(jìn)程是經(jīng)過設(shè)備文件來與實(shí)際硬件打交道.每個(gè)設(shè)備文件都都有其文件屬性(c/b),表示是字符設(shè)備還塊設(shè)備。另外每個(gè)文件都有兩個(gè)設(shè)備號,第一個(gè)是主設(shè)備號,標(biāo)識驅(qū)動(dòng)程序,第二個(gè)是從設(shè)備號,標(biāo)識使用同一個(gè)設(shè)備驅(qū)動(dòng)程序不一樣硬件設(shè)備,比如有兩個(gè)軟盤,就能夠用從設(shè)備號來區(qū)分他們.(設(shè)備文件主設(shè)備號必須與設(shè)備驅(qū)動(dòng)程序在登記時(shí)申請主設(shè)備號一致,不然用戶進(jìn)程將無法訪問到驅(qū)動(dòng)程序.)在系統(tǒng)內(nèi)部,I/O設(shè)備存/取經(jīng)過一組固定入口點(diǎn)來進(jìn)行,這組入口點(diǎn)是由每個(gè)設(shè)備設(shè)備驅(qū)動(dòng)程序提供。詳細(xì)到Linux系統(tǒng),設(shè)備驅(qū)動(dòng)程序所提供這組入口點(diǎn)由一個(gè)文件操作結(jié)構(gòu)來向系統(tǒng)進(jìn)行說明。file_operations結(jié)構(gòu)定義于linux/fs.h文件中,伴隨內(nèi)核不停升級,file_operations結(jié)構(gòu)也越來越大,不一樣版本內(nèi)核會(huì)稍有不一樣。
structfile_operations
{
structmodule*owner;
loff_t(*llseek)(structfile*,loff_t,int);
ssize_t(*read)(structfile*,char*,size_t,loff_t*);
ssize_t(*write)(structfile*,constchar*,size_t,loff_t*);
int(*readdir)(structfile*,void*,filldir_t);
unsignedint(*poll)(structfile*,structpoll_table_struct*);
int(*ioctl)(structinode*,structfile*,unsignedint,\
unsignedlong);
int(*mmap)(structfile*,structvm_area_struct*);
int(*open)(structinode*,structfile*);
int(*flush)(structfile*);
int(*release)(structinode*,structfile*);
int(*fsync)(structfile*,structdentry*,intdatasync);
int(*fasync)(int,structfile*,int);
int(*lock)(structfile*,int,structfile_lock*);
ssize_t(*readv)(structfile*,conststructiovec*,\
unsignedlong,loff_t*);
ssize_t(*writev)(structfile*,conststructiovec*,\
unsignedlong,loff_t*);
ssize_t(*sendpage)(structfile*,structpage*,int,size_t,\
loff_t*,int);
unsignedlong(*get_unmapped_area)(structfile*,unsignedlong,\
unsignedlong,unsignedlong,unsignedlong);
};file_operations結(jié)構(gòu)中組員全部是函數(shù)指針,所以實(shí)質(zhì)上就是函數(shù)跳轉(zhuǎn)表。每個(gè)進(jìn)程對設(shè)備操作,都會(huì)依照major、minor設(shè)備號,轉(zhuǎn)換成對file_operations結(jié)構(gòu)訪問。即在文件操作中使用open,read,write,ioctl,close等,都會(huì)調(diào)用在file_operation中定義對應(yīng)函數(shù)入口。下面給出一個(gè)設(shè)備驅(qū)動(dòng)注冊模版供您參考:1
//設(shè)備結(jié)構(gòu)體
2
structxxx_dev_t
3
{
4
structcdevcdev;
5
...
6
}xxx_dev;
7
//設(shè)備驅(qū)動(dòng)模塊加載函數(shù)
8
staticint__initxxx_init(void)
9
{
10
...
11
cdev_init(&xxx_dev.cdev,&xxx_fops);//初始化cdev
12
xxx_dev.cdev.owner=THIS_MODULE;
13
//獲取字符設(shè)備號
14
if(xxx_major)
15
{
16
register_chrdev_region(xxx_dev_no,1,DEV_NAME);
17
}
18
else
19
{
20
alloc_chrdev_region(&xxx_dev_no,0,1,DEV_NAME);
21
}
22
23
ret=cdev_add(&xxx_dev.cdev,xxx_dev_no,1);//注冊設(shè)備
24
...
25}
26//設(shè)備驅(qū)動(dòng)模塊卸載函數(shù)
27staticvoid__exitxxx_exit(void)
28{
29
unregister_chrdev_region(xxx_dev_no,1);//釋放占用設(shè)備號
30
cdev_del(&xxx_dev.cdev);//注銷設(shè)備
31
...
32}接著,讓我們自己動(dòng)手來做一個(gè)驅(qū)動(dòng):1、編寫hello-driver.c#include<linux/init.h>#include<linux/module.h>#include<linux/kernel.h>staticintMy_init(void){printk(KERN_ALERT"Hello,TECHSHINE!\n");return0;}staticvoidMy_exit(void){printk(KERN_ALERT"Thisismyfirstmodule!\nGoodByeNow!\n");}module_init(My_init);module_exit(My_exit);MODULE_LICENSE("GPL");宏module_init調(diào)用函數(shù)My_init,My_init這個(gè)函數(shù)是模塊入口,在這里My_init功效是打印“Hello,TECHSHINE!”。當(dāng)卸載模塊時(shí)由module_exit宏調(diào)用My_exit函數(shù),這是模塊注銷函數(shù)。卸載模塊時(shí)打印"Thisismyfirstmodule!\nGoodByeNow!"。這里使用是printk而不是printf,因?yàn)樵趦?nèi)核中不能直接這么調(diào)用C庫函數(shù)。所以module.h和kernel.h是內(nèi)核模塊必須頭文件,MODULE_LICENSE("GPL")表示這個(gè)模塊遵照GPL規(guī)則?,F(xiàn)在我們把hello-driver.c保留到/home/filesys/home/hello-driver目錄下。2、編寫其Makefile文件:MVTOOL_PREFIX=/home/workdir/dm365/montavista/pro/devkit/arm/v5t_le/bin/arm_v5t_le-KERNEL_DIR=/home/workdir/dm365/linux-2.6.18_pro500MAKE_ENV=ARCH=armCROSS_COMPILE=$(MVTOOL_PREFIX)obj-m+=hello-driver.oall: make-C$(KERNEL_DIR)M=`pwd`$(MAKE_ENV)modulesclean: -rm-rf*.o*mod**.ko.cmem*.tmp*我們也把它保留到/home/filesys/home/hello-driver目錄下。3、輸入cd/home/filesys/home/hello-drivermake進(jìn)行編譯,生成可執(zhí)行文件hello-driver.ko4、打開超級終端,設(shè)置以下:5、給開發(fā)板上電,登陸到MontaVistaLinux。在串口終端下輸入:cd/home/hello-driverinsmodhello-driver.ko串口終端會(huì)輸出:Hello,TECHSHINE!輸入:rmmodhello-driver.ko卸載hello-driver.ko
DM365USB驅(qū)動(dòng)編寫試驗(yàn)?zāi)繕?biāo)熟悉Linux下C語言編程熟悉Linux下DM365驅(qū)動(dòng)程序編寫試驗(yàn)設(shè)備計(jì)算機(jī)、DM365開發(fā)板、U盤試驗(yàn)內(nèi)容試驗(yàn)程序源代碼位于/home/workdir/dm365/linux-2.6.18_pro500/drivers/usb目錄下,請用戶仔細(xì)閱讀,了解內(nèi)部運(yùn)行機(jī)制。試驗(yàn)步驟連接好DM365試驗(yàn)平臺和計(jì)算機(jī);打開虛擬機(jī)Vmare,并登錄到虛擬機(jī)Linux打開超級終端,設(shè)置以下:給DM365上電,待linux開啟完成提醒輸入用戶名,我們輸入root即可進(jìn)入開發(fā)板上運(yùn)行l(wèi)inux系統(tǒng)。把U盤插開發(fā)板usb接口。(注:U盤文件系統(tǒng)必須為Fat或者Fat32)此時(shí),串口終端輸出以下信息:輸入mount-tvfat/dev/scsi/host0/bus0/target0/lun0/part1/mnt/usb或mount/dev/sda1/mnt/usb或mount/dev/sda/mnt/usb(注:掛載時(shí)用設(shè)備描述符依照實(shí)際情況有所不一樣請用戶依照插卡時(shí)系統(tǒng)提醒信息正確掛載設(shè)備)然后查看/mnt/usb目錄中內(nèi)容,我們會(huì)看到原來U盤中已經(jīng)有文件。進(jìn)入/mnt/usb目錄,輸入命令:mkdirhellols我們會(huì)看到自己在U盤中創(chuàng)建目錄:hello輸入:cd..umountusb,拔出U盤。本試驗(yàn)結(jié)束。
DM365SD卡驅(qū)動(dòng)編寫試驗(yàn)?zāi)繕?biāo)熟悉Linux下C語言編程熟悉Linux下DM365驅(qū)動(dòng)程序編寫熟悉DM365SD/MMC控制器操作方式試驗(yàn)設(shè)備計(jì)算機(jī)、DM6446開發(fā)板、SD卡試驗(yàn)內(nèi)容試驗(yàn)程序源代碼位于/home/workdir/dm365/linux-2.6.18_pro500/drivers/mmc目錄下,請用戶仔細(xì)閱讀,了解內(nèi)部運(yùn)行機(jī)制。試驗(yàn)步驟連接好DM365試驗(yàn)平臺和計(jì)算機(jī);打開虛擬機(jī)Vmare,并登錄到虛擬機(jī)Linux打開超級終端,設(shè)置以下:給開發(fā)板上電,進(jìn)入linux系統(tǒng),把sd卡插入開發(fā)板上sd/mmc接口。(注:SD卡最好格式化為Fat或者Fat32格式且容量應(yīng)小于2G)此時(shí),串口終端輸出以下信息:.1.2:~#mmcblk0:mmc0:19b3SD02G1921024KiBdevfs_mk_dir:invalidargument.<6>mmcblk0:p1接著,在串口終端中輸入:mount/dev/mmcblk0p1/mnt/(注:掛載時(shí)用設(shè)備描述符依照實(shí)際情況有所不一樣請用戶依照插卡時(shí)系統(tǒng)提醒信息正確掛載設(shè)備)然后查看/mnt/目錄中內(nèi)容,我們會(huì)看到原來sd卡中已經(jīng)有文件。進(jìn)入/mnt/目錄,輸入命令:mkdirhellols我們會(huì)看到自己在sd卡中創(chuàng)建目錄:hellomount/dev/mmcblk0p1/mnt/.1.2:~#ls/mntdctv.1.2:~#cd/mnt.1.2:/mnt#lsdctv.1.2:/mnt#mkdirhello.1.2:/mnt#lsdctvhello輸入:cd..umountmnt,拔出sd卡。本試驗(yàn)結(jié)束。
第4節(jié)LINUX應(yīng)用程序編寫應(yīng)用程序編寫與驅(qū)動(dòng)程序編寫相比對硬件依賴程度大為減小,相對來說也比較輕易,另外,書籍、資料也相當(dāng)多。這里不再贅述,只舉一小例子,來說明以下編譯器使用方法。編寫hello.c文件:#include<stdio.h>intmain(){ printf("Hello,TECHSHINE!\n"); return0;}把它保留到/home/filesys/home/hello目錄中。編寫Makefile文件:cc=/home/workdir/dm365/montavista/pro/devkit/arm/v5t_le/bin/arm_v5t_le-gcchello:hello.c $(cc)hello.c-ohelloclean: rmhello也把它保留到/home/filesys/home/hello目錄中。輸入cd/home/filesys/home/hellomake進(jìn)行編譯,生成可執(zhí)行文件hello打開超級終端,設(shè)置以下:給開發(fā)板上電,登錄到MontaVistaLinux。在串口終端下輸入:cd/home/hello./hello串口終端會(huì)輸出:Hello,TECHSHINE!
第五章視頻音頻編解碼試驗(yàn)第1節(jié)G711格式語音編碼試驗(yàn)注:程序源代碼在虛擬機(jī)/home/workdir/dm365/dvsdk_2_10_01_18/dvsdk_demos_2_10_00_17/dm365/encode目錄下面。一、目標(biāo)1.熟悉Linux下C語言編程;2.熟悉DM365語音編碼方式;二、設(shè)備計(jì)算機(jī),DM365開發(fā)板,音頻線,電視。三、步驟與內(nèi)容1.連接好硬件。注意:音頻頻信號能夠使用音頻線從電腦上輸入。2、打開并設(shè)置好超級終端。3.打開虛擬機(jī)Vmare,并使用root用戶登錄到虛擬機(jī)Linux;4.給DM365上電,使用root用戶登錄到目標(biāo)板。5.在串口終端下,切換到/opt/dvsdk目錄:敲入命令:cd/opt/dvsdk6.運(yùn)行編碼程序encode,在/opt/dvsdk目錄依次下輸入以下命令:./loadmodules.sh ./encode-s/home/test.g711-l (運(yùn)行程序)該命令把輸入聲音編碼成G711格式,保留在/home目錄下test.g711。稍等即可看到電視有正在錄制聲音信息輸出,比如soundbitrate7.按鍵盤“Ctrl+C”來結(jié)束程序8.本試驗(yàn)結(jié)束。
第2節(jié)G711格式語音解碼試驗(yàn)注:程序源代碼在虛擬機(jī)/home/workdir/dm365/dvsdk_2_10_01_18/dvsdk_demos_2_10_00_17/dm365/decode目錄
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 隔音板施工方案
- 專利引進(jìn)合同范例格式
- 公司承包印刷合同范例
- 制度牌制作合同范例
- 論黨的青年工作總結(jié)
- 出租車行合同范例
- 農(nóng)業(yè)機(jī)械合同范例
- 債權(quán)轉(zhuǎn)讓結(jié)算合同范例
- 農(nóng)田合租合同范例
- 供貨磚合同范例
- 人教鄂教版六年級下冊科學(xué)全冊知識點(diǎn)
- 小學(xué)科學(xué)湘科版四年級下冊全冊同步練習(xí)含答案
- TOC基本課程講義學(xué)員版-王仕斌
- 《國家綜合性消防救援隊(duì)伍處分條令(試行)》知識考試題庫(含答案)
- 電動(dòng)平車使用說明書
- 人口學(xué)概論完
- 火場排煙課件
- 人行道開挖施工方案簡單版
- 酒店西餐廳物品采購清單
- 危險(xiǎn)作業(yè)維修工作方案
- 環(huán)形加熱爐筑爐施工技術(shù)
評論
0/150
提交評論