




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、目錄機(jī)開發(fā)篇6第一部分第 1 章S5PV210初識(shí) ARM6ARM 處理器的應(yīng)用領(lǐng)域6主流 ARM 處理器介紹8S5PV210 處理器介紹9A8 開發(fā)平臺(tái)介紹第 2 章2.42.5第 3 章3.4第 4 章第 5 章第 6 章6.4第 7 章第 8 章8.18.2S5PV210機(jī)開發(fā)軟件和驅(qū)動(dòng)的安裝11本章小結(jié)11ARM 匯編語(yǔ)言基礎(chǔ)12ARM 寄存器組介紹12ARM 尋址方式13ARM 指令集14ARM 偽指令16本章小結(jié)18詳
2、解 S5PV210 啟動(dòng)過程19S5PV210 內(nèi)存地址.19S5PV210 啟動(dòng)模式設(shè)置20S5PV210 啟動(dòng)流程分析21本章小結(jié)23S5PV210 GPIO 接口實(shí)驗(yàn)24GPIO 硬件接口介紹24匯編點(diǎn)亮 LED25用C 語(yǔ)言和匯編混合編程點(diǎn)亮流水燈34按鍵 蜂鳴器LED 實(shí)例35實(shí)例40本章小結(jié)43S5PV210 系統(tǒng)時(shí)鐘44S5PV210 時(shí)鐘體系簡(jiǎn)述44系統(tǒng)時(shí)鐘實(shí)例46本章小結(jié)52S5PV210 串口通信原理與應(yīng)用52串口通信原理52S5PV210 UART 的功能特性53S5PV210 UART 實(shí)例56本章小結(jié)60S5PV210 中斷體系結(jié)構(gòu)與應(yīng)用61中斷的概念61S5PV21
3、0 按鍵中斷實(shí)例62本章小結(jié)70S5PV210 定時(shí)器原理與應(yīng)用71PWM 定時(shí)器的概述71PWM 定時(shí)器實(shí)例7328.3第 9 章9.4第 10 章10.4第 11 章11.5第 12 章12.4第 13 章13.4本章小結(jié)82S5PV210NAND FLASH器83FLASH 概述83S5PV210 的 NAND FLASH器90NAND FLASH 的操作實(shí)例95本章小結(jié)107S5PV210I2C 接口與應(yīng)用108初識(shí) I2C 總線108S5PV210 I2C 總線接口110
4、I2C 實(shí)例(讀寫 AT24C02)112本章小結(jié)122S5PV210LCD器原理與應(yīng)用122LCD 簡(jiǎn)介122S5PV210 LCD器123LCD 顯示實(shí)例130本章小結(jié)138S5PV210ADC 接口與應(yīng)用139ADC 接口概述139ADC 轉(zhuǎn)換操作140ADC 實(shí)例141本章小結(jié)147S5PV210I2S 接口與應(yīng)用148初識(shí) I2S 總線148I2S 總線數(shù)據(jù)傳輸148I2S 實(shí)例(wm8960 音頻實(shí)例)149本章小結(jié)162第二部分第 1 章Bootloader 移植篇163初識(shí) Bootloader1631.11.2第 2 章2.12.2第 3 章3.43.5第
5、4 章4.4初識(shí) Bootloader163常見的 Bootloader164Bootloader 啟動(dòng)流程分析165Bootloader 啟動(dòng)的兩個(gè)階段165Bootloader 的內(nèi)核調(diào)用166U-BOOT 移植準(zhǔn)備工作168U-BOOT 簡(jiǎn)介168U-BOOT 的架構(gòu)概述168U-BOOT 啟動(dòng)流程的源代碼分析170U-BOOT 編譯初體驗(yàn)191U-BOOT 使用195十二步教你學(xué)會(huì)移植U-BOOT211第 1 步,設(shè)置開發(fā)板的信息211第 2 步,拷貝相關(guān)開發(fā)板目錄211第 3 步,修改相關(guān)文件212第 4 步,修改編譯文件214
6、04.114.12第 5 章第 5 步,修改打印信息214第 6 步,修改內(nèi)存信息215第 7 步,支持 DM9000 網(wǎng)卡216第 8 步,支持 Nand Flash220第 9 步,支持 Nand Flash 啟動(dòng)223第 10 步,支持 yaffs2 燒寫226第 11 步, U-Boot 命令移植235第 12 步, 菜單欄的移植241Bootloader 移植篇小小小結(jié)245第三部分第 1 章第 2 章第 3 章Linux 內(nèi)核移植篇246Linux 由來與版本246內(nèi)核編譯初體驗(yàn)247Linux 內(nèi)核結(jié)構(gòu)250第 4 章第 5
7、章內(nèi)核的子系統(tǒng)251內(nèi)核目錄252管理. 253六大步教你學(xué)會(huì)移植 Linux 內(nèi)核263第一步,源代碼獲取263第二步,修改內(nèi)核265第三步,配置內(nèi)核273第四步,檢查串口284第五步,拷貝 uImage 制作工具(mkimage)285第六步,編譯及出錯(cuò)處理286Linux 內(nèi)核移植篇小小小結(jié)295第四部分第 1 章構(gòu)建 Linux 根文件系統(tǒng)篇296Linux 文件系統(tǒng)簡(jiǎn)介291.4第 2 章2.4第 3 章3.4第 4 章文件系統(tǒng)與根文件系統(tǒng)296文件系統(tǒng)的類型297Linux 根文件系統(tǒng)目錄結(jié)構(gòu)297Linux
8、 文件屬性298移植 BusyBox300BusyBox 的簡(jiǎn)介300獲取 BusyBox 源碼301四部曲移植 BusyBox302命令就是可執(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 簡(jiǎn)介318NFS 服務(wù)器的安裝與配置318關(guān)閉:.31944.4第 5 章5.15.2第 6 章設(shè)置 uboot 中的關(guān)于 NFS 的參數(shù)320構(gòu)建 YAFFS2 文件系統(tǒng)325YAFFS2 簡(jiǎn)介325作 yaffs2 映像文件:325構(gòu)建 Linux 文件系統(tǒng)篇
9、小小小結(jié)327第五部分第 1 章Qt 編程篇328Qt 的介紹3281.11.2第 2 章2.12.2第 3 章3.1Qt 的開發(fā)工具328Qt 的版本329Qt4 開發(fā)平臺(tái)的建立330編譯和安裝 Qt4330使用 QtCreator 進(jìn)行開發(fā)336基礎(chǔ)例程開發(fā)詳解346mainwindow3465第一部分S5PV210機(jī)開發(fā)篇第1章初識(shí) ARM1.1 ARM 處理器的應(yīng)用領(lǐng)域1.1.1 ARM 處理器簡(jiǎn)介ARM 處理器是一種低功耗高性能 32 位 RISC(精簡(jiǎn)指令集)處理器。目前, 采用 ARM 技術(shù)知識(shí)產(chǎn)權(quán)(IP)核的微處理器,就是通常所說的 ARM 微處理器已遍及工業(yè)、消費(fèi)類電子、通信
10、系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、無線系統(tǒng)等各類市場(chǎng),基于ARM 技術(shù)的微處理器應(yīng)用約占據(jù)了32 位RISC 微處理器75%以上的市場(chǎng)份額, ARM 技術(shù)正在逐步滲入人們生活的各個(gè)方面。1.1.2ARM 處理器的應(yīng)用領(lǐng)域在信息化程序如此高的今天,ARM 技術(shù)的應(yīng)用已經(jīng)滲入到了各個(gè)領(lǐng)域,不斷的發(fā)展和革新為人們的生活帶來了極大的便利。1. 無線通信、便攜式式目前已有超過80%的無線通信設(shè)備采用了ARM 技術(shù),ARM 以其高性能和低成本,在該領(lǐng)域的地位日益鞏固。如:PAD、智能上網(wǎng)本、等。圖 1.1 ARM圖 1.2 ARM應(yīng)用2. 數(shù)字消費(fèi)類流行的數(shù)碼相機(jī)和打印機(jī)中絕大部分采用 ARM 技術(shù),包括中 SIM機(jī)、GP
11、S智能卡也采用 ARM 技術(shù),類似的還有數(shù)字音頻導(dǎo)航儀等。器、數(shù)字機(jī)頂盒、6圖 1.3 數(shù)字機(jī)頂盒圖 1.4 GPS 導(dǎo)航儀3. 網(wǎng)絡(luò)領(lǐng)域隨著寬帶技術(shù)的發(fā)展及推廣,采用 ARM 技術(shù)的有網(wǎng)關(guān)、路由器、以太網(wǎng)交換機(jī)、無線點(diǎn)、多服務(wù)配置平臺(tái)、網(wǎng)絡(luò)連接和固態(tài)磁盤等。圖 1.5 路由器1.1.2ARM 處理器的特點(diǎn)ARM 處理器具有耗電少,功能強(qiáng)大,16 位/32 位雙指令集等眾多優(yōu)點(diǎn)。主要有以下六個(gè)主要特點(diǎn):體積小、低功耗,低成本和高性能;支持 Thumb(16 位)/ARM(32 位)雙指令集; 大量使用寄存器,指令執(zhí)行速度快;大多數(shù)數(shù)據(jù)操作都在寄存器中完成; 尋址方式靈活簡(jiǎn)單,執(zhí)行效率高; 指令
12、長(zhǎng)度固定。71.2 主流 ARM 處理器介紹1.2.1 ARM 處理器系列ARM 處理器系列有很多,如:ARM7、ARM9、ARM9E、ARM10E、ARM11、Cortex 系列等,目前仍在不斷發(fā)展。圖 1.6 ARM 不同系列處理器性能之間關(guān)系1.2.2 ARM 體系結(jié)構(gòu)名ARM 主要有七種指令集體系結(jié)構(gòu),v1v3 版本,v4T 版本,v5 版本,v6 版本,v7 版本。ARM通常以 ARM【x】【y】【z】【T】【D】【M】【I】【E】【J】【F】【S】形式出現(xiàn),這些后綴了可以組合,含義如下:x:y:z:T:D:M:I:E:J:F:系列號(hào),如 ARM9、ARM11 等; 管理/保護(hù)單元;
13、擁有 Cache;表示支持 16 位 Thumb 壓縮指令集; 表示支持片上調(diào)試(Debug);表示內(nèi)嵌硬件乘法器(Multiplier); 支持片上斷點(diǎn)和調(diào)試點(diǎn);增強(qiáng)指令(基于 TDMI);支持 Jazelle,即 Java;支持向量浮點(diǎn)單元; S:表示式(full synthesizable)。81.3 S5PV210 處理器介紹1.3.1 S5PV210 處理器概述Cortex A8 處理器給消費(fèi)和低功耗移動(dòng)帶來了的,使得最終用戶可以享受到更高水準(zhǔn)的和創(chuàng)新。全新的 ARM Cortex-A8 處理器及其背后提供支持的技術(shù)為家庭和市場(chǎng)帶來了前所未有的性能和功耗水平,同時(shí)也將為消費(fèi)者帶來具有
14、豐富應(yīng)用的創(chuàng)新設(shè)備。Cortex-A8 處理器是第一款基于下一代 ARMv7 架構(gòu)的應(yīng)用處理器。其中S5PV210 是大名鼎鼎的三星公司推出的一款適用于智能和平板電腦等多媒體設(shè)備的應(yīng)用處理器,具有完整的應(yīng)用兼容性,支持傳統(tǒng)的 ARM、Thumb 指令集和新增的高性能緊湊型 Thumb-2 指令集。1.3.2 Cortex-A8 處理器的優(yōu)勢(shì)高性能,Cortex-A8,在 600MHz1GHz 的頻率下,提供的性能超過 2000DMIPS。移動(dòng) Internet 的理想選擇,低功耗設(shè)計(jì),支持全天瀏覽和連接。多核技術(shù),單核到四核實(shí)現(xiàn),支持面向性能的應(yīng)用領(lǐng)域。高級(jí)擴(kuò)展,兼容 ARM 和 Thumb
15、體系結(jié)構(gòu)外,提供 Thumb-2 提供最佳代碼大小和性能,TrustZone 安全擴(kuò)展,提供度。計(jì)算,Jazelle 技術(shù)提高執(zhí)行環(huán)境速91.4A8 開發(fā)平臺(tái)介紹l處理器采用基于 ARM CortexA8 架構(gòu)的 S5PV210,主頻高達(dá) 1GHz能支持多種操作系統(tǒng),如:Linux、Andriod 和 WinCE 等操作系統(tǒng)。l開發(fā)環(huán)境主要是 RedHat 的 Linux 操作系統(tǒng)和SecureCRT 串口調(diào)試工具,開發(fā)方便,使用簡(jiǎn)單。l內(nèi)存模塊由 4 片 128MB DDR2 程序也能在平臺(tái)上運(yùn)行順暢。組成,總?cè)萘窟_(dá) 512MB,使規(guī)模較大的項(xiàng)目l器采用 512MB 的 SLC NandFl
16、ash ,具有 ECC 校驗(yàn)功能,大大減少了數(shù)據(jù)讀寫的出錯(cuò)率。l人機(jī)交互模塊選用 7 寸電容式觸摸屏 24bpp,分辨率:800 × 480,支持五點(diǎn)觸摸,用戶能清晰實(shí)時(shí)地查看圖像、數(shù)據(jù),和通過點(diǎn)擊觸摸屏平臺(tái), 為開發(fā)工業(yè)類和消費(fèi)類項(xiàng)目提供了便利。l模塊采用標(biāo)準(zhǔn)排針拔插式設(shè)計(jì),底板或板均可拔插更換, 底板的預(yù)留接口有、Camera 和四個(gè)串口,可供用戶設(shè)計(jì)板、底板或加入相應(yīng)功能模塊,用于二次開發(fā)及科研創(chuàng)新和競(jìng)賽,同時(shí)便于后續(xù)升級(jí)和維護(hù);平臺(tái)集成了 WM8960 音頻模塊、DM9000 網(wǎng)絡(luò)通信模塊、SD 卡傳輸電路、串口l通信電路、usb 通信電路、8 個(gè)按鍵和蜂鳴器等外設(shè),豐富。l
17、程序方式:可在已燒寫開發(fā)套件提供的 uboot 的基礎(chǔ)下,通過 usb 燒寫10的程序,操作方便,燒寫速度快,加快開發(fā)進(jìn)度。l國(guó)內(nèi)首創(chuàng)物聯(lián)網(wǎng)接口。通過配套的物聯(lián)網(wǎng)盒子可以與 RFID、ZigBee、藍(lán)牙、WIFI 等任意物聯(lián)網(wǎng)平臺(tái)進(jìn)行數(shù)據(jù)傳輸。通用性極強(qiáng)。1.5 S5PV210機(jī)開發(fā)軟件和驅(qū)動(dòng)的安裝機(jī)開發(fā)的軟件主要有 Source Insight,NotePad+,UltraEdit,編譯環(huán)境在 Linux 紅帽虛擬機(jī)上。有關(guān)軟件的安裝請(qǐng)參考里面有詳細(xì)的安裝與使用步驟喲 O(_)OA8 開發(fā)平臺(tái)使用,1.6本章小結(jié)本章主要簡(jiǎn)單介紹了 ARM 處理器的特點(diǎn)和應(yīng)用領(lǐng)域,讀者可以從中初步認(rèn)識(shí)到 AR
18、M 處理器是如此的強(qiáng)大,可望而不可及的感覺,有木有_。是不是很渴望開始學(xué)習(xí)ARM 呢?比起以前學(xué)習(xí)過的51 單片機(jī)迷人多了吧,如果您有這個(gè)想法,請(qǐng)您繼續(xù)往下讀,跟著實(shí)驗(yàn)指導(dǎo)書一步一步走,我相信的將來,您將是一個(gè)杰出的工程師。11第2章ARM 匯編語(yǔ)言基礎(chǔ)2.1ARM 寄存器組介紹ARM 處理器一般共有 37 個(gè)寄存器,其中包括:(1)31 個(gè)通用寄存器,包括 PC(程序計(jì)數(shù)器)在內(nèi),都是 32 位的寄存器。(2)6 個(gè)狀態(tài)寄存器,都是 32 位的寄存器。ARM 處理器共有 7 種不同的處理器模式,用戶模式(User),快速中斷模式(FIQ),普通中斷模式(IRQ),管理模式(Svc),數(shù)據(jù)中止
19、模式(Abort),未定義指令中止模式(Und),系統(tǒng)模式(Sys),在每一種處理器模式中有一組相應(yīng)的寄存器。在任意一種處理器模式下,可見的寄存器包括 15 個(gè)通用寄存器(R0R14)、一個(gè)或者二個(gè)狀態(tài)寄存器以及程序計(jì)數(shù)器(PC)。在所有的寄存器中,有些是各模式共用同一個(gè)物理寄存器,有些寄存器是各個(gè)模式理寄存器。擁有的物圖 2.1 ARM 各處理器模式下的寄存器其中 r0r3 主要用于子程序間傳遞參數(shù),r4r11 主要用于保存局部變量,但在 Thumb 程序中,通常只能使用 r4r7 來保存局部變量;r12 用作子程序間scratch 寄存器,即 ip 寄存器;r13 通常用做棧指針,即 sp
20、;r14 寄存器又被稱為連接寄存器(lr),用于保存子程序的返回地址;r15 用作程序計(jì)數(shù)器(pc),12由于 ARM 采用了流水線機(jī)制,當(dāng)正確了 PC 的值后,該值為當(dāng)前指令地址加8 個(gè)字節(jié),即 PC 指向當(dāng)前指令的下兩條指令地址。2.2 ARM 尋址方式2.2.1 立即尋址例:以上兩條指令,第二個(gè)源操作數(shù)為立即數(shù),要求以“#”為前綴,對(duì)于十六進(jìn)制數(shù)需在緊跟“#”后加上“0x”。注意:在匯編語(yǔ)言中“;”后面表示注釋,以后出現(xiàn)都是如此,故不再詳述。2.2.2 寄存器尋址例:將寄存器 R1 和R2 存放的內(nèi)容相加,結(jié)果存放在寄存器 R0 中。2.2.3 寄存器間接尋址例:第一條指令,將 R1 的
21、值作為地址,取出條指令,將 R0 的數(shù)據(jù)到R1 的值為地址的器中的數(shù)據(jù)傳送到 R0 中;第二器里面。2.2.4 多寄存器尋址例:這種尋址方式可以用一條指令完成傳送最多 16 個(gè)通用寄存器的值。指令中的后綴 IA 表示在每次執(zhí)行完加載/操作后,R0 按字長(zhǎng)增加。上面二條指令中,前者表示讀出以 R0 的值為地址里面的內(nèi)容賦給 R1、讀出R0+4 的值為地址里面的內(nèi)容賦給 R2、依次類推;后者表示將 R3R5、R10 的數(shù)據(jù)保存到 R0 指向的地址,R0 的地址按字長(zhǎng)增加。13LDMIA R0, R1,R2,R3,R4;R1 <- R0,R2 <- R0 + 4,;R3 <- R0
22、 +8,R3 <- R0 + 12 STMIA R0, R3-R5,R10;R0 <- R3,R0 + 4 <- R4;R0 + 8 <- R5,R5 + 12 <- R10LDR R0, R1;R0 <- R1STR R0, R1;R1 <- R0ADD R0, R1, R2;R0 <- R1 + R2ADD R0, R0, #0x1;R0 <- R0 + 1ADD R0,R0, #0x3f;R0 <- R0 + 0x3f2.3 ARM 指令集2.3.1 ARM 匯編指令的格式格式:<opcode><cond>
23、;SRd,Rn,operand2<opcode>:<cond>:S:Rd:Rn:operand2:指令操作符編碼,如 LDR、STR 等。指令執(zhí)行的條件編碼,如 EQ、NE 等。決定指令的執(zhí)行是否影響 CPRS 的值。目標(biāo)寄存器編碼。包含第一個(gè)源操作數(shù)的寄存器編碼。第二個(gè)操作數(shù)。條件碼是在 ARM 指令執(zhí)行之前進(jìn)行的,只有符合條件,ARM 指令才執(zhí)行。圖 2.2 ARM 指令的條件碼表2.3.2 跳轉(zhuǎn)指令跳轉(zhuǎn)指令用于實(shí)現(xiàn)程序流程的跳轉(zhuǎn),在 ARM 程序中有兩種方法可以實(shí)現(xiàn)程序流程的跳轉(zhuǎn): 使用專門的跳轉(zhuǎn)指令。 直接向程序計(jì)數(shù)器 PC 寫入跳轉(zhuǎn)地址值。ARM 匯編中總共有
24、四種跳轉(zhuǎn)指令,如下: B 跳轉(zhuǎn)指令(注:只能跳轉(zhuǎn)前后 32MB 的地址空間)B 指令編碼中的跳轉(zhuǎn)地址值是相對(duì)當(dāng)前 PC 的一個(gè)偏移量,經(jīng)匯編器計(jì)算得到跳轉(zhuǎn)的絕對(duì)地址。 BL 帶返回的跳轉(zhuǎn)指令,BL 指令在執(zhí)行跳轉(zhuǎn)的同時(shí)將轉(zhuǎn)移指令的下一條指令的14地址到當(dāng)前處理器模式下的返回。 BLX 帶返回和狀態(tài)切換的跳轉(zhuǎn)指令 BX 帶狀態(tài)切換的跳轉(zhuǎn)指令地址 LR 中,這一般用于子程序的調(diào)用和2.3.3 數(shù)據(jù)處理指令數(shù)據(jù)處理指令分類: 例:數(shù)據(jù)傳送指令 例:比較指令 例:算數(shù)運(yùn)算指令 邏輯運(yùn)算指令例:2.3.4 乘法指令例:2.3.5 加載/指令A(yù)RM 處理器支持 加載/指令用于在寄存器和器之間傳送數(shù)據(jù)15M
25、UL R0, R1, R2;R0 = R1 * R2ADD R0,R0, #3;該指令保持 R0 的 0、1 位,其余位清零。ORR R0,R0, #3;該指令置 R0 的 0、1 位為 1,其余位保持不變。BIC R0, R0, #0xf8;該指令清除 R0 的高 5 位,其余位保持不變。ADD R0, R1, #256;R0 = R1 + 256SUB R0, R1, R2;R0 = R1 R2RSB R0, R2, R3, LSL #1;R0 = (R3 << 1) R2CMP R1,#100;將寄存器 R1 的值與立即數(shù) 100 相減,并根據(jù)結(jié)果設(shè)置 CPSR 的標(biāo)志位。T
26、ST R1,#0xfffe;將寄存器 R1 的值與立即數(shù) 0xfffe 按位與,并根據(jù)結(jié)果設(shè)置 CPSR 的標(biāo)志位。MOV R1,R0;將寄存器 R0 的值傳送到寄存器 R1MOV R1,R0,LSL #3;將寄存器 R0 的值左移 3 位后傳送到 R1例:2.3.6 程序狀態(tài)寄存器指令 例:MSR 通用寄存器到程序狀態(tài)寄存器的數(shù)據(jù)傳送指令MRS 程序狀態(tài)寄存器到通用寄存器的數(shù)據(jù)傳送指令2.4ARM 偽指令偽操作是 ARM 匯編語(yǔ)言源程序里的一些特殊指令助記符,作用主要是為完成匯編程序做各種準(zhǔn)備工作,在源程序進(jìn)行匯編時(shí)由匯編程序處理,而不是在程序運(yùn)行期間由 CPU 執(zhí)行,這些偽操作只在匯編過程
27、中起作用,當(dāng)匯編結(jié)束,偽指令的使命也就隨之結(jié)束。2.4.1 符號(hào)定義偽指令符號(hào)定義偽操作主要用于 ARM 匯編程序中定義變量,對(duì)變量賦值以及定義寄存器的別名等操作。常見的符號(hào)定義偽操作有如下幾種: 例:用于定義全局變量的 GBLA、GBLL 以及 GBLS。用于定義局部變量的 LCLA、LCLL 以及 LCLS。用于對(duì)變量賦值的 SETA、SETL 以及 SETS。為一個(gè)協(xié)處理器定義名稱用 CP。為一個(gè)通用寄存器列表定義別名用 RLIST。16GBLATEST;定義一個(gè)全局的數(shù)字變量,變量名為 TESTTESTSETA 0x55;將該變量賦值為 0x55LCLSSTRING;定義一個(gè)局部的字符
28、串變量,變量名為 STRING STRING SETS “Webee210”;將該變量賦值為” Webee210”List RLISTR0-R3;用 List 表示 R0R3 寄存器MSR CPSR, R0;傳送 R0 的內(nèi)容到 CPSR 寄存器MRSR0, CPSR;傳送 CPSR 的內(nèi)容到 R0 寄存器LDR R0, R1,R2;將器地址為 R1+R2 的字?jǐn)?shù)據(jù)讀入寄存器 R0 LDR R0, R1,R2!;將器地址為 R1+R2 的字?jǐn)?shù)據(jù)讀入寄存 R0并將新地址 R1+R2 寫入 R1STR R0,R1 , #8;將 R0 中的字?jǐn)?shù)據(jù)寫入以 R1 為地址的器中,并將新地址 R1+8 寫入
29、 R1STR R0,R1,#8;將 R0 中的字?jǐn)?shù)據(jù)寫入以 R1+8 為地址的器中2.4.2 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽操作一般用于特定的數(shù)據(jù)分配單元,同時(shí)可完成已匹配單元的初始化。常見的數(shù)據(jù)定義偽操作有如下幾種:DCB/W/D用于分配一片連續(xù)字節(jié)單元并用指定的數(shù)據(jù)初始化,其中 B表示 byte,W 表示半字(word),D 表示字長(zhǎng)(double),在 ARM 處理器里即 4個(gè)字節(jié)。MAP 用于定義一個(gè)結(jié)構(gòu)化的內(nèi)存表首地址,與 FIELD 配合使用。FIELD 用于定義一個(gè)結(jié)構(gòu)化的內(nèi)存表的數(shù)據(jù)域。例:2.4.3 宏定義偽指令MACRO 和 MEND 偽操作用于宏定義。MACRO 標(biāo)識(shí)宏定義的開
30、始,MEND 標(biāo)識(shí)宏定義的結(jié)束。用 MACRO 和 MEND 定義的一段代碼,稱為宏定義體,這樣在程序中就可以通過宏定操作多次調(diào)用該代碼段,可以使用 MEXIT 例:宏定義。2.4.4 其他常見的偽指令A(yù)REA ALIGN-用于定義一個(gè)代碼段或數(shù)據(jù)段通過添加填充字節(jié)的方式,使當(dāng)前位置滿足一定的對(duì)齊方式CODE16/32 -通知編譯器,其后的指令序列為 16 位的 Thumb 指令或?yàn)?2 位的 ARM 指令。ENTRY-指定匯編程序的,一個(gè)源文件中最多只有一個(gè) ENTRY,一個(gè)程序中至少有一個(gè) ENTRY。通知編譯器已經(jīng)到了源程序的結(jié)尾,每個(gè)源程序包含一個(gè) END 為程序中的數(shù)字常量、標(biāo)號(hào)等定
31、義一個(gè)等效的字符名稱,類似END EQU-17MACROCSI_SETB;宏名為 CSI_SETB,無參數(shù)LDRR0,=rPDATG;GPG0 口的值LDRR1, R0;將讀到 GPG0 口的值賦給 R1ORRR1,R1, #0x01;將 R1 的第 0 位置 1,STRR1, R0;輸出結(jié)果MENDStrDCB “Webee210” ;分配一片連續(xù)的字節(jié)單元并初始化為“Webee210”。Data DCW1,2,3,4;分配一片連續(xù)的半字單元并初始化為相應(yīng)值。MAP 0x2000;定義結(jié)構(gòu)化內(nèi)存表首地址的值為 0x2000A FIELD 16;定義A 的長(zhǎng)度為 16 字節(jié),位置為 0x200
32、0B FIELD 32;定義B 的長(zhǎng)度為 32 字節(jié),位置為 0x2010S FIELD 128;定義S 的長(zhǎng)度為 128 字節(jié),位置為 0x2030于C 語(yǔ)言中的#define。EXPOR用于在程序中一個(gè)全局標(biāo)號(hào),該標(biāo)號(hào)可在其他文件中。IMPORT用于通知編譯器要使用一個(gè)在其他源文件中定義的標(biāo)號(hào)。INCLUDE -用于將一個(gè)源文件包含到當(dāng)前的源文件中。2.5本章小結(jié)本章主要講解了 ARM 匯編語(yǔ)言中常見的各種語(yǔ)法,首先介紹了 ARM 寄存器組, 讓讀者先有個(gè)初步認(rèn)識(shí),接著講解了 ARM 尋址方式、ARM 指令集、ARM 偽指令, 讀者可以通過這 4 個(gè)小節(jié)了解到 ARM 匯編語(yǔ)言的簡(jiǎn)潔、高效
33、性,學(xué)過 DSP 的讀者就會(huì)知道,相比起 DSP 內(nèi)核匯編語(yǔ)言來說簡(jiǎn)直就是太簡(jiǎn)單了_。當(dāng)然 ARM 匯編語(yǔ)言不僅僅有以上介紹的指令,但如果能熟悉掌握本章介紹的指令,那么閱讀ARM 匯編程序絕對(duì)不是問題,畢竟 ARM 程序主要還是使用C 語(yǔ)言開發(fā)滴,有木有_。實(shí)際上在 ARM 上所用到的匯編程序就只有u-boot 的 start.S 等文件,還有內(nèi)核的 head.S 等文件,讀者要能結(jié)合本章知識(shí)點(diǎn)去閱讀這些文件,難度肯定會(huì)降低很多。18第3章詳解 S5PV210 啟動(dòng)過程3.1S5PV210 內(nèi)存地址圖 3.1 S5PV210 的 04G 地址空間圖圖 3.2 設(shè)備地址空間19由上面二個(gè)圖可知,
34、S5PV210 含有一個(gè)大小為 64KB 的 IROM,起始地址為0xD0000000,結(jié)束地址為 0xD000FFFF;含有一個(gè)大小為 96KB 的 IRAM,起始地址為 0xD0020000,結(jié)束地址為 0xD0037FFF;內(nèi)存起始地址為 0x20000000,有二個(gè)內(nèi)存塊,DRAM0 和 DRAM1 大小分別為 512MB、1024MB。3.2S5PV210 啟動(dòng)模式設(shè)置圖 3.3 S5PV210 啟動(dòng)模式管腳設(shè)置20由上圖可知,當(dāng) OM5:0 = 001100B 時(shí),啟動(dòng)方式為 SDBOOT;當(dāng) OM5:0 =000010B 時(shí),啟動(dòng)方式為 NAND 2KB8bitECC。3.3S5
35、PV210 啟動(dòng)流程分析根據(jù)三星公司的S5PV210_UM_REV1.1手冊(cè)可知,S5PV210 啟動(dòng)過程主要可分為 3 個(gè)階段。S5PV210 上電復(fù)位后將從 IROM 處執(zhí)行已在 BL0 里初始化過程中對(duì)啟動(dòng)設(shè)備進(jìn)行16KB ) 到 IRAM 處, 即剛才所說的的啟動(dòng)代碼BL0,并從啟動(dòng)設(shè)備拷貝 BL1(最大0xD0020000 開始的地址, 其中 0xD00200000xD0020010 的 16 字節(jié)為 BL1 的校驗(yàn)信息和 BL1,并對(duì) BL1進(jìn)行校驗(yàn),校驗(yàn)通過轉(zhuǎn)入 BL1 進(jìn)行執(zhí)行,BL1 繼續(xù)初始化,并拷貝 BL2(最大80KB)到 IRAM 中并對(duì)其校驗(yàn),通過后轉(zhuǎn)入 BL2。B
36、L2 完成一些比較復(fù)雜的初始化,包括 DRAM 的初始化,完成后將 OS 代碼拷貝到 DRAM 中,并跳到OS 中執(zhí)行并完成啟動(dòng)引導(dǎo)。圖 3.4 啟動(dòng)過程示意圖代碼主要完成以下初始化:關(guān)閉看門狗; 初始化icache; 初始化棧;初始化堆;初始化塊設(shè)備拷貝功能; 設(shè)置系統(tǒng)時(shí)鐘;拷貝 BL1 到 iRAM;BL021 檢查 BL1 的校驗(yàn)和,如果失敗則第二啟動(dòng)模式(安全啟動(dòng)模式),校驗(yàn)則跳到 0xD0020000(IRAM)處執(zhí)行。其中 0xD0020000 0xD0020010 里的 16 字節(jié)頭部信息是什么呢?這 16 字節(jié)信息用戶是不能隨便設(shè)置的!在S5PV210_iROM_Applica
37、tionNote_Preliminary_20091126 文檔中規(guī)定16 字節(jié)的頭部信息必須為:校驗(yàn)和的計(jì)算方法:count dataLength buffer CheckSum:是一個(gè)循環(huán)索引變量BL1 的大小,以字節(jié)為從 BL1 里讀一個(gè) 1 字節(jié)的數(shù)據(jù)BL1 的校驗(yàn)總和如何生成 16byte 的頭部信息?在從啟動(dòng)設(shè)備(如:NAND FLASH / SD 卡)拷貝 BL1 的前 16K 數(shù)據(jù)到 IRAM 時(shí),這 16K 數(shù)據(jù)中的前 16byte 中保存了校驗(yàn)和的值以及 BL1 的大小,在拷貝過程中 CPU 會(huì)計(jì)算出當(dāng)前 bin 文件中含1的個(gè)數(shù),然后與校驗(yàn)和進(jìn)行比較,如果二者相等則繼續(xù)運(yùn)
38、行程序,否則,不執(zhí)行。22for(count = 0;count < dataLength; count+)buffer = (*(volatile u8*)(uBLAddr + count); CheckSum = CheckSum + buffer;地址內(nèi)容0xD002_0000BL1 的大小0xD002_0004必須寫為 00xD002_0008CheckSum0xD002_000C必須寫為 0圖 3.5 S5PV210 啟動(dòng)流程框架圖3.4本章小結(jié)本章主要分析了 S5PV210 的啟動(dòng)流程過程,理順了啟動(dòng)過程后,對(duì)以后的學(xué)習(xí)會(huì)有承上啟下的作用。限于篇幅,不可能一一詳述每個(gè)細(xì)節(jié)問題
39、,如果讀者想更 加 清 楚 的 認(rèn) 識(shí) 它 的 啟 動(dòng) 過 程 , 請(qǐng) 參 考 三 星 公 司 的S5PV210_iROM_ApplicationNote_Preliminary_20091126手冊(cè)。前面三章稍微有點(diǎn)枯燥,有木有_。是不是迫不及待的想接觸代碼,接觸實(shí)際硬件電路,想點(diǎn)亮屬于的 LED 燈了呢?很快,您將會(huì)看到23第4章S5PV210 GPIO 接口實(shí)驗(yàn)4.1 GPIO 硬件接口介紹4.1.1GPIO 硬件簡(jiǎn)介GPIO(General Purpose I/O Ports)即通用輸入/輸出端口,可以對(duì) I/O 進(jìn)行讀寫操作 GPIO 操作是所有硬件操作的基礎(chǔ)。S5PV210 有 2
40、37 個(gè)多功能 I/O 端口,可以通過設(shè)置寄存器來確定某個(gè)引腳用于輸入、輸出或者用于其他特殊功能。4.1.2GPIO 寄存器S5PV210 的 GPIO 端口寄存器主要有三類,分別是寄存器 GPxCON,用于設(shè)置 GPIO 引腳的功能(輸入/輸出/其他功能);數(shù)據(jù)寄存器 GPxDAT,用于讀/寫引腳數(shù)據(jù);上拉寄存器 GPxUP,用于確定是否使用內(nèi)部上拉電阻。4.1.3LED 原理圖設(shè)計(jì)LED 原理圖分別在 210 底板和板上,如下:圖 4.1 LED 硬件原理圖圖 4.2 4 個(gè) LED 對(duì)應(yīng)的 GPIO 引腳連接圖由以上兩個(gè)圖可知,LED1LED4 對(duì)應(yīng)的 GPIO 口為 GPJ2_0 GP
41、J2_3,如果要讓 LED1 亮,則設(shè)置 GPJ2CON3:0為輸出引腳,設(shè)置 GPJ2DAT0為輸出低電平, 即可點(diǎn)亮 LED1 啦,就這么簡(jiǎn)單_。244.2 匯編點(diǎn)亮LED4.2.1實(shí)驗(yàn)前言這小節(jié),我們使用第二章所學(xué)的匯編語(yǔ)言來編寫一個(gè)小程序,實(shí)現(xiàn)點(diǎn)亮 LED。4.2.2實(shí)驗(yàn)講解源程序在210_code1.led_S目錄下,包含 3 個(gè)文件, start.S、Makefile、mktools.c。start.S 講解程序很簡(jiǎn)單,里面有詳細(xì)的注釋,這里不再句句啰嗦,詳細(xì)請(qǐng)查看源代碼。1.在S5PV210_UM_REV1.1搜索 GPJ2CON 發(fā)現(xiàn),GPJ2CON 寄存器的地址
42、為0xE020_0280,GPJ2DAT 寄存器的地址為 0xE020_0284。2.由下圖可知,往 GPJ2CON3:0寫入 0x1 即 0001B,設(shè)置 GPJ2_0 引腳為輸出狀態(tài),其他引腳亦是如此,這里僅列舉 GPJ2CON0。3.由LED 硬件原理圖可知,LED1 左端置低電平,可導(dǎo)通發(fā)光二極管,即點(diǎn)亮LED1,故往 GPJ2DAT0寫入 0,即點(diǎn)亮 LED1。Makefile 講解1. 我們先再 Linux 虛擬機(jī)下執(zhí)行 make 命令(注意:執(zhí)行 make 命令前,確保 Linux虛擬機(jī)已安裝了 arm-linu叉編譯工具,具體的安裝方法請(qǐng)閱讀A8開發(fā)平臺(tái)使用)
43、,編譯一下源文件,先看看編譯器做了哪些動(dòng)作。2. 簡(jiǎn)單分析編譯過程(1)由上圖可知,arm-linux-gcc 將 start.S 編譯成 start.o 目標(biāo)文件,-c 表 示編譯不,-o 跟隨輸出文件名。(2)arm-linux-ld 將 start.o 目標(biāo)文件成 elf 文件格式,-Ttext0 表示程序運(yùn)行的地址是 0,其實(shí)程序可以在任何一個(gè)地址運(yùn)行,因置無關(guān)碼,后面您會(huì)看到可以在內(nèi)存 0x20000000 地址運(yùn)行。源代碼是位(3) arm-linux-objcopy 將 ELF 格式的可執(zhí)行文件轉(zhuǎn)換為二進(jìn)制文件,即可以在開發(fā)板上執(zhí)行的文件,-O 表示指定格式來輸出文件,這里是 b
44、inary 即二進(jìn)制文件。(4) arm-linux-objdump 將 ELF 文件反匯編,主要用于編譯出錯(cuò)時(shí),對(duì)調(diào)試很有幫助,-D 表示反匯編所有段。(5) 接著二句是用于 SD 卡燒寫使用的,如果使用 u-boot 菜單欄或者u-boot 命令行來燒寫,則可忽略這二句。(6)想知道 arm-linux 編譯工具, 所帶參數(shù)是什么意思, 例如想查看arm-linux-gcc 編譯工具,-S 是什么意思,您可以在 linux 虛擬機(jī)令行執(zhí)行 arm-linux-gcc-help 即可查看到詳細(xì)信息。看完編譯過程您應(yīng)該要26知道 Makefile 的作用了,詳細(xì)的 Makefile 語(yǔ)法,可參
45、考網(wǎng)絡(luò),限于篇幅, 這里就不一一列舉啦_。mktools.c 講解還記得第三章講 S5PV210 啟動(dòng)流程嗎?是否還大概還記得 0xD0020000 0xD0020010 里必須存放 16 個(gè)字節(jié)的頭部信息?如果不記得,請(qǐng)回頭看看第三章第 3.3 節(jié)講過的內(nèi)容啦,溫故而知新嘛,不要?jiǎng)倢W(xué)過就忘囖_。mktools.c 文件的作用就是在由源 bin 文件(這里是 led.bin)根據(jù)三星公司規(guī)定的方法生成 16 個(gè)字節(jié)的頭部信息,使得 led.bin 變成 new_led.bin,如下所示:mktools.c 是從網(wǎng)絡(luò)中獲得的,詳細(xì)的代碼請(qǐng)查看源代碼,根據(jù)前面將的內(nèi)容結(jié)合里面的注釋,
46、我有理由相信您可以看的懂_。在前期用 SD 卡燒寫機(jī)程序到開發(fā)板上會(huì)起到作用,如果使用制作的u-boot 菜單欄或者 u-boot 命令行來燒寫機(jī)程序就不需要 mktools.c 文件了, 因?yàn)閡-boot 源代碼已經(jīng)完成了生成 16byte 頭部信息的功能。4.2.3A8機(jī)實(shí)驗(yàn)燒寫方法使用 SD 卡燒寫Makefile 里的最后二句就是 SD 卡燒寫令:表示輸出文件為 new_led.bin,輸出文件到/dev/sdb,設(shè)備文件在 linux 下是在/dev/目錄下,此時(shí) SD 卡在 Linux 下僅僅被看成是一個(gè)文件,seek=1 表示燒寫到扇區(qū) 1,Linux 讀寫磁盤設(shè)備
47、最小是一個(gè)扇區(qū)。注意:/dev/sdb 是查閱 SD 在 Linux 虛擬機(jī)上的設(shè)備節(jié)點(diǎn)而設(shè)置的,如果您的設(shè)備節(jié)點(diǎn)為/dev/sdc 則 Makefile 需要修改為/dev/sdc,SD 卡到 PC 后,在 Linux 虛擬機(jī)命令行執(zhí)行 ls /dev/sd*命令查看到設(shè)備節(jié)點(diǎn)的情況燒寫步驟:1.2.3.編譯 make 將 SD 卡到PC 機(jī)直接在 Linux 虛擬機(jī)命令行執(zhí)行 makeload 即可完成 SD 卡燒寫如下是在紅帽虛擬機(jī)上執(zhí)行過程示意:27rootlocalhost 1.led_S# ls /dev/sd*/dev/sda/dev/sda1/dev/sda2 /dev/sdb
48、load:ddiflag=dsync oflag=dsync if=new_led.bin of=/dev/sdb seek=116 字節(jié)的頭部信息led.bin使用 u-boot 菜單欄燒寫(SDBOOT 啟動(dòng)方式下)下面使用圖文并茂的方式來說明如何用u-boot 菜單欄燒寫,(注意:燒寫前需要安裝好 SecureCRT、DNW 工具,以及 USB 驅(qū)動(dòng),具體安裝方法請(qǐng)查閱A8 開發(fā)平臺(tái)使用)。步驟一:步驟二:28rootlocalhost 1.led_S# make loaddd iflag=dsync oflag=dsync if=new_led.bin of=/dev/s
49、db seek=1 32+0 records in32+0 records out16384 bytes (16 kB) copied, 0.130677 seconds, 125 kB/s步驟三:步驟四:29步驟五:30使用 u-boot 命令行的 tftp 命令燒寫(SDBOOT 啟動(dòng)方式下)下面同樣使用圖文并茂的方式來說明如何使用 tftp 命令燒寫機(jī)代碼到開發(fā)板,(注意:燒寫前 Linux 虛擬機(jī)需要安裝好 tftp 服務(wù)器,具體安裝請(qǐng)查閱A8開發(fā)平臺(tái)使用)燒寫前需要做好的準(zhǔn)備的事項(xiàng)有:開啟 tftp 服務(wù)器,使用#service 開發(fā)板連接上網(wǎng)線;xinetdresta
50、rt 命令;設(shè)置開發(fā)板上的 serverip 為 Linux 虛擬機(jī)的ip 地址;將.bin 文件放到 Linux虛擬機(jī)的 /tftpboot目錄下,如: /tftpboot/led.bin步驟一:步驟二:31設(shè)置 ip 地址令示例:步驟三、四:32/* 注意,開發(fā)板 IP 地址需要跟 Linux 服務(wù)器 IP 地址要同一個(gè)網(wǎng)端 */ setenv ipaddr 32setenv serverip 31save/* 最后不要忘記保存到 NAND,否則重新上電后不保存 */其他燒寫方法提示除了以上介紹的三種方法外,還可以使用 nand 的
51、讀寫命令,dnw 命令(其實(shí)第二種方法的實(shí)現(xiàn)就是使用 dnw 命令,只不過用菜單欄的形式封裝了一下而已_,方便讀者),nfs 命令,串口 xmodem 命令等等,限于篇幅,不可能一一介紹,建議讀者選擇以上三種方法的其中一種,根據(jù)式_。以后機(jī)代碼燒寫,不再詳述。的喜愛來選擇方4.2.4實(shí)驗(yàn)現(xiàn)象板上的 4 盞同時(shí)被點(diǎn)亮。334.3 用C 語(yǔ)言和匯編混合編程點(diǎn)亮流水燈4.3.1實(shí)驗(yàn)前言這小節(jié),我們結(jié)合C 語(yǔ)言和匯編語(yǔ)言編寫一個(gè)小程序,實(shí)現(xiàn)流水燈。4.3.2實(shí)驗(yàn)講解源程序在210_code2.led_flow_water_c目錄下,包含 4 個(gè)文件,start.S、Makefile、mktools.c、led.c,與上一節(jié)比較僅僅多了一個(gè) led.c 文件,Makefile、 mktools.c 是一樣的,這里不再重復(fù)講解。start.S 講解程序很簡(jiǎn)單,里面有詳細(xì)的注釋,這里不再句句啰嗦,詳細(xì)請(qǐng)查看源代碼。這里需要注意一點(diǎn), 由匯編調(diào)用 C 語(yǔ)言之前需要先設(shè)置棧, ldr sp,=0xD0037D80。led.c 講解這就是 led.c 的主函數(shù),很簡(jiǎn)單,讀者可參考源代碼,這里就不啰嗦了。344.3.3實(shí)驗(yàn)現(xiàn)象板上的 4 盞輪流被點(diǎn)亮,這就是“神奇”的流水燈,就這么
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)信息技術(shù)四年級(jí)上冊(cè)教學(xué)計(jì)劃成果展示
- 《金融常識(shí)入門:初中思想品德課程教案》
- 高一物理選修:《量子力學(xué)初步了解與應(yīng)用》
- 中小學(xué)教師職業(yè)發(fā)展培訓(xùn)心得體會(huì)
- IT行業(yè)軟件開發(fā)項(xiàng)目經(jīng)理工作證明(7篇)
- 農(nóng)村合作社生物技術(shù)應(yīng)用協(xié)議
- 未來城市的設(shè)想與展望想象作文(5篇)
- 諸子百家思想對(duì)比教案
- 用戶體驗(yàn)設(shè)計(jì)實(shí)習(xí)總結(jié)范文
- 回到古代初二作文10篇
- GB/T 5080.1-2012可靠性試驗(yàn)第1部分:試驗(yàn)條件和統(tǒng)計(jì)檢驗(yàn)原理
- LY/T 1279-2020聚氯乙烯薄膜飾面人造板
- GB/T 5370-2007防污漆樣板淺海浸泡試驗(yàn)方法
- GB/T 17215.321-2021電測(cè)量設(shè)備(交流)特殊要求第21部分:靜止式有功電能表(A級(jí)、B級(jí)、C級(jí)、D級(jí)和E級(jí))
- 學(xué)生自主重修申請(qǐng)表(模板)
- 課件:第二章 社會(huì)工作項(xiàng)目申請(qǐng)(《社會(huì)工作項(xiàng)目策劃與評(píng)估》課程)
- 2023年中國(guó)檢驗(yàn)認(rèn)證集團(tuán)福建有限公司招聘筆試題庫(kù)及答案解析
- 【教學(xué)課件】微專題一:探究鄭州暴雨事件
- 智慧教育典型案例:之江匯“空間站”:校本研修資源利用的載體創(chuàng)新探索
- (完整版)鋼樓梯施工方案
- 裝飾裝修工程監(jiān)理細(xì)則詳解模板
評(píng)論
0/150
提交評(píng)論