




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
目錄機開發(fā)篇 6第一部分1S5PV210初識ARM 6ARM處理器的應(yīng)用領(lǐng)域 2.42.53目錄機開發(fā)篇 6第一部分1S5PV210初識ARM 6ARM處理器的應(yīng)用領(lǐng)域 6.488.18.2ARMS5PV210A88910S5PV210機開發(fā)軟件和驅(qū)動的安裝 11本章小結(jié) 11ARM匯編語言基礎(chǔ) 12ARM12ARM尋址方式 13ARM指令集 14ARM偽指令 16本章小結(jié) 18詳解S5PV210啟動過程 19S5PV21019S5PV210啟動模式設(shè)置 20S5PV210啟動流程分析 21本章小結(jié) 23S5PV210GPIO接口實驗 24GPIO24匯編點亮LED 25用C語言和匯編混合編程點亮流水燈 34按鍵LED實例 35實例 40本章小結(jié) 43S5PV210系統(tǒng)時鐘 44S5PV210時鐘體系簡述 44系統(tǒng)時鐘實例 46本章小結(jié) 52S5PV210串口通信原理與應(yīng)用 52串口通信原理 52S5PV210UART的功能特性 53S5PV210UART實例 56本章小結(jié) 60S5PV210中斷體系結(jié)構(gòu)與應(yīng)用 61中斷的概念 61S5PV210按鍵中斷實例 62本章小結(jié) 70S5PV210定時器原理與應(yīng)用 71PWM定時器的概述 71PWM定時器實例 7328.39.41010.4111.5112.41313.4本章小結(jié)8.39.41010.4111.5112.41313.4本章小結(jié) 82S5PV210 NANDFLASH器 83FLASH概述 83S5PV210NANDFLASH器 90NANDFLASH的操作實例 95本章小結(jié) 107S5PV210 I2C接口與應(yīng)用 108初識I2C總線 108S5PV210I2C總線接口 110I2C(讀寫AT24C02) 112本章小結(jié) 122S5PV210 LCD器原理與應(yīng)用 122LCD簡介 122S5PV210LCD器 123LCD顯示實例 130本章小結(jié) 138S5PV210 ADC接口與應(yīng)用 139ADC接口概述 139ADC轉(zhuǎn)換操作 140ADC實例 141本章小結(jié) 147S5PV210 I2S接口與應(yīng)用 148初識I2S總線 148I2S總線數(shù)據(jù)傳輸 148I2S實例(wm8960音頻實例) 149本章小結(jié) 162第二部分1Bootloader移植篇 163初識Bootloader 164.4初識Bootloader 163常見的Bootloader 164Bootloader啟動流程分析 165Bootloader啟動的兩個階段 165Bootloader的內(nèi)核調(diào)用 166U-BOOT移植準(zhǔn)備工作 168U-BOOT簡介 168U-BOOT的架構(gòu)概述 168U-BOOT啟動流程的源代碼分析 170U-BOOT驗 191U-BOOT使用 195教你學(xué)會移植U-BOOT 2111開發(fā)板的信息 211第2步,拷貝相關(guān)開發(fā)板目錄 211第3步,修改相關(guān)文件 212第4步,修改編譯文件 21404.114.125第5步,修改打印信息 214第04.114.125第5步,修改打印信息 214第6步,修改內(nèi)存信息 215第7步,支持DM9000網(wǎng)卡 216第8步,支持NandFlash 220第9步,支持NandFlash啟動 223第10步,支持yaffs2燒寫 226第11步,U-Boot命令移植 235第12步,菜單欄的移植 241Bootloader移植篇小小小結(jié) 245第三部分123Linux內(nèi)核移植篇 246Linux由來與版本 246內(nèi)核編譯驗 247Linux內(nèi)核結(jié)構(gòu) 250內(nèi)核的子系統(tǒng) 251內(nèi)核目錄 255管理253六大步教你學(xué)會移植Linux內(nèi)核 263第一步,源代碼獲取 263第二步,修改內(nèi)核 265第三步,配置內(nèi)核 273第四步,檢查串口 284第五步,拷貝uImage制作工具(mkimage) 285第六步,編譯及出錯處理 286Linux內(nèi)核移植篇小小小結(jié) 295第四部分1構(gòu)建Linux根文件系統(tǒng)篇 296Linux文件系統(tǒng)簡介 2文件系統(tǒng)與根文件系統(tǒng) 296文件系統(tǒng)的類型 297Linux根文件系統(tǒng)目錄結(jié)構(gòu) 297Linux文件屬性 298移植BusyBox 300BusyBox的簡介 300獲取BusyBox源碼 301四部曲移植BusyBox 302命令就是可執(zhí)行程序: 306構(gòu)建根文件系統(tǒng) 307構(gòu)建lib目錄 307構(gòu)建dev目錄 308構(gòu)建etc目錄 310構(gòu)建/proc、/sys和/tmp目錄 317構(gòu)建NFS文件系統(tǒng) 318NFS簡介 318NFS服務(wù)器的安裝與配置 318關(guān)閉:31944.455.15.26設(shè)置4.455.15.26設(shè)置uboot中的關(guān)于NFS的參數(shù) 320構(gòu)建YAFFS2文件系統(tǒng) 325YAFFS2簡介 325作yaffs2映像文件: 325構(gòu)建Linux文件系統(tǒng)篇小小小結(jié) 327第五部分1Qt編程篇 328Qt322.233.1Qt的開發(fā)工具 328Qt的版本 329Qt4開發(fā)平臺的建立 330編譯和安裝Qt4 330使用QtCreator進行開發(fā) 336基礎(chǔ)例程開發(fā)詳解 346mainwindow 3465第一部分S5PV210機開發(fā)篇第1章ARM1.1ARM1.1.1ARMARM處理器是一種低功耗高性能32位RISC(精簡指令集)處理器。目前,及工業(yè)市場,基于ARM32RISC75%以上的市場份額,ARM第一部分S5PV210機開發(fā)篇第1章ARM1.1ARM1.1.1ARMARM處理器是一種低功耗高性能32位RISC(精簡指令集)處理器。目前,及工業(yè)市場,基于ARM32RISC75%以上的市場份額,ARM1.1.2ARM處理器的應(yīng)用領(lǐng)域的發(fā)展和革新為人們的生活帶來了極大的便利。1.無線通信、便攜式式目前已有超過80%的無線通信采用了ARMARM在該領(lǐng)域的地位日益鞏固。如:PAD、智能上網(wǎng)本、 等。1.1ARM1.2ARM應(yīng)用2.數(shù)字消費類流行的數(shù)碼相機和打印機中絕大部分采用ARM技術(shù),中SIMGPS導(dǎo)航儀等。61.3數(shù)字機頂盒1.4GPS3.領(lǐng)域隨著寬帶技術(shù)的發(fā)展及推廣,采用ARM技術(shù)的交換機、無線點、、多服務(wù)配置平臺、連接和固態(tài)磁盤等。1.5路由器1.1.2ARM處理器的特點16/321.3數(shù)字機頂盒1.4GPS3.領(lǐng)域隨著寬帶技術(shù)的發(fā)展及推廣,采用ARM技術(shù)的交換機、無線點、、多服務(wù)配置平臺、連接和固態(tài)磁盤等。1.5路由器1.1.2ARM處理器的特點16/32有以下六個主要特點:①②③④⑤⑥體積小、低功耗,低成本和高性能;支持Thumb(16位)/ARM(32位)雙指令集;大量使用寄存器,指令執(zhí)行速度快;尋址方式靈活簡單,執(zhí)行效率高;指令長度固定。7主流1.2.1ARM、ARM9、ARM9E、ARM10E、ARM11、Cortex系列等,目前仍在不斷發(fā)展。1.6ARM1.2.2ARM名ARM主流1.2.1ARM、ARM9、ARM9E、ARM10E、ARM11、Cortex系列等,目前仍在不斷發(fā)展。1.6ARM1.2.2ARM名ARMv7ARM通常以ARM【xyzTDMIEJFS】形式出現(xiàn),這些后綴了可以組合,含義如下:①②③④⑤⑥⑦⑧⑨⑩x:y:z:T:D:M:I:E:J:F:管理/保護單元;擁有Cache;表示支持片上調(diào)試(Debug);(Multiplier);支持片上斷點和調(diào)試點;增強指令(TDMI;支持JazelleJava;支持向量浮點單元;?S:表示式(fullsynthesizable。81.3.1S5PV210CortexA8處理器給消費和低功耗移動 帶來了的 ,使得最終用戶可以享受到更高水準(zhǔn)的和創(chuàng)新。全新的ARMCortex-A8處理器及其背后帶來具有豐富應(yīng)用的創(chuàng)新。Cortex-A8處理器是第一款基于下一代ARMv7架構(gòu)的應(yīng)用處理器。其中S5PV210是大名鼎鼎的三星公司推出的一款適用于智能和平板電腦等多媒體的應(yīng)用處理器,具有完整的應(yīng)用兼容性,支持傳統(tǒng)的ARM、Thumb指令集和新增的高性能緊湊型Thumb-21.3.1S5PV210CortexA8處理器給消費和低功耗移動 帶來了的 ,使得最終用戶可以享受到更高水準(zhǔn)的和創(chuàng)新。全新的ARMCortex-A8處理器及其背后帶來具有豐富應(yīng)用的創(chuàng)新。Cortex-A8處理器是第一款基于下一代ARMv7架構(gòu)的應(yīng)用處理器。其中S5PV210是大名鼎鼎的三星公司推出的一款適用于智能和平板電腦等多媒體的應(yīng)用處理器,具有完整的應(yīng)用兼容性,支持傳統(tǒng)的ARM、Thumb指令集和新增的高性能緊湊型Thumb-2指令集。1.3.2Cortex-A8①②③④Internet多核技術(shù),單核到四核實現(xiàn),支持面向性能的應(yīng)用領(lǐng)域。ARMThumbThumb-2度。91.4ARMCortexA8S5PV2101GHz能支持多種操作系統(tǒng),如:Linux、AndriodWinCERedHatLinuxSecureCRT發(fā)方便,使用簡單。4128MBDDR2ECC據(jù)讀寫的出錯率。人機交互模塊選用1.4ARMCortexA8S5PV2101GHz能支持多種操作系統(tǒng),如:Linux、AndriodWinCERedHatLinuxSecureCRT發(fā)方便,使用簡單。4128MBDDR2ECC據(jù)讀寫的出錯率。人機交互模塊選用7寸電容式觸摸屏24bpp,分辨率:800×480,支持五點觸摸,用戶能清晰實時地查看圖像、數(shù)據(jù),和通過點擊觸摸屏 平臺,為開發(fā)工業(yè)類和消費類項目提供了便利。板均可拔插更換,底板的預(yù)留接口有、Camera設(shè)計板、底板或加護;平臺集成了WM8960音頻模塊、DM9000通信電路、usb通信電路、8個按鍵和蜂鳴器等外設(shè),豐富。10的程序,操作方便,燒寫速度快,加快開發(fā)進度。RFID、ZigBee、藍牙、WIFI1.5S5PV210O(∩_∩)O~~A81.6本章小結(jié)本章主要簡單了ARM到的程序,操作方便,燒寫速度快,加快開發(fā)進度。RFID、ZigBee、藍牙、WIFI1.5S5PV210O(∩_∩)O~~A81.6本章小結(jié)本章主要簡單了ARM到ARM處理器是如此的強大,可望而不可及的感覺,有木有^_^。是不是很渴望開始學(xué)習(xí)ARM51杰出的工程師。11第2章ARM匯編語言基礎(chǔ)2.1ARM處理器一般共有37個寄存器,其中:(1)31個通用寄存器,PC(程序計數(shù)器)32(2)6個狀態(tài)寄存器,都是32位的寄存器。ARM7(User,快速中斷模式(FIQ,普通中斷模式(IRQ,管理模式(Sv第2章ARM匯編語言基礎(chǔ)2.1ARM處理器一般共有37個寄存器,其中:(1)31個通用寄存器,PC(程序計數(shù)器)32(2)6個狀態(tài)寄存器,都是32位的寄存器。ARM7(User,快速中斷模式(FIQ,普通中斷模式(IRQ,管理模式(Svc,數(shù)據(jù)中止模式(Abort(Und(Sys應(yīng)的寄存器。在任意一種處理器模式下,可見的寄存器15個通用寄存器(R0~R14(PC理寄存器。擁有的物2.1ARM在Thumb,通常只能使用r4~r7來保存局部變量;r12用作子程序間為連接寄存器(lr,用于保存子程序的返回地址;r15用作程序計數(shù)器12由于ARM采用了流水線機制,當(dāng)正確8PC2.2ARM2.2.1立即尋址例:以上兩條指令,第二個源操作數(shù)為立即數(shù),要求以“#”為前綴,對于十六進制數(shù)需在緊跟“#”后加上“0x以后出現(xiàn)都是如此,故不再詳述。2.2.2寄存器尋址例:將寄存器R1和R2存放的內(nèi)容相加,結(jié)果存放在寄存器R0中。2.2.3寄存器間接尋址例:由于ARM采用了流水線機制,當(dāng)正確8PC2.2ARM2.2.1立即尋址例:以上兩條指令,第二個源操作數(shù)為立即數(shù),要求以“#”為前綴,對于十六進制數(shù)需在緊跟“#”后加上“0x以后出現(xiàn)都是如此,故不再詳述。2.2.2寄存器尋址例:將寄存器R1和R2存放的內(nèi)容相加,結(jié)果存放在寄存器R0中。2.2.3寄存器間接尋址例:條指令,將R0的數(shù)據(jù) 到R1的值為地址的器里面。2.2.4多寄存器尋址例:16IA加載/操作后,R0按字長增加。R1、讀出R0,R013LDMIAR0,{R1,R2,R3,R4} ;R1<-[R0],R2<-[R0+4],;R3<-[R0+8],R3<-[R0+12]STMIAR0,{R3-R5,R10} ;[R0]<-R3,[R0+4]<-R4;[R0+8]<-R5,[R5+12]<-R10LDRR0,[R1] ;R0<-[R1]STRR0,[R1] ;[R1]<-R0ADDR0,R1,R2 ;R0<-R1+R2ADDR0,R0,#0x1 ;R0<-R0+1ADDR0, R0,#0x3f ;R0<-R0+0x3f2.3ARM2.3.1ARM格式:<opcode>{<cond>}{S}{Rd},{Rn},{operand2}<opcode>:{<cond>}:{S}:{Rd}:{Rn}:{operand2}:LDR、STR2.3ARM2.3.1ARM格式:<opcode>{<cond>}{S}{Rd},{Rn},{operand2}<opcode>:{<cond>}:{S}:{Rd}:{Rn}:{operand2}:LDR、STRNE標(biāo)寄存器編碼。第二個操作數(shù)。條件碼是在ARM指令執(zhí)行之前進行ARM2.2ARM2.3.2跳轉(zhuǎn)指令流程的跳轉(zhuǎn):使用專門的跳轉(zhuǎn)指令。②PC有兩種可以實現(xiàn)程序ARM①B(32MB)BPC14地址 理器模式下的返回。BLX帶返回和狀態(tài)切換的跳轉(zhuǎn)指令BX帶狀態(tài)切換的跳轉(zhuǎn)指令LR2.3.3數(shù)據(jù)處理指令數(shù)據(jù)處理指令分類:①數(shù)據(jù)傳送指令②比較指令③算數(shù)運算指令邏輯運算指令例:2.3.4乘法指令例:2.3.5加載/指令A(yù)RM指令用于在寄存器和地址 理器模式下的返回。BLX帶返回和狀態(tài)切換的跳轉(zhuǎn)指令BX帶狀態(tài)切換的跳轉(zhuǎn)指令LR2.3.3數(shù)據(jù)處理指令數(shù)據(jù)處理指令分類:①數(shù)據(jù)傳送指令②比較指令③算數(shù)運算指令邏輯運算指令例:2.3.4乘法指令例:2.3.5加載/指令A(yù)RM指令用于在寄存器和器之間傳送數(shù)據(jù)15MULR0,R1,R2 ;R0=R1*R2ADDR0,R0#3 R00、1ORRR0,R0,#3 ;該指令置R0的0、1位為1,其余位保持不變。BICR0,R0,#0xf8 清除R0的高5位,其余位保持不變。ADDR0,R1,#256 ;R0=R1+256SUBR0,R1,R2 ;R0=R1–R2RSBR0,R2,R3,LSL#1 ;R0=(R3<<1)–R2CMPR1,#100 R1100CPSRTSTR1,#0xfffe R10xfffe結(jié)果設(shè)置CPSR的標(biāo)志位。MOVR1,R0 R0R1MOVR1,R0,LSL#3 R03R1例:2.3.6程序狀態(tài)寄存器指令①②MSRMRS2.4的使命也就隨之結(jié)束。2.4.1符號定義偽指令符號定義偽操作主要用于ARM匯編例:2.3.6程序狀態(tài)寄存器指令①②MSRMRS2.4的使命也就隨之結(jié)束。2.4.1符號定義偽指令符號定義偽操作主要用于ARM匯編存器的別名等操作。常見的符號定義偽操作有如下幾種:①②③④⑤、GBLLGBLS。、LCLLLCLS。用于對變量賦值的SETA、SETLSETS。為CP。為一個通用寄存器列表定義別名用RLIST。16GBLA TEST ;定義一個全局的數(shù)字變量,變量名為TESTTEST SETA0x55 0x55LCLS STRING STRINGSETS“Webee210” ;將該變量賦值為”Webee210”ListRLIST {R0-R3} R0~R3MSRCPSR,R0 器MRS R0,CPSR R0寄存器LDRR0,[R1,R2] ;將 存器R0LDRR0,[R1,R2]! ;將 器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存R0R1+R2R1STRR0,[R1],#8 ;將R0中的字?jǐn)?shù)據(jù)寫入以R1為地址的 器中,R1+8R1STRR0,[R1,#8] ;將R0中的字?jǐn)?shù)據(jù)寫入以R1+8為地址的 器中2.4.2數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽操作一般用于特定的數(shù)據(jù)分配單元的初始化。常見的數(shù)據(jù)定義偽操作有如下幾種:①DCB/W/D用于分配一片連續(xù)字節(jié)單元并用指定的數(shù)據(jù)初始化,其中BbyteW(wordD(doubleARM個字節(jié)。MAP用于定義一個結(jié)構(gòu)化的內(nèi)存表首地址,與FIELD配合使用。FIELD②③例:2.4.3宏定義偽指令義的結(jié)束。用MACRO和MEND定義的一段代碼,稱為宏定義體,這樣在2.4.2數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽操作一般用于特定的數(shù)據(jù)分配單元的初始化。常見的數(shù)據(jù)定義偽操作有如下幾種:①DCB/W/D用于分配一片連續(xù)字節(jié)單元并用指定的數(shù)據(jù)初始化,其中BbyteW(wordD(doubleARM個字節(jié)。MAP用于定義一個結(jié)構(gòu)化的內(nèi)存表首地址,與FIELD配合使用。FIELD②③例:2.4.3宏定義偽指令義的結(jié)束。用MACRO和MEND定義的一段代碼,稱為宏定義體,這樣在就MEXIT例:宏定義。2.4.4其他常見的偽指令①②③AREAALIGN用于定義一個代碼段或數(shù)據(jù)段通過添加填充字節(jié)的方式,使當(dāng)前位置滿足一定的對齊方式CODE16/32 16Thumb32ARM④ENTRY指定匯編程序的,一個源文件中最多只有一個ENTRY,一個ENTRY。⑤⑥ENDEQU通知編譯器已經(jīng)到了源程序的結(jié)尾,每個源程序包含一個END為17MACROCSI_SETB CSI_SETB,無參數(shù)LDR R0, =rPDATG ; GPG0LDR R1,[R0] GPG0R1ORR R1, R1,#0x01 R101,STR R1,[R0] ;輸出 MENDStr DCB“Webee210”;分配一片連續(xù)的字節(jié) 單元并初始化為“Webee210DataDCW 1,2,3,4 分配一片連續(xù)的半字 單元并初始化為相應(yīng)值。MAP0x2000 ;定義結(jié)構(gòu)化內(nèi)存表首地址的值為0x2000FIELD16 ;定義A160x2000FIELD32 ;定義B320x2010SFIELD128 ;定義S1280x2030于C語言中的#define。一個全局標(biāo)號,該標(biāo)號可在其他文件中⑦⑧⑨EXPOR 用于在。IMPORT 用于通知編譯器要使用一個在其他源文件中定義的標(biāo)號。INCLUDE用于將一個源文件包含到當(dāng)前的源文件中。2.5本章小結(jié)本章主要講解了ARMARMARMARM于C語言中的#define。一個全局標(biāo)號,該標(biāo)號可在其他文件中⑦⑧⑨EXPOR 用于在。IMPORT 用于通知編譯器要使用一個在其他源文件中定義的標(biāo)號。INCLUDE用于將一個源文件包含到當(dāng)前的源文件中。2.5本章小結(jié)本章主要講解了ARMARMARMARMARM^_^ARM語言不僅僅有以上的指令,但如果能熟悉掌握本章的指令,那么閱讀ARMARMCstart.S內(nèi)核的head.S等文件,讀者要能結(jié)合本章知識點去閱讀這些文件,難度肯定會降低很多。18第3章詳解S5PV210啟動過程3.13.1S5PV2100~4G圖第3章詳解S5PV210啟動過程3.13.1S5PV2100~4G圖3.2地址空間19由上面二個圖可知,S5PV210含有一個大小為64KB的IROM,起始地址為由上面二個圖可知,S5PV210含有一個大小為64KB的IROM,起始地址為0xD0037FFF;0x20000000,有二個內(nèi)存塊,DRAM0DRAM1512MB、1024MB。3.23.3S5PV21020OM[5:0]=001100BSDBOOT;OM[5:0]=000010B時,啟動方式為NAND2KB 8bitECC。3.33①②S5PV210上電復(fù)位后將從IROM處執(zhí)行已的啟動代碼 BL0在BL0里初始化過對啟動進行,并從啟動BL1(最大16KB)到OM[5:0]=001100BSDBOOT;OM[5:0]=000010B時,啟動方式為NAND2KB 8bitECC。3.33①②S5PV210上電復(fù)位后將從IROM處執(zhí)行已的啟動代碼 BL0在BL0里初始化過對啟動進行,并從啟動BL1(最大16KB)到IRAM處,即剛才所說的0xD0020000開始的地址,其中0xD0020000~0xD002001016BL1BL1BL1進行校驗,校驗通過轉(zhuǎn)入BL1進行執(zhí)行,BL1繼續(xù)初始化,并拷貝BL2(最大80KB)IRAMBL2。③BL2DRAMOS貝到DRAM中,并跳到OS中執(zhí)行并完成啟動引導(dǎo)。3.4啟動過程示意圖代碼主要完成以下初始化:關(guān)閉看門狗;初始化icache;初始化棧;初始化堆;BL0①②③④⑤⑥⑦初始化塊拷貝功能;設(shè)置系統(tǒng)時鐘;BL1iRAM;21⑧BL1(安全啟動模式0xD0020000(IRAM)處執(zhí)行。0xD0020000~0xD00200101616在《S5PV210_iROM_ApplicationNote_Preliminary_2009112616校驗和的計算⑧BL1(安全啟動模式0xD0020000(IRAM)處執(zhí)行。0xD0020000~0xD00200101616在《S5PV210_iROM_ApplicationNote_Preliminary_2009112616校驗和的計算:countdataLengthbufferCheckSum::::是一個循環(huán)索引變量BL1的大小,以字節(jié)為BL1如何生成16byte的頭部信息?在從啟動(如:NANDFLASHSD)BL116KIRAM16K16byteBL1的個數(shù),然后與校驗和進行比較,如果二者相等則繼續(xù)運行程序,否則,不執(zhí)行。22for(count=0;count<dataLength;count++){buffer=(*(volatileu8*))(uBLAddr+count);CheckSum=CheckSum+buffer;}地址內(nèi)容0xD002_0000BL10xD002_000400xD002_0008CheckSum0xD002_000C03.5S5PV2103.4本章小結(jié)本章主要分析了S5PV210的啟動流程過程,理順了啟動過程后,對以后的學(xué)3.5S5PV2103.4本章小結(jié)本章主要分析了S5PV210的啟動流程過程,理順了啟動過程后,對以后的學(xué)更加清楚的認(rèn)識它的啟動過程,請參考三星公司的《S5PV210_iROM_ApplicationNote_Preliminary_20091126》手冊。前面三章稍微有點枯燥,有木有^_^。是不是迫不及待的想接觸代碼,接觸實際硬件電路,想點亮屬于LED??23第4章S5PV210GPIO4.1GPIO4.1.1GPIO硬件簡介I/OPorts)I/OGPIOS5PV210第4章S5PV210GPIO4.1GPIO4.1.1GPIO硬件簡介I/OPorts)I/OGPIOS5PV210有237個多功能I/O端口,可以通過設(shè)置寄存器來確定某個引腳用于輸入、輸出或者用于其他特殊功能。4.1.2GPIOS5PV210GPIOGPxCON,GPIO(輸入/輸出/其他功能GPxDAT,GPxUP,用于確定是否使用內(nèi)部上拉電阻。4.1.3LED原理圖設(shè)計LED原理圖分別在210底板和 板上,如下:4.1LED4.24LEDGPIO由以上兩個圖可知,LED1~LED4GPIOGPJ2_0~GPJ2_3,如果要GPJ2DAT[0]為輸出低電平,LED1^_^。244.2匯編點亮LED4.2.1實驗前言LED。4.2.2實驗講解源程序在\210_code\1.led_S\3個文件,start.SMakefile、mktools.c。start.S簡單,里面有詳細的注釋,這里不再句句啰嗦,詳細請查看源代碼。4.2匯編點亮LED4.2.1實驗前言LED。4.2.2實驗講解源程序在\210_code\1.led_S\3個文件,start.SMakefile、mktools.c。start.S簡單,里面有詳細的注釋,這里不再句句啰嗦,詳細請查看源代碼。1.在《S5PV210_UM_REV1.1》搜索GPJ2CON發(fā)現(xiàn),GPJ2CON寄存器的地址為0xE020_0280,GPJ2DAT0xE020_0284。2.0x10001B,GPJ2_0GPJ2CON[0]。3.由LEDLED1GPJ2DAT[0]0,LED1。Makefile1.Linuxmake(makeLinux虛擬機已安裝了arm-linu叉編譯工具,具體的安裝請閱讀《A8開發(fā)平臺使用,編譯一下源文件,先看看編譯器做了哪些動作。2.簡單分析編譯過程(1)arm-linux-gccstart.Sstart.o-cMakefile1.Linuxmake(makeLinux虛擬機已安裝了arm-linu叉編譯工具,具體的安裝請閱讀《A8開發(fā)平臺使用,編譯一下源文件,先看看編譯器做了哪些動作。2.簡單分析編譯過程(1)arm-linux-gccstart.Sstart.o-c編譯不,-o跟隨輸出文件名。(2)arm-linux-ldstart.o0表示程序運行的地址是0,其實程序可以在任何一個地址運行,因源代碼是位ELF制文件。arm-linux-objdump將ELF文件反匯編,主要用于編譯出錯時,對調(diào)試很有幫助,-DSDu-bootu-boot行來燒寫,則可忽略這二句。(6)想知道arm-linux編譯工具,所帶參數(shù)是什么意思,例如想查看令行執(zhí)行arm-linux-gcc--help26知道Makefile的作用了,詳細的Makefile語法,可參考 幅,這里就不一一列舉啦^_^。mktools.c講解還記得第三章講S5PV210啟動流程嗎?是否還大概還記得0xD0020000~第3.3節(jié)講過的內(nèi)容啦,溫故而知新嘛,不要過就忘囖^_^。mktools.c文件的作用就是在由源bin文件(這里是led.bin)根據(jù)三星公16led.binnew_led.bin,如mktools.c中獲得的,詳細的代碼請查看源代碼,根據(jù)前面將的內(nèi)容結(jié)合里面的注釋,我有理由相信您可以看的懂^_^。在前期用SD卡燒寫 機程序到開發(fā)板上會起到作用,如果使用制作的u-boot菜單欄或者u-boot命令行來燒寫 文件了,知道Makefile的作用了,詳細的Makefile語法,可參考 幅,這里就不一一列舉啦^_^。mktools.c講解還記得第三章講S5PV210啟動流程嗎?是否還大概還記得0xD0020000~第3.3節(jié)講過的內(nèi)容啦,溫故而知新嘛,不要過就忘囖^_^。mktools.c文件的作用就是在由源bin文件(這里是led.bin)根據(jù)三星公16led.binnew_led.bin,如mktools.c中獲得的,詳細的代碼請查看源代碼,根據(jù)前面將的內(nèi)容結(jié)合里面的注釋,我有理由相信您可以看的懂^_^。在前期用SD卡燒寫 機程序到開發(fā)板上會起到作用,如果使用制作的u-boot菜單欄或者u-boot命令行來燒寫 文件了,因為u-boot源代碼已經(jīng)完成了生成16byte頭部信息的功能。4.2.3 A8機實驗燒寫SDMakefileSD令:new_led.bin,輸出文件到/dev/sdb,linux是在/dev/SDLinuxseek=1燒寫到扇區(qū)1,Linux讀寫磁盤最小是一個扇區(qū)。注意:/dev/sdbSDLinux節(jié)點而設(shè)置的,如果您的節(jié)點為/dev/sdc則Makefile需要修改為/dev/sdc,SDPCLinuxls/dev/sd*命令查看到節(jié)點的情況燒寫步驟:1.2.3.SD到PC直接在Linux虛擬機命令行執(zhí)行make load即可完成SD卡燒寫如下是在紅帽虛擬機上執(zhí)行過程示意:27[root@localhost1.led_S]#ls/dev/sd*/dev/sda /dev/sda1 /dev/sda2/dev/sdbload:dd iflag=dsyncoflag=dsyncif=new_led.binof=/dev/sdbseek=1息led.bin使用u-boot菜單欄燒寫(SDBOOT啟動方式下)下面使用圖文并茂的方式來說明如何用u-boot(需要安裝好SecureCRT、DNW工具,以及使用u-boot菜單欄燒寫(SDBOOT啟動方式下)下面使用圖文并茂的方式來說明如何用u-boot(需要安裝好SecureCRT、DNW工具,以及USB驅(qū)動,具體安裝發(fā)平臺使用。步驟一:步驟二:28[root@localhost1.led_S]#makeloadddiflag=dsyncoflag=dsyncif=new_led.binof=/dev/sdbseek=132+0recordsin32+0recordsout16384bytes(16kB)copied,0.130677seconds,125kB/s步驟三:步驟四:29步驟三:步驟四:29步驟五:30步驟五:30使用u-boot命令行的tftp命令燒寫(SDBOOT啟動方式下)下面同樣使用圖文并茂的方式來說明如何使用tftp命令燒寫 機代碼到開發(fā)板(注意燒寫前Linux虛擬機需要安裝好tftp服務(wù)器具體安裝請查使用u-boot命令行的tftp命令燒寫(SDBOOT啟動方式下)下面同樣使用圖文并茂的方式來說明如何使用tftp命令燒寫 機代碼到開發(fā)板(注意燒寫前Linux虛擬機需要安裝好tftp服務(wù)器具體安裝請查《開發(fā)平臺使用)燒寫前需要做好的準(zhǔn)備的事項有:①②③④開發(fā)板連接上網(wǎng)線;xinetd restartserveripLinuxip將.bin文件放到Linux虛擬機的/tftpboot目錄下,如:/tftpboot/led.bin步驟一:步驟二:31ip令示例:步驟三、四:32ip令示例:步驟三、四:32LinuxIP*/setenvipaddr32setenvserverip31save /*NAND,否則重新上電后不保存*/其他燒寫提示除了以上的三種 第二種的實現(xiàn)就是使用dnw命令,只不過用菜單欄的形式封裝了一下而已^_^,方便讀者,nfsxmodem一的選擇方式^_^。以后 機代碼燒寫,不再詳述。4.2.4 實驗現(xiàn)象板上的其他燒寫提示除了以上的三種 第二種的實現(xiàn)就是使用dnw命令,只不過用菜單欄的形式封裝了一下而已^_^,方便讀者,nfsxmodem一的選擇方式^_^。以后 機代碼燒寫,不再詳述。4.2.4 實驗現(xiàn)象板上的4盞同時被點亮。334.3用C4.3.1實驗前言這小節(jié),我們結(jié)合C4.3.2實驗講解源程序在\210_code\2.led_flow_water_c\4個文件,start.S、Makefile、mktools.cled.c4.3用C4.3.1實驗前言這小節(jié),我們結(jié)合C4.3.2實驗講解源程序在\210_code\2.led_flow_water_c\4個文件,start.S、Makefile、mktools.cled.cled.cMakefile、mktools.cstart.S簡單,里面有詳細的注釋,這里不再句句啰嗦,詳細請查看源代碼。這里需要注意一點,由匯編調(diào)用C語言之前需要先設(shè)置棧,ldrsp,=0xD0037D80。led.c這就是led.c的主函數(shù),很簡單,讀者可參考源代碼,這里就不啰嗦了。344.3.3 實驗現(xiàn)象板上的4盞輪流被點亮,這就是“神奇”的流水燈,就這么簡單,有木有^_^。4.4按鍵4.4.1實驗前言GPIOGPIO4.4.2實驗講解8:其4.3.3 實驗現(xiàn)象板上的4盞輪流被點亮,這就是“神奇”的流水燈,就這么簡單,有木有^_^。4.4按鍵4.4.1實驗前言GPIOGPIO4.4.2實驗講解8:其請參面章節(jié)。35圖4.3 3.polling_key目錄直觀圖main.cstart.S里的bl 圖4.3 3.polling_key目錄直觀圖main.cstart.S里的bl 的main函數(shù),main函數(shù)主要做了三件事:平。低電亮。key_check(pin)。具體代碼如下:36intmain(){key_init(); //按鍵初始化led_init(); while(1){if(key_check(1)) //K1還沒有被按下GPJ2DAT|=LED0_OFF; //LED0熄滅elseGPJ2DAT&=LED0_ON; //K1被按下,同時LED0點亮if(key_check(2)) //K2還沒有被按下GPJ2DAT|=LED1_OFF;elsekey.c1.KEYkey.c1.KEY37GPJ2DAT&=LED1_ON; //K2LED1if(key_check(3))GPJ2DAT|=LED2_OFF;elseGPJ2DAT&=LED2_ON;if(key_check(4))GPJ2DAT|=LED3_OFF;elseGPJ2DAT&=LED3_ON;if(key_check(5))GPJ2DAT|=LED0_OFF;elseGPJ2DAT&=LED0_ON&LED1_ON;if(key_check(6))GPJ2DAT|=LED1_OFF;elseGPJ2DAT&=LED2_ON&LED3_ON;if(key_check(7))GPJ2DAT|=LED2_OFF;elseled_flash(); if(key_check(8))GPJ2DAT|=LED3_OFF;elseled_flow_water(); //按下S8,執(zhí)行流水燈函數(shù)}return0;}4.4KEY8法和中斷法來使用的是法(后面會有中斷法的詳細GPIO的電平應(yīng)該是低電平,松開GPH3板上有指明。4.58KEYGPIO法另一種是中斷 法。直接法程序的實現(xiàn)簡單,但是效率很低~~~~(>_<)~~~~,CPU一直在,4.4KEY8法和中斷法來使用的是法(后面會有中斷法的詳細GPIO的電平應(yīng)該是低電平,松開GPH3板上有指明。4.58KEYGPIO法另一種是中斷 法。直接法程序的實現(xiàn)簡單,但是效率很低~~~~(>_<)~~~~,CPU一直在,小節(jié),我們先暫時用直接的來實現(xiàn)按鍵LED382key_init()函數(shù)GPH2_0_INTPUT/GPH2_1_INTPUT/GPH2_2_INTPUT/GPH2_3_INTPUT定義在key.h頭文件中實現(xiàn),代碼如下:#defineGPH2_0_INTPUT~(0xf<<(0*4))什么意思呢?我們來展開看看,01111b<<0,(b1111b,再取反后,0000b。2key_init()函數(shù)GPH2_0_INTPUT/GPH2_1_INTPUT/GPH2_2_INTPUT/GPH2_3_INTPUT定義在key.h頭文件中實現(xiàn),代碼如下:#defineGPH2_0_INTPUT~(0xf<<(0*4))什么意思呢?我們來展開看看,01111b<<0,(b1111b,再取反后,0000b。0000B時,GPH2_0引腳為輸入狀態(tài),正是上面分析的結(jié)果。GPH2CONkey.h0xE0200C40正是GPH2CON寄存器的地址,先對一個地址強制類型轉(zhuǎn)換為unsignedlong*volatile喲^_^。立刻變?yōu)榈碗娖剑孟裾f了很多次了哦~_~,這里說明一下,前面章節(jié)會講的比^_^。39#define GPH2CON (*(volatileunsignedlong*)0xE0200C40)#defineGPH2_0_INTPUT~(0xf<<(0*4))#defineGPH2_1_INTPUT~(0xf<<(1*4))#defineGPH2_2_INTPUT~(0xf<<(2*4))#defineGPH2_3_INTPUT~(0xf<<(3*4))3key_check該函數(shù)有一個形參,需要傳輸按鍵序號實參,如key_check(1)表示檢測S1這個按鍵,key_check(8)表示檢測S8這個按鍵等等。該函數(shù)最關(guān)鍵的語句是:(tempDat1&(1<<(pin-1)*1))||(tempDat2&(1<<(pin-5)*1)) 我們假設(shè)pin=1,則3key_check該函數(shù)有一個形參,需要傳輸按鍵序號實參,如key_check(1)表示檢測S1這個按鍵,key_check(8)表示檢測S8這個按鍵等等。該函數(shù)最關(guān)鍵的語句是:(tempDat1&(1<<(pin-1)*1))||(tempDat2&(1<<(pin-5)*1)) 我們假設(shè)pin=1,則tempDat1即GH2DAT&(1<<0),相當(dāng)于檢測GH2DAT01,11,0。如果讀者還不明白您說是吧?^_^,4.4.3實驗現(xiàn)象S1LED1S2LED2S3LED3S4時LED4S5LED1、LED2S6LED3、LED4S74盞LED同時閃爍,一會后自動滅,按下S8時出現(xiàn)“神奇”的流水燈現(xiàn)象^_^。因為不好拍照,這里就不上圖啦,你懂的。4.5蜂鳴器實例4.5.1實驗前言響與不響。蜂鳴器的4.5.2實驗講解源程序在\210_code\4.beep\目錄下,包含5個文件,:其中mktools.c,Makefile,start.S與前面的基本一致,這里不重復(fù)講解,請參考前面章節(jié)。40圖4.6 4.beep目錄直觀圖main.cstart.S里的圖4.6 4.beep目錄直觀圖main.cstart.S里的bl 的main函數(shù),main函數(shù)主要做了二件事:第一:初始化蜂鳴器,先關(guān)閉蜂鳴器第二:進入死循環(huán)后讓蜂鳴器不停的響然后關(guān)。beep.c1414.7蜂鳴器硬件原理圖4.8蜂鳴器對應(yīng)的GPIO2beep_init()函數(shù)其中#defineGPD0_0_OUT(1<<0)GPD0CON[34.7蜂鳴器硬件原理圖4.8蜂鳴器對應(yīng)的GPIO2beep_init()函數(shù)其中#defineGPD0_0_OUT(1<<0)GPD0CON[30]0x1,0001b,GPDO_03beep_start()函數(shù)(beep_stop()函數(shù)類似,不再重復(fù))其中#defineBEEP_START (1<<0),由下圖可知往GPD0CDAT[0]寫入0,則啟動蜂鳴器。42/**/voidbeep_start(){GPD0DAT|=BEEP_START; //開啟蜂鳴器}/**/voidbeep_init(){GPD0CON|=GPD0_0_OUT; //蜂鳴器引腳設(shè)置為輸出狀態(tài)}4.5.3實驗現(xiàn)象出嗶嗶嗶嗶家 想象一下哈。4.6本章小結(jié)本章主要結(jié)合硬件軟件兩方面詳細的了S5PV210的GPIO操作,對4.5.3實驗現(xiàn)象出嗶嗶嗶嗶家 想象一下哈。4.6本章小結(jié)本章主要結(jié)合硬件軟件兩方面詳細的了S5PV210的GPIO操作,對GPIO的操作是所有硬件操作基礎(chǔ),真的再基礎(chǔ)不過了。如果讀者能夠很好的掌喲^_^。43第5章S5PV2105.1S5PV210時鐘體系簡述一般來講,MCU的主時鐘來源主要是外部晶振或外部時鐘,比較常見的是外(PLL)21024MHzS5PV210(MSYS第5章S5PV2105.1S5PV210時鐘體系簡述一般來講,MCU的主時鐘來源主要是外部晶振或外部時鐘,比較常見的是外(PLL)21024MHzS5PV210(MSYS(DSYS、以及外設(shè)相(PSYSMSYSCortexA8DRAMFIMDJPEG166MHz;PSYS主要用于IO外設(shè)用的,如:GPIO、I2C、WDT、UART133MHz,S5PV210等,最高可達到5.1S5PV21024MHzPLLS5PV2104PLLAPLL(MSYS、MPLL(DSYS系統(tǒng)時鐘。它們之間的5.2445.2S5PV210圖時鐘的倍數(shù)了。45freq(ARMCLK) =1000MHzfreq(HCLK_MSYS) =200MHzfreq(HCLK_IMEM) =100MHz5.2S5PV210圖時鐘的倍數(shù)了。45freq(ARMCLK) =1000MHzfreq(HCLK_MSYS) =200MHzfreq(HCLK_IMEM) =100MHzfreq(PCLK_MSYS) =100MHzfreq(HCLK_DSYS) =166MHzfreq(PCLK_DSYS) =83MHzfreq(HCLK_PSYS) =133MHzfreq(PCLK_PSYS) =66MHzfreq(SCLK_ONENAND) =133MHz,166MHz5.3時鐘發(fā)生器框圖~_~法下面再。5.2系統(tǒng)時鐘實例5.2.1實驗前言5.3時鐘發(fā)生器框圖~_~法下面再。5.2系統(tǒng)時鐘實例5.2.1實驗前言的速度比較。5.2.2實驗講解8:其中46mktools.c,Makefile,start.S,led.c與前面的基本一致,這里不重復(fù)講解,請參面章節(jié)。圖5.4 5.sys_clock目錄直觀圖main.cstart.S里的mktools.c,Makefile,start.S,led.c與前面的基本一致,這里不重復(fù)講解,請參面章節(jié)。圖5.4 5.sys_clock目錄直觀圖main.cstart.S里的bl 的main函數(shù),main函數(shù)主要做了三件事:LED,LED配置系統(tǒng)時鐘(這是我們本節(jié)的重點。第三:調(diào)用流水燈死循環(huán)程序。main()函數(shù)代碼如下:47intmain(){led_init(); LED,LED#ifndefCLOCK_INITsys_clock_init(); #endif//CLOK_INITled_flow_water();return0;}clock.cS5PV210這是我們本節(jié)內(nèi)容的重中之重。1.系統(tǒng)時鐘配置的一般步驟①②③④(PLL)的鎖定時間PLL選擇時鐘源配置MDIV、PDIV、SDIVclock.cS5PV210這是我們本節(jié)內(nèi)容的重中之重。1.系統(tǒng)時鐘配置的一般步驟①②③④(PLL)的鎖定時間PLL選擇時鐘源配置MDIV、PDIV、SDIV的分頻系數(shù)2.S5PV2102.1APLL參數(shù)的推薦值:5.5APLLFin=24MHz,PDIV=3,MDIV=125=0x7D,具體運算請參考代碼,這里不再詳述。2.2MPLL5.6MPLL由圖可知,當(dāng)輸入頻率Fin=24MHz,PDIV=12,MDIV=667=0x29B,F(xiàn)OUT667MHz,具體運算請參考代碼,這里不再詳述。483.S5PV210①、MPLL_LOCK寄存器,為什么需要配置鎖定3.S5PV210①、MPLL_LOCK寄存器,為什么需要配置鎖定PLL出的頻率還不穩(wěn)定。、MPLL_CON寄存器。CLK_SRC0寄存器。時鐘分頻系需要配置CLK_DIV0寄存器。②③④CLK_DIV0寄存器的配置,其他寄存器的配置請參考代碼,代CLK_DIV0結(jié)果。圖5.7CLK_DIV049/*設(shè)置系統(tǒng)時鐘分頻系數(shù)PCLK_PSYS_RATIO=0x1HCLK_PSYS_RATIO=0x4PCLK_DSYS_RATIO=0x1 /|\HCLK_DSYS_RATIO=0x3 |PCLK_MSYS_RATIO=0x1 |HCLK_MSYS_RATIO=0x4 |A2M_RATIO =0x4APLL_RATIO=0x0 低位*/=(0x1<<28)|(0x4<<24)|(0x1<<20)|(0x3<<16)|(0x1<<12)|(0x4<<8)|(0x4<<4)|(0<<0);從低位開始分析:MOUT_MSYS=FOUTapll=1000MHz而ARMCLK根據(jù)經(jīng)典值為1000,所以APLL_RATIO=0;從低位開始分析:MOUT_MSYS=FOUTapll=1000MHz而ARMCLK根據(jù)經(jīng)典值為1000,所以APLL_RATIO=0;200MHzSCLKAPLL1000,A2M_RATIO4;HCLK_MSYS=200MHz,ARMCLK=1000,HCLK_MSYS_RATIO=4;①②③④MOUT_DSYSCLKmpllFOUTmpll667MHzHCLK_DSYS166MHz所以,HCLK_DSY_RATIO3;PCLK_DSYS166MHz,HCLK_DSYS=83MHz,故PCLK_DSYS_RATIO=1;=667MHz,HCLK_PSYS=133,HCLK_PSYS_RATIO=4;PCLK_PSYS66MHz,HCLK_PSYS=133MHz,故PCLK_PSYS_RATIO=1;代碼分析⑤⑥⑦4.50/*sys_clock_init()函數(shù)的總體設(shè)置時鐘情況如下:ARMCLK=1000MHz,HCLKM=200MHz,HCLKD=166.75MHzHCLKP=133.44MHz,PCLKM=100MHz,PCLKD=83.375MHz,PCLKP=66.7MHz*/voidsys_clock_init(){/*FinPLL*/APLL_LOCK=0xFFFF;MPLL_LOCK=0xFFFF;/*使能APLL 器,使能鎖標(biāo)志位,MDIV=0x7d,PDIV=0x3,SDIV=0x1FOUTapll=MDIV*FIN/(PDIV*2^(SDIV-1))* =0x7d*24/(0x3*2^(0x1-1))* =125*24/(3*2)=1000MHz*/APLL_CON0=(1<<31)|(1<<29)|(0x7d<<16)|(0x3<<8)|(0x1<<0);/*使能MPLL 器,使能鎖標(biāo)志位,MDIV=0x29b,PDIV=0xc,SDIV=0x1FOUTmpll=MDIV*FIN/(PDIV*2^SDIV)* =0x29b*24/(0xc*2^1)* =667*24/(12*2)=667MHz*/MPLL_CON=(1<<31)|(1<<29)|(0x29b<<16)|(0xc<<8)|(0x1<<0);5.2.3實驗測試main.c//#defineCLOCK_INIT流水燈的速度是比較快的。三種燒寫當(dāng)去掉main.c文件里//#defineCLOCK_INIT的注釋時,即沒有配置系統(tǒng)時燒寫u-bootu-boot算您去掉注釋,效果還是會跟第一個測試一樣。當(dāng)5.2.3實驗測試main.c//#defineCLOCK_INIT流水燈的速度是比較快的。三種燒寫當(dāng)去掉main.c文件里//#defineCLOCK_INIT的注釋時,即沒有配置系統(tǒng)時燒寫u-bootu-boot算您去掉注釋,效果還是會跟第一個測試一樣。當(dāng)SD沒有燒寫u-boot時,去掉注釋后,會發(fā)現(xiàn)流水燈的速度比上一次測試慢的明顯,本實驗就了。5.2.4實驗現(xiàn)象u-boot速度慢的明顯。水燈的51/*時鐘源的設(shè)置ONENAND_SEL =HCLK_DSYSMUX_PSYS_SEL=SCLKMPLLMUX_DSYS_SEL=SCLKMPLL /|\MUX_MSYS_SEL=SCLKAPLL |VPLL_SEL =FOUTVPLL |EPLL_SEL =FOUTEPLL |MPLL_SEL =FOUTMPLLAPLL_SEL =FOUTAPLL 低位*/CLK_SRC0=(1<<28)|(1<<12)|(1<<8)|(1<<4)|(1<<0);/*設(shè)置系統(tǒng)時鐘分頻系數(shù)PCLK_PSYS_RATIO=0x1HCLK_PSYS_RATIO=0x4PCLK_DSYS_RATIO=0x1 /|\HCLK_DSYS_RATIO=0x3 |PCLK_MSYS_RATIO=0x1 |HCLK_MSYS_RATIO=0x4 |A2M_RATIO =0x4APLL_RATIO=0x0 低位*/CLK_DIV0=(0x1<<28)|(0x4<<24)|(0x1<<20)|(0x3<<16)|(0x1<<12)|(0x4<<8)|(0x4<<4)|(0<<0);}5.3本章小結(jié)本章主要講了S5PV210的系統(tǒng)時鐘體系,對系統(tǒng)時鐘做了詳細的相當(dāng)重要的地位,例如串口、定時器等等模塊都需要事先掌握系統(tǒng)時鐘的設(shè)置,可以毫不夸張的說,沒時鐘,A8什么事也做不了,就成一個強化型51單片機而已,有了系統(tǒng)時鐘,A8能做的事情就可多啦。因此,對于開發(fā)來說,對時鐘的學(xué)習(xí)是很有必要滴^_^。第6章S5PV2106.1串口通信原理之間傳輸數(shù)據(jù)距離較遠時,數(shù)據(jù) 口按位(bit)和接收字節(jié)。串行硬件接口簡單,只需要3根線:一是,二是,三是接收,如圖6.1所示。由于串口通信大多是異步通信的,所以可以在一根線上數(shù)據(jù)同時偶校驗位。5.3本章小結(jié)本章主要講了S5PV210的系統(tǒng)時鐘體系,對系統(tǒng)時鐘做了詳細的相當(dāng)重要的地位,例如串口、定時器等等模塊都需要事先掌握系統(tǒng)時鐘的設(shè)置,可以毫不夸張的說,沒時鐘,A8什么事也做不了,就成一個強化型51單片機而已,有了系統(tǒng)時鐘,A8能做的事情就可多啦。因此,對于開發(fā)來說,對時鐘的學(xué)習(xí)是很有必要滴^_^。第6章S5PV2106.1串口通信原理之間傳輸數(shù)據(jù)距離較遠時,數(shù)據(jù) 口按位(bit)和接收字節(jié)。串行硬件接口簡單,只需要3根線:一是,二是,三是接收,如圖6.1所示。由于串口通信大多是異步通信的,所以可以在一根線上數(shù)據(jù)同時偶校驗位。用0TTL/CMOSRS2321(-3~12V0(3~12V526.1UARTUART6.2.1S5PV210UARTS5PV2104UARTCPUUART器可以通過發(fā)出中斷或DMA26.1UARTUART6.2.1S5PV210UARTS5PV2104UARTCPUUART器可以通過發(fā)出中斷或DMA2FIFO(緩存區(qū)一種是FIFOFIFO0FIFO256bytes,1FIFO64bytes,23FIFO16bytes。CPUFIFOUARTFIFO的數(shù)據(jù)TxDn“receiveshifter”RxDn位一位接收進來,然后FIFOCPU數(shù)據(jù)。UART單元、中同樣器和。器中包含一個移位器和一個FIFO寄存器,包含一個移位器和一個接收FIFO寄存器。UART結(jié)構(gòu)圖如圖6.2所示:536.2S5PV210UART6.2Clock6.2S5PV210UART6.2Clock頻率有輸入可以是PCLK,也可以是SCLK_UART,我們大多數(shù)選擇PCLK作為波特率發(fā)生器的時鐘源輸入。6.3UART546.2.2S5PV210UART與接收操作數(shù)據(jù)操作數(shù)據(jù)幀的格式是可編程的,它包含一個起始位,5~8(bit)數(shù)據(jù)位,一位可選擇的奇偶校驗位和一位或兩位停止位。這些可以通過線性器器也能夠產(chǎn)生中止條件迫使串口輸出保持在邏輯0狀態(tài),這種狀態(tài)保持一個傳輸幀的時間長度。通常在一幀傳輸數(shù)據(jù)完整地0的狀態(tài)將中止信號之后,F(xiàn)IFOTx器中)數(shù)據(jù)接收操作與數(shù)據(jù)5~8(bit)數(shù)據(jù)位,一位可選擇的奇偶校驗位和一位或兩位停止位。這些可以通過線性幀錯誤和中止?fàn)顩r,每種情況下都將會產(chǎn)生一個錯誤標(biāo)志置位。.2S5PV210UART與接收操作數(shù)據(jù)操作數(shù)據(jù)幀的格式是可編程的,它包含一個起始位,5~8(bit)數(shù)據(jù)位,一位可選擇的奇偶校驗位和一位或兩位停止位。這些可以通過線性器器也能夠產(chǎn)生中止條件迫使串口輸出保持在邏輯0狀態(tài),這種狀態(tài)保持一個傳輸幀的時間長度。通常在一幀傳輸數(shù)據(jù)完整地0的狀態(tài)將中止信號之后,F(xiàn)IFOTx器中)數(shù)據(jù)接收操作與數(shù)據(jù)5~8(bit)數(shù)據(jù)位,一位可選擇的奇偶校驗位和一位或兩位停止位。這些可以通過線性幀錯誤和中止?fàn)顩r,每種情況下都將會產(chǎn)生一個錯誤標(biāo)志置位。6.2.3UART波特率的計算波特率計算公式(1:波特率計算公式(2DIV_VAL=(SCLK_UART/(bps*16))–1; PCLK(1。例:波特率=115200bps,PCLK=40MHz。55DIV_VAL=(40000000/(115200*16))-1=21.7–1=20UBRDIVn=20 DIV_VAL則(numberof1’sinUDIVSLOTn)/16 =21.7–20=0.7(numberof1’sinUDIVSLOTn)=0.7*16=11.2=11UDIVSLOTn11個1,16’b1110_1110_1110_101016’b1110_1110_1110_0101+(UDIVSLOTn116;DIV_VAL=(PCLK/(bps*16))-1;6.2.4UART操作的一般步驟①②③④設(shè)置所涉及引腳為UART功能設(shè)置波特率、傳輸格式(如:數(shù)據(jù)位、停止位、校驗位、流控)UART通道的工作模式(/中斷/DMA模式)等待/接收數(shù)據(jù)的完成。UART6.3.1實驗前言這小節(jié),我們結(jié)合210開發(fā)板與PC機通過串行通信方式來驗證UART的內(nèi)容2106.2.4UART操作的一般步驟①②③④設(shè)置所涉及引腳為UART功能設(shè)置波特率、傳輸格式(如:數(shù)據(jù)位、停止位、校驗位、流控)UART通道的工作模式(/中斷/DMA模式)等待/接收數(shù)據(jù)的完成。UART6.3.1實驗前言這小節(jié),我們結(jié)合210開發(fā)板與PC機通過串行通信方式來驗證UART的內(nèi)容210機之前的通信。6.3.2實驗講解UART硬件原理圖6.4UART0/36.5UART0GPIO實驗?zāi)夸浉攀鲈闯绦蛟赲210_code\6.uart\目錄下,包含10個文件,:其中mktools.c,Makefile,start.S,led.c,clock.c與前面的基本一致,這里不重56復(fù)講解,請參面章節(jié)。圖6.6 6.uartmain.cstart.Sbl數(shù)主要做了四件事:mainmain.c復(fù)講解,請參面章節(jié)。圖6.6 6.uartmain.cstart.Sbl數(shù)主要做了四件事:mainmain.cmain,main第二:配置系統(tǒng)時鐘。第三:UART(這是我們本節(jié)的重點。。main()函數(shù)代碼如下:57intmain(){unsignedcharc;led_init(); //LEDsys_clock_init(); //系統(tǒng)時鐘初始化uart_init(); //串口初始化while(1){c=uart0_getbyte(); //等待鍵盤輸入uart0_sendbyte(c-32); A~Zif((c=='F')||(c=='f'))Ffuart.cuart.cuart_init(),uart0_sendbyte(unsignedchar,uart0_getbyte()。1.uart_init()函數(shù)講解主要做了以下幾件事:uart.cuart.cuart_init(),uart0_sendbyte(unsignedchar,uart0_getbyte()。1.uart_init()函數(shù)講解主要做了以下幾件事:UART0GPIO第二:設(shè)置數(shù)據(jù)幀格式。/接收功能。第三:選擇時鐘輸入源,設(shè)置 接收模式。第四:FIFO第五:無流控。代碼如下:58voiduart_init(){/*配置引腳GPA0CON[1]=UART_0_TXDGPA0CON[0]=UART_0_RXD*/GPA0CON=(0x2<<4)|(0x2<<0);/*設(shè)置UART0的數(shù)據(jù)格式為:8個數(shù)據(jù)位,一個停止位,無奇偶校驗*/ULCON0=(0<<3)|(0<<2)|(0x3<<0);/*UART0PCLK_PSYS=66.7MHz,由時鐘分頻器產(chǎn)生、接收均采用 方式*/UCON0=(0<<10)|(0x1<<2)|(0x1<<0);/* UART0 FIFO這里如果使能的話實驗效果差別相當(dāng)大,UFCON0=(1<<0);{led_flash();}}return0;}2.uart0_sendbyte(unsignedchar)函數(shù)講解3.uart0_getbyte()函數(shù)講解59unsignedcharuart0_getbyte()2.uart0_sendbyte(unsignedchar)函數(shù)講解3.uart0_getbyte()函數(shù)講解59unsignedcharuart0_getbyte(){/*直到 不為空,為空時一直等待*/while(!(UTRSTAT0&(1<<0)));/*直接 URXH0寄存器,即可獲得接收到的數(shù)據(jù)*/returnURXH0;}voiduart0_sendbyte(unsignedcharc){/*直到 為空,不為空時一直等待*/while(!(UTRSTAT0&(1<<2)));/*向UTXH0寄存器中寫入數(shù)據(jù),UART會自動將它 */UTXH0=c;}思考為什么效果會這樣?*/UFCON0=(0<<0);/*無流控*/UMCON0(04);/**波特率=115200bps分頻系數(shù)=(PCLK_PSYS/(Baud*16))-1;UBRDIVn(UDIVSLOTn116;Forexample:PCLKP=66.7MHz115200* 分頻系數(shù)=(66700000/(115200*16))-1=35.2;所以:UBRDIVn寄存器的值=35;UDIVSLOTn12,S5PV210p880UDIVSLOTn=0x808;*/UBRDIV0=0x23;UDIVSLOT0=0x808;}6.3.3實驗現(xiàn)象A~Z。2:當(dāng)按下Ff4LED圖6.3.3實驗現(xiàn)象A~Z。2:當(dāng)按下Ff4LED圖6.7 UART實例實驗現(xiàn)象6.4本章小結(jié)本章主要講解了了串口通信原理UART與PC結(jié)合UART串行接口是我們了如何在發(fā)來說就相當(dāng)于人沒了眼睛,很多事情做起來都很不方便,特別是調(diào)試的時候,串口起了相當(dāng)大的作用。因此,希望讀者能夠熟悉掌握串口通信的^_^。60第7章S5PV210中斷體系結(jié)構(gòu)與應(yīng)用7.1中斷的概念4.4按鍵LED按鍵有沒有幾乎全部占用了CPU的使用權(quán),CPU您應(yīng)該去處理按鍵事情啦,效率一下子變高了很多,有木有^_^。所謂的中斷是指CPU在執(zhí)行程序的過,遇到異常情況需要處理,CPU止當(dāng)前程序的運行,保存當(dāng)前程序運行處的必要參數(shù),轉(zhuǎn)去處理這些異常情況,7.17.1中斷處理過程示意圖7.1.1第7章S5PV210中斷體系結(jié)構(gòu)與應(yīng)用7.1中斷的概念4.4按鍵LED按鍵有沒有幾乎全部占用了CPU的使用權(quán),CPU您應(yīng)該去處理按鍵事情啦,效率一下子變高了很多,有木有^_^。所謂的中斷是指CPU在執(zhí)行程序的過,遇到異常情況需要處理,CPU止當(dāng)前程序的運行,保存當(dāng)前程序運行處的必要參數(shù),轉(zhuǎn)去處理這些異常情況,7.17.1中斷處理過程示意圖7.1.1S5PV210S5PV210中斷 器由4個中斷向量VIC(VectoredInterruptController,ARMPrimeCellPL192TrustZoneInterruptSP890S5PV21093中斷向量器(VIC)有以下5個主要特點:①②③④⑤93IRQ固定的硬件中斷優(yōu)先級IRQFIQ產(chǎn)生軟件中斷中斷向量3(VIC3)52(VIC2)296131VIC07.27.2S5PV210VIC07.231VIC07.27.2S5PV210VIC07.2S5PV210按鍵中斷實例7.2.1實驗前言這小節(jié),我們通過按鍵中斷LED的,效率有什么不一樣。627.2.2實驗講解源程序在\210_code\7.key_led_interrupt12復(fù)講解,請參面章節(jié)。7.37.key_led_interruptMakefile講解7.2.2實驗講解源程序在\210_code\7.key_led_interrupt12復(fù)講解,請參面章節(jié)。7.37.key_led_interruptMakefile講解MakefileMakefilebug。>_<Makefile7有變化:arm-linux-ld-Ttext0x20000000-oint.elf$^ 這么一個地址,稍后再分析。start.S講解start.S主要做了三件事:CPUSVCIRQ第二:調(diào)用main函數(shù),等待按鍵中斷發(fā)生。63ldrsp,=0x40000000 @設(shè)置棧,以便調(diào)用cmovr0,#0x53 0)msrCPSR_cxsf,r0第三:如果發(fā)生中斷,則會跳到IRQ_handle標(biāo)號去繼續(xù)執(zhí)行,如果沒有中斷發(fā)生,IRQ_handle標(biāo)號后的語句一直被得到執(zhí)行。函數(shù)里繼續(xù)調(diào)用真正的中斷處理函數(shù)。main.c講解第三:如果發(fā)生中斷,則會跳到IRQ_handle標(biāo)號去繼續(xù)執(zhí)行,如果沒有中斷發(fā)生,IRQ_handle標(biāo)號后的語句一直被得到執(zhí)行。函數(shù)里繼續(xù)調(diào)用真正的中斷處理函數(shù)。main.c講解第一:先完成一系列的初始化:面章ext_int_init()irq.c(萬事俱備,只欠東風(fēng)。^_^)第16行,設(shè)置中斷跳轉(zhuǎn)地址,pExceptionIRQ在irq.h文件里定義:0xD0037400IRQ址是0xD0037400+0x18。pExceptionIRQ=(unsignedlong)IRQ_handle;就是64#define _Exception_Vector0xD0037400#define pExceptionIRQ (*((volatileunsignedlong*)(_Exception_Vector+0x18)))led_init();//LEDsys_clock_init();//時鐘初始化uart_init();//串口初始化print_info();//輸出Webee210interrupttest!!^_^led_key_init();LEDext_int_init();//初始化中斷IRQ_handle:ldrsp,=0xD0037F80sublr,lr,#4 返回地址stmfdsp!,{r0-r12,lr} @保存現(xiàn)場blirq_handler 到中斷處理函數(shù)ldmfdsp!,{r0-r12,pc}^ @恢復(fù)現(xiàn)場start.SIRQ_handleIRQ斷發(fā)生,這就是為什么發(fā)生中斷就會跳到IRQ_handle標(biāo)號的。18所有中斷,VIC0INTENCLEAR=0xffffffff;20start.SIRQ_handleIRQ斷發(fā)生,這就是為什么發(fā)生中斷就會跳到IRQ_handle標(biāo)號的。18所有中斷,VIC0INTENCLEAR=0xffffffff;2016IRQVIC0INTSELECT&=~(1<<16);第22行,清除需要處理的中斷的中斷處理函數(shù)的地址,VIC0ADDRESS=0;24~25162716,使能中斷。EXT_INT_2_MASK&=~(1<<0);65EXT_INT_2_CON&=~(7<<0); EXT_INT_2_CON|=1<<1;29使能中斷器,VIC
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025服務(wù)協(xié)議與勞動合同有何關(guān)聯(lián)
- 2025企業(yè)辦公租賃合同范本標(biāo)準(zhǔn)版
- 2025環(huán)保設(shè)備購銷合同
- 機構(gòu)合作框架協(xié)議書范本
- 2025煤炭買賣合同協(xié)議范本
- 設(shè)備買賣合同書范本
- 域名轉(zhuǎn)讓合同范本
- 2025年三方委托合同樣本:三方委托合同范本
- 冰球護具轉(zhuǎn)讓協(xié)議書
- 2025年03月湖南婁底市市直事業(yè)單位引進高層次和急需緊缺人才集中組考公開招聘21人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 2025年廣東廣州市高三一模英語試卷試題及答案
- 《智能家居系統(tǒng)》課件
- 齒輪加工英文版
- 永輝超市企業(yè)文化ppt課件
- 送達地址確認(rèn)書(法院最新版)
- 各種玻璃配方知識
- 詳細波士頓診斷性失語癥檢查
- 高溫熔融金屬安全知識(薛生蓮)
- 全國主體功能區(qū)規(guī)劃圖
- ISO22716化工原料檢驗標(biāo)準(zhǔn)
- 城道路配套燃氣管道工程設(shè)計說明
評論
0/150
提交評論