版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章嵌入式最小系統(tǒng)設(shè)計(jì)第一節(jié) 系統(tǒng)設(shè)計(jì)概述第二節(jié) S3C44B0X概述第三節(jié) 系統(tǒng)硬件基本單元電路設(shè)計(jì)第四節(jié) S3C44B0X啟動(dòng)程序設(shè)計(jì)第6章嵌入式最小系統(tǒng)設(shè)計(jì)第一節(jié) 系統(tǒng)設(shè)計(jì)概述1第一節(jié) 系統(tǒng)設(shè)計(jì)概述 圖6.1為嵌入式最小系統(tǒng)原理框圖,如圖中所示一個(gè)嵌入式控制器自己是不能獨(dú)立工作的,必須給它提供電源,加上時(shí)鐘信號(hào)、復(fù)位信號(hào),如果芯片沒有片內(nèi)程序存儲(chǔ)器,則還要加上存儲(chǔ)器系統(tǒng),然后嵌入式控制器才可能工作。其中存儲(chǔ)器系統(tǒng)是可選的,這是因?yàn)楹芏嗝嫦蚯度胧筋I(lǐng)域的嵌入式微控制器內(nèi)部設(shè)計(jì)了程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器。這些提供嵌入式控制器運(yùn)行所必須條件的電路與嵌入式控制器共同構(gòu)成了嵌入式的最小系統(tǒng)。而大多數(shù)基于ARM7處理器核的微控制器都有調(diào)試接口,這部分在芯片實(shí)際工作時(shí)不是必需的,但在開發(fā)時(shí)很重要,所以把這部分也歸入最小系統(tǒng)中。
第一節(jié) 系統(tǒng)設(shè)計(jì)概述 圖6.1為嵌入式最小系2圖6.1最小系統(tǒng)原理框圖嵌入式控制器時(shí)鐘系統(tǒng)調(diào)試測(cè)試接口復(fù)位及其配置系統(tǒng)存儲(chǔ)器系統(tǒng)供電系統(tǒng)(電源)嵌入式控制器時(shí)鐘系統(tǒng)調(diào)試測(cè)試接口復(fù)位及其存儲(chǔ)器系統(tǒng)供電系統(tǒng)3
圖6.2是一個(gè)典型的嵌入式系統(tǒng)硬件結(jié)構(gòu)框圖,部分基本功能描述如下:圖6.2是一個(gè)典型的嵌入式系統(tǒng)硬件結(jié)構(gòu)框圖,4復(fù)位電路可完成系統(tǒng)上電復(fù)位和在系統(tǒng)工作時(shí)用戶按鍵復(fù)位。電源電路為S3C44B0X及其他需要3.3V電源的外圍電路供電。晶振為系統(tǒng)提供工作時(shí)鐘,通過(guò)片內(nèi)PLL(時(shí)鐘發(fā)生器)電路倍頻作為微處理器的工作時(shí)鐘。Flash存儲(chǔ)器可存放已調(diào)試好的用戶應(yīng)用程序、嵌入式操作系統(tǒng)或其他在系統(tǒng)掉電后需要保存的用戶數(shù)據(jù)等。SDRAM存儲(chǔ)器作為系統(tǒng)運(yùn)行時(shí)的主要區(qū)域,系統(tǒng)及用戶數(shù)據(jù)、堆棧均位于SDRAM存儲(chǔ)器中。復(fù)位電路可完成系統(tǒng)上電復(fù)位和在系統(tǒng)工作時(shí)用戶按鍵復(fù)位。5JTAG接口可對(duì)芯片內(nèi)部的所有部件進(jìn)行訪問,通過(guò)該接口可對(duì)系統(tǒng)進(jìn)行調(diào)試、編程等。系統(tǒng)總線擴(kuò)展引出了數(shù)據(jù)總線、地址總線和必需的控制總線,便于用戶根據(jù)自身的特定要求擴(kuò)展外圍電路。串行接口電路用于系統(tǒng)與其他應(yīng)用系統(tǒng)的短距離雙向串行通信。10M以太網(wǎng)接口為系統(tǒng)提供以太網(wǎng)接入的物理通道,通過(guò)該接口,系統(tǒng)可以10Mb/s的速率接入以太網(wǎng)。JTAG接口可對(duì)芯片內(nèi)部的所有部件進(jìn)行訪問,通過(guò)該接口可對(duì)系6第二節(jié) S3C44B0X概述6.2.1S3C44B0X引腳及信號(hào)描述6.2.2S3C44B0X特性6.2.3 ARM存儲(chǔ)器6.2.4 S3C44B0X存儲(chǔ)控制器第二節(jié) S3C44B0X概述6.2.1S3C44B07第二節(jié) S3C44B0X概述S3C44B0X微處理器是三星公司生產(chǎn)的基于ARM7TDMI核的微處理器,采用0.25μmCMOS工藝制造,并在ARM7TDMI核基本功能的基礎(chǔ)上集成了豐富的外圍功能模塊,便于低成本設(shè)計(jì)嵌入式應(yīng)用系統(tǒng)。片上集成的主要功能如下:在ARM7TDMI基礎(chǔ)上增加8KB的cache。外部擴(kuò)充存儲(chǔ)器控制器(FP/EDO/SDRAM控制,片選邏輯)。LCD控制器(最大支持256色的DSTN),并帶有1個(gè)LCD專用DMA通道。第二節(jié) S3C44B0X概述S3C44B82個(gè)通用DMA通道/2個(gè)帶外部請(qǐng)求引腳的DMA通道。2個(gè)帶有握手協(xié)議的UART和1個(gè)SIO。1個(gè)多主的I2C總線控制器。1個(gè)IIS總線控制器。5個(gè)PWM定時(shí)器及1個(gè)內(nèi)部定時(shí)器。看門狗定時(shí)器。71個(gè)通用可編程I/O口,8個(gè)外部中斷源。功耗控制模式是正常、低、休眠和停止。8路10位ADC。具有日歷功能的RTC(實(shí)時(shí)時(shí)鐘)。PLL時(shí)鐘發(fā)生器。2個(gè)通用DMA通道/2個(gè)帶外部請(qǐng)求引腳的DMA通道。96.2.1S3C44B0X引腳及信號(hào)描述S3C44B0X引腳如圖6.3所示。6.2.1S3C44B0X引腳及信號(hào)描述S3C4410S3C44B0X引腳信號(hào)的詳細(xì)描述見表6.1。表6.1S3C44B0X引腳信號(hào)詳細(xì)描述嵌入式最小系統(tǒng)設(shè)計(jì)課件11嵌入式最小系統(tǒng)設(shè)計(jì)課件12嵌入式最小系統(tǒng)設(shè)計(jì)課件13嵌入式最小系統(tǒng)設(shè)計(jì)課件14嵌入式最小系統(tǒng)設(shè)計(jì)課件15嵌入式最小系統(tǒng)設(shè)計(jì)課件16嵌入式最小系統(tǒng)設(shè)計(jì)課件17嵌入式最小系統(tǒng)設(shè)計(jì)課件186.2.2S3C44B0X特性1.體系結(jié)構(gòu)集成了手持設(shè)備和通用嵌入式系統(tǒng)應(yīng)用的解決方案。16/32位RISC體系結(jié)構(gòu)和ARM7TDMI處理器內(nèi)核強(qiáng)大的指令體系。Thumb代碼壓縮機(jī),最大代碼密度同時(shí)保持了32位指令的性能?;贘TAG的片上集成ICE調(diào)試支持解決方案。32×8的硬件乘法器。實(shí)現(xiàn)低功耗SAMBAII(三星ARM處理器嵌入式微控制器總線體系結(jié)構(gòu))的新型總線結(jié)構(gòu)。6.2.2S3C44B0X特性1.體系結(jié)構(gòu)192.系統(tǒng)管理器支持大、小端模式(通過(guò)外部引腳來(lái)選擇)。包含8個(gè)地址空間,每個(gè)地址空間為32MB,總共有256MB。所有地址空間都可以通過(guò)編程設(shè)置為8位、16位或32位寬數(shù)據(jù)對(duì)齊訪問。8個(gè)地址空間中,6個(gè)地址空間可用于ROM、SRAM等存儲(chǔ)器,2個(gè)用于ROM、SRAM、FP/EDO/SDRAM等存儲(chǔ)器。7個(gè)起始地址固定及大小可編程的地址空間。1個(gè)起始地址及大小可變的地址空間。所有存儲(chǔ)器空間的訪問周期都可通過(guò)編程配置。提供外部擴(kuò)展總線的等待周期。在低功耗模式下支持DRAM/SDARM自動(dòng)刷新。支持地址對(duì)稱或非地址對(duì)稱的DRAM。2.系統(tǒng)管理器203.cache和片內(nèi)SRAM4路相連統(tǒng)一的8KB指令/數(shù)據(jù)cache。未作為cache使用的0/4/8KBcache存儲(chǔ)空間可作為片內(nèi)SRAM使用。cache偽LRU(最近最少使用)的替換算法。通過(guò)在主內(nèi)存和緩沖區(qū)內(nèi)容之間保持一致的方式寫內(nèi)存。具有4級(jí)深度的寫緩沖。當(dāng)緩沖區(qū)出錯(cuò)時(shí),請(qǐng)求數(shù)據(jù)填充。3.cache和片內(nèi)SRAM214.時(shí)鐘和功耗管理低功耗。片上PLL使得MCU的工作時(shí)鐘頻率最高為66MHz。時(shí)鐘可通過(guò)軟件選擇性地反饋回每個(gè)功能塊。功耗管理模式為:正常模式:正常運(yùn)行模式。低速模式:不帶PLL的低頻時(shí)鐘。休眠模式:使CPU的時(shí)鐘停止。停止模式:所有時(shí)鐘都停止。EINT[7:0]或RTC警告中斷可使功耗管理從停止模式中喚醒。4.時(shí)鐘和功耗管理22
5.中斷控制器30個(gè)中斷源(1個(gè)看門狗定時(shí)器中斷、6個(gè)定時(shí)器中斷、6個(gè)UART中斷、8個(gè)外部中斷、4個(gè)DMA中斷、2個(gè)RTC中斷、1個(gè)ADC中斷、1個(gè)I2C中斷和1個(gè)SIO中斷)。矢量IRQ中斷模式縮短中斷響應(yīng)周期。外部中斷源的電平/邊沿模式??删幊痰碾娖?邊沿極性。支持緊急中斷請(qǐng)求的FIQ(快速中斷請(qǐng)求)。5.中斷控制器236.帶PWM的定時(shí)器(脈寬可調(diào)制)5個(gè)16位帶PWM的定時(shí)器,1個(gè)16位基于DMA或基于中斷的內(nèi)部定時(shí)器??删幊痰墓ぷ髦芷?、頻率和極性。死區(qū)產(chǎn)生器。支持外部時(shí)鐘源。7.實(shí)時(shí)時(shí)鐘RTC充分的時(shí)鐘特性:毫秒、秒、分、時(shí)、天、星期、月、年。32.768kHz時(shí)鐘。CPU喚醒的警告中斷??僧a(chǎn)生時(shí)鐘節(jié)拍中斷。6.帶PWM的定時(shí)器(脈寬可調(diào)制)248.通用輸入/輸出端口8個(gè)外部中斷端口。71個(gè)(多功能)復(fù)用輸入/輸出口。9.UART2個(gè)基于DMA或基于中斷的UART。支持5位、6位、7位、8位串行數(shù)據(jù)傳送/接收在傳送/接收時(shí)支持硬件握手。波特率可編程。支持IrDA1.0(115.2kb/s)。用于回環(huán)測(cè)試模式。每個(gè)通道有2個(gè)用于接收和發(fā)送的內(nèi)部32字節(jié)FIFO。8.通用輸入/輸出端口2510.DMA控制器2路通用的無(wú)CPU干涉的DMA控制器。2路DMA橋(外設(shè)DMA)控制器。支持I/O到內(nèi)存、內(nèi)存到I/O、I/O到I/O的橋式DMA傳送,有6種DMA請(qǐng)求方式軟件、4個(gè)內(nèi)部功能塊(UART、SIO、實(shí)時(shí)器和IIS)和外部引腳。DMA之間優(yōu)先級(jí)次序可編程。突發(fā)傳送模式提高了FPDRAM、EDODRAM和SDRAM的傳送率。支持內(nèi)存到外圍設(shè)備的fly-by模式和外圍設(shè)備到內(nèi)存的傳送模式。11.A/D轉(zhuǎn)換8通道多路ADC。最高轉(zhuǎn)換速率100kb/s/10b。10.DMA控制器2612.LCD控制器支持彩色/單色/灰度LCD。支持單掃描和雙掃描顯示。支持虛擬顯示功能。系統(tǒng)內(nèi)存可作為顯示內(nèi)存。專用DMA用于從系統(tǒng)內(nèi)存中提取圖像數(shù)據(jù)??删幊唐聊淮笮?。16級(jí)灰度。彩色模式為256色。12.LCD控制器2713.看門狗定時(shí)器16位看門狗定時(shí)器。定時(shí)中斷請(qǐng)求或系統(tǒng)超時(shí)復(fù)位。14.I2C總線接口1個(gè)基于中斷操作的多主的I2C總線。8位雙向串行數(shù)據(jù)傳送器能夠工作于100kb/s的標(biāo)準(zhǔn)模式和400kb/s的快速模式。15.IIS總線接口1路基于DMA操作的音頻IIS總線接口。每通道8/16位串行數(shù)據(jù)傳送。支持MSB可調(diào)整的數(shù)據(jù)格式。13.看門狗定時(shí)器2816.SIO(同步串行I/O)1路基于DMA或基于中斷的SIO。波特率可編程。支持8位SIO的串行數(shù)據(jù)傳送/接收操作。17.工作電壓范圍內(nèi)核:2.5V。I/O:3.0~3.6V。18.工作頻率最高達(dá)66MHz。19.封裝160LQFP/160FBGA。16.SIO(同步串行I/O)296.2.3 ARM存儲(chǔ)器在現(xiàn)代SOC設(shè)計(jì)中,為了實(shí)現(xiàn)高性能,微處理器核必須連接一個(gè)容量大、速度高的存儲(chǔ)器系統(tǒng)。如果存儲(chǔ)器容量太小,就不能存儲(chǔ)足夠大的程序來(lái)使處理器全力處理,如果速度太慢,就不能像處理器執(zhí)行指令那樣快地提供指令。但一般存儲(chǔ)器容量大,速度相對(duì)會(huì)慢。因此,設(shè)計(jì)一個(gè)足夠大又足夠快的單一存儲(chǔ)器,使高性能處理器充分發(fā)揮其能力,是有一定困難的,一般的解決方法是構(gòu)建一個(gè)復(fù)合的存儲(chǔ)器系統(tǒng),這就是普遍使用的多級(jí)存儲(chǔ)器層次的概念。6.2.3 ARM存儲(chǔ)器在30 多級(jí)存儲(chǔ)器包括一個(gè)容量小但速度快的從存儲(chǔ)器,以及一個(gè)容量大但速度慢的主存儲(chǔ)器。容量小但速度快的元件是cache,能自動(dòng)保存處理器經(jīng)常用到的指令和數(shù)據(jù)的復(fù)制。根據(jù)典型程序的實(shí)驗(yàn)統(tǒng)計(jì),這個(gè)存儲(chǔ)器系統(tǒng)的外部行為在絕大部分時(shí)間像一個(gè)既大又快的存儲(chǔ)器。2級(jí)存儲(chǔ)器原理可擴(kuò)展為多級(jí)存儲(chǔ)器層次,如cache、主存和硬盤構(gòu)成3級(jí)存儲(chǔ)層次(嵌入式系統(tǒng)目前多是2級(jí)的)。這里首先對(duì)ARM支持的存儲(chǔ)數(shù)據(jù)類型和處理器中數(shù)據(jù)存儲(chǔ)格式進(jìn)行介紹,建立起ARM處理器的存儲(chǔ)體系的概念。 多級(jí)存儲(chǔ)器包括一個(gè)容量小但速度快的從存儲(chǔ)器,以及311.存儲(chǔ)數(shù)據(jù)類型和存儲(chǔ)格式(1)數(shù)據(jù)類型ARM處理器支持以下6種數(shù)據(jù)類型(較早的ARM處理器不支持半字和有符號(hào)字節(jié)):8位有符號(hào)和無(wú)符號(hào)字節(jié)。16位有符號(hào)和無(wú)符號(hào)半字,它們以2字節(jié)的邊界對(duì)齊。32位有符號(hào)和無(wú)符號(hào)字,它們以4字節(jié)的邊界對(duì)齊。ARM指令全是32位的字,并且必須以字為單位邊界對(duì)齊。Thumb指令是16位半字,而且必須以2字節(jié)為單位邊界對(duì)齊。1.存儲(chǔ)數(shù)據(jù)類型和存儲(chǔ)格式32在內(nèi)部,所有ARM操作都面向32位的操作數(shù),只有數(shù)據(jù)傳送指令支持較短的字節(jié)和半字的數(shù)據(jù)類型。當(dāng)從存儲(chǔ)器調(diào)入一個(gè)字節(jié)或半字時(shí),根據(jù)指令對(duì)數(shù)據(jù)的操作類型,將其無(wú)符號(hào)0或有符號(hào)“符號(hào)位”擴(kuò)展為32位,進(jìn)而作為32位數(shù)據(jù)在內(nèi)部進(jìn)行處理。ARM協(xié)處理器可以支持其他數(shù)據(jù)類型,特別是定義了一些表示浮點(diǎn)數(shù)的數(shù)據(jù)類型。在ARM核內(nèi)沒有明確地支持這些數(shù)據(jù)類型,然而在沒有浮點(diǎn)協(xié)處理器的情況下,這些類型可由軟件用上述標(biāo)準(zhǔn)類型來(lái)解釋。在內(nèi)部,所有ARM操作都面向32位的操作33(2)存儲(chǔ)器組織在以字節(jié)為單位尋址的存儲(chǔ)器中有小端和大端兩種方式存儲(chǔ)字,這兩種方式是根據(jù)最低有效字節(jié)與相鄰較高有效字節(jié)相比,是存放在較低的地址還是較高的地址來(lái)劃分的。兩種存儲(chǔ)方式如圖6.4所示。小端模式:較高的有效字節(jié)存放在較高的存儲(chǔ)器地址,較低的有效字節(jié)存放在較低的存儲(chǔ)器地址。大端模式:較高的有效字節(jié)存放在較低的存儲(chǔ)器地址,較低的有效字節(jié)存放在較高的存儲(chǔ)器地址。ARM處理器能方便地配置為其中任何一種存儲(chǔ)器方式,但其默認(rèn)設(shè)置為小端模式。在本書中將采用小端模式。(2)存儲(chǔ)器組織34(a)小端存儲(chǔ)器組織圖(b)大端存儲(chǔ)器組織圖圖6.4小端和大端存儲(chǔ)器組織嵌入式最小系統(tǒng)設(shè)計(jì)課件352.存儲(chǔ)器層次簡(jiǎn)介存儲(chǔ)層次的管理由計(jì)算機(jī)硬件和操作系統(tǒng)來(lái)完成,典型的計(jì)算機(jī)存儲(chǔ)層次由多級(jí)構(gòu)成,每級(jí)都有特定的容量及速度。(1)寄存器組微處理器寄存器組可看作存儲(chǔ)器層次的頂層。典型的RISC微處理器大約有32個(gè)32位寄存器,總共128B,其訪問時(shí)間為幾ns。2.存儲(chǔ)器層次簡(jiǎn)介36(2)片上RAM如果微處理器要達(dá)到最佳性能,采用片上存儲(chǔ)器是必需的。它和片上的寄存器組具有同級(jí)的讀/寫速度。與片外存儲(chǔ)器相比,它有較好的功耗效率,并減少了電磁干擾。許多嵌入式系統(tǒng)中采用簡(jiǎn)單的片上RAM而不是cache,因?yàn)樗?jiǎn)單、便宜、功耗低。但片上RAM又不能太快(消耗太多功率)、太大(占用太多芯片面積),因?yàn)槠蟁AM和片上寄存器組具有較高的實(shí)現(xiàn)成本,所以一般片上集成RAM的容量是必須考慮的。(2)片上RAM37(3)片上cache片上cache存儲(chǔ)器的容量為8K~32KB,訪問時(shí)間大概為10ns。高性能PC機(jī)系統(tǒng)可能有第2級(jí)片外cache,其容量為幾百KB,訪問時(shí)間為幾十ns。ARMCPU芯片采用多種cache組織結(jié)構(gòu)。(4)主存儲(chǔ)器嵌入式系統(tǒng)通常沒有硬盤,主存儲(chǔ)器可以是幾MB到1GB的動(dòng)態(tài)存儲(chǔ)器,訪問時(shí)間大約為50ns。(3)片上cache386.2.4S3C44B0X存儲(chǔ)控制器在基于ARM核的嵌入式應(yīng)用系統(tǒng)中可能包含多種類型的片外存儲(chǔ)器件,如Flash、ROM、SRAM和SDRAM等,而且不同類型的存儲(chǔ)器件要求不同的速度、數(shù)據(jù)寬度等。為了對(duì)這些不同速度、類型、總線寬度的存儲(chǔ)器進(jìn)行管理,存儲(chǔ)器管理控制器是必不可少的。在基于S3C44B0X處理器的嵌入式系統(tǒng)開發(fā)中,也是通過(guò)存儲(chǔ)控制器為片外存儲(chǔ)器訪問提供必要的控制信號(hào),管理片外存儲(chǔ)部件的。1.S3C44B0X存儲(chǔ)器空間劃分圖6.5為S3C44B0X復(fù)位后的存儲(chǔ)器地址分配圖。6.2.4S3C44B0X存儲(chǔ)控制器39圖6.5S3C44B0X復(fù)位后的存儲(chǔ)器地址分配圖6.5S3C44B0X復(fù)位后的存儲(chǔ)器地址分配40從圖6.5中可以看出:特殊功能寄存器位于0x01C00000~0x02000000的4MB空間內(nèi)。Bank0~Bank5的起始地址和空間大小都是固定的。Bank6的起始地址是固定的,空間可配置為2/4/8/16/32MB。Bank7的空間大小和Bank6一樣是可變的,也可配置為2/4/8/16/32MB。Bank6和Bank7的詳細(xì)地址與空間大小的關(guān)系可參考表6.2。從圖6.5中可以看出:41嵌入式最小系統(tǒng)設(shè)計(jì)課件42嵌入式最小系統(tǒng)設(shè)計(jì)課件43嵌入式最小系統(tǒng)設(shè)計(jì)課件44嵌入式最小系統(tǒng)設(shè)計(jì)課件453.S3C44B0X存儲(chǔ)控制器的特殊功能寄存器存儲(chǔ)控制器所實(shí)現(xiàn)的功能主要是通過(guò)對(duì)其特殊功能寄存器的設(shè)置來(lái)進(jìn)行的,下面將對(duì)各特殊功能寄存器進(jìn)行介紹。
(1)總線寬度/等待控制寄存器總線寬度/等待控制寄存器(BWSCON)見表6.6。它的設(shè)置決定了Bank上的SRAM是否使用UB/LB(寫高/低字節(jié)使能)、Bank7上的SRAM存儲(chǔ)器的等待狀態(tài)、Bank7的數(shù)據(jù)總線寬度、Bank0的數(shù)據(jù)總線寬度以及存儲(chǔ)模式。3.S3C44B0X存儲(chǔ)控制器的特殊功能寄存器46嵌入式最小系統(tǒng)設(shè)計(jì)課件47
(2)Bank控制寄存器Bank控制寄存器(BANKCONn:nGCS0~nGCS5)見表6.7和表6.8。其各位的設(shè)置決定了在nGCSn有效之前地址建立時(shí)間和在nOE上芯片選擇建立時(shí)間等。注:BANKCON0地址:0x01C80004;R/W初始值:0x0700;BANKCONl地址:0x01C80008;R/W初始值:0x0700;BANKCON2地址:0x01C8000c;R/W初始值:0x0700;BANKCON3地址:0x0lC80010;R/W初始值:0x0700;BANKCON4地址:0x01C80014;R/W初始值:0x0700;BANKCON5地址:0x01C80018;R/W初始值:0x0700。(2)Bank控制寄存器48嵌入式最小系統(tǒng)設(shè)計(jì)課件49嵌入式最小系統(tǒng)設(shè)計(jì)課件50嵌入式最小系統(tǒng)設(shè)計(jì)課件51嵌入式最小系統(tǒng)設(shè)計(jì)課件52(3)DRAM/SDRAM刷新控制寄存器DRAM/SDRAM刷新控制寄存器(REFRESH)見表6.9。它的設(shè)置決定了DRAM/SDRAM刷新是否允許、刷新模式、RAS預(yù)充電時(shí)間、RAS和CAS最短時(shí)間、CAS保持時(shí)間以及刷新計(jì)數(shù)值。
(3)DRAM/SDRAM刷新控制寄存器53嵌入式最小系統(tǒng)設(shè)計(jì)課件54嵌入式最小系統(tǒng)設(shè)計(jì)課件55(5)Bank6和Bank7模式設(shè)置寄存器Bank6和Bank7模式設(shè)置寄存器(MRSR)見表6.11,它的設(shè)置主要決定Bank6和Bank7的存儲(chǔ)模式.(5)Bank6和Bank7模式設(shè)置寄存器564.S3C44B0X存儲(chǔ)器應(yīng)用編程下面給出了存儲(chǔ)器的兩個(gè)編程實(shí)例,包括存儲(chǔ)控制寄存器的配置和存儲(chǔ)器的讀/寫。通過(guò)這兩個(gè)簡(jiǎn)單的例子,可以使讀者對(duì)存儲(chǔ)器的應(yīng)用編程有一定的了解。(1)13個(gè)存儲(chǔ)控制寄存器的配置示例 13個(gè)存儲(chǔ)控制寄存器配置如下所示: ldrR0,=SMRDATA ldmiaR0,{R1-R13} ldrR0,=0x01C80000;BWSCONAddress stmiaR0,{R1-R13} SMRDATA: .long0x22221210;BWSCON .long0x00000600;GCS04.S3C44B0X存儲(chǔ)器應(yīng)用編程57 .long0x00000700;GCS1 .long0x00000700;GCS2 .long0x00000700;GCS3 .long0x00000700;GCS4 .long0x00000700;GCS5 .long0x0001002A;GCS6,EDODRAM(Trcd=3,;Tcas=2,Tcp=1,CAN=10bits) .long0x0001002A;GCS7,EDODRAM .long0x00960000+953;Reflash(REFEN=1,TREFMD=0,Trp=3,;Trc=5,Tchr=3) .long0x0;BankSize,32MB/32MB .long0x00000700;GCS158
.long0x20;MRSR6(CL=2) .long0x20;MRSR7(CL=2)觀察上面寄存器介紹中的寄存器地址可發(fā)現(xiàn),13個(gè)寄存器分布在從0x01C80000開始的連續(xù)地址空間。所以上面的程序先將各個(gè)寄存器需要配置的值從起始地址為SMRDATA的區(qū)域取出來(lái),然后利用指令“stmiaR0,{R1-R13}”實(shí)現(xiàn)將配置好的寄存器的值依次寫入到相應(yīng)的寄存器中,這就完成了存儲(chǔ)器13個(gè)控制寄存器的配置。
.long0x20;MRS59(2)存儲(chǔ)器的讀/寫代碼存儲(chǔ)器的讀/寫代碼可用匯編語(yǔ)言來(lái)編寫,也可用C語(yǔ)言來(lái)編寫,如下所示:/***************************************************************/*名稱:sRWramtest*功能:使用匯編語(yǔ)言讀/寫已初始化的RAM區(qū),即向一個(gè)存儲(chǔ)器地址寫一個(gè)字、半字、字節(jié)或者從一個(gè)存儲(chǔ)器地址處讀取一個(gè)字、半字、字節(jié),分別用相應(yīng)的LDR指令STR,這在ARM指令中有詳細(xì)介紹。****************************************************************/ sRWramtest: LDRR2,=0x0C010000 LDRR3,=0x55AA55AA STRR3,[R2]/*將一個(gè)字0x55AA55AA寫入地址0x0C010000*/ LDRR3,[R2]/*從地址0x0C010000處讀取一個(gè)字*/(2)存儲(chǔ)器的讀/寫代碼60 LDRR2,=0x0C010000 LDRBR3,[R2]/*從地址0x0C010000處讀取一個(gè)半字*/ STRBR3,[R2],#1/*地址加1后,向該地址寫入一個(gè)字節(jié)*/ /***************************************************************/ *名稱:cRWramtest *功能:使用高級(jí)語(yǔ)言C讀/寫已初始化的RAM區(qū),即向已定義的指針變量賦值或?qū)⒅羔樧兞恐蒂x給其他變量。這需要提前定義指針變量并賦值,并且也要定義相應(yīng)的普通變量。 ****************************************************************/ #defineRWram(*(unsignedlong*)0x0C010200) voidcRWramtest(void) { unsignedlong*ptr=0x0C010200; //定義一個(gè)長(zhǎng)指針并賦初值
LDRR2,=0x0C01000061 unsignedlong*ptrh=0x0C010200; //定義一個(gè)短指針并賦初值 unsignedlong*ptrb=0x0C010200; //定義一個(gè)字符指針并賦初值 unsignedchartmpd; //定義一個(gè)字符變量 unsignedchartmph; //定義一個(gè)短整型變量 unsignedchartmpb; //定義一個(gè)長(zhǎng)整型變量 *ptr=0xAA55AA55; tmpw=*ptr; //字長(zhǎng)讀 *ptr=tmpw+1; //字長(zhǎng)寫 tmph=*ptrh; //半字 *ptrh=tmph+1; //字節(jié) } unsignedlong*ptrh=0x0C0102625.S3C44B0X功能結(jié)構(gòu)框圖S3C44B0X體系結(jié)構(gòu)的功能框圖如圖6.6所示。5.S3C44B0X功能結(jié)構(gòu)框圖63第三節(jié) 系統(tǒng)硬件基本單元電路設(shè)計(jì)6.3.1電源、復(fù)位、時(shí)鐘電路和JTAG接口6.3.2Flash存儲(chǔ)器接口電路6.3.3SDRAM存儲(chǔ)器接口電路第三節(jié) 系統(tǒng)硬件基本單元電路設(shè)計(jì)6.3.1電源、復(fù)位64第三節(jié) 系統(tǒng)硬件基本單元電路設(shè)計(jì) 嵌入式系統(tǒng)的硬件是嵌入式系統(tǒng)軟件環(huán)境運(yùn)行的基礎(chǔ),它提供了軟件運(yùn)行的物理平臺(tái)和通信接口。下面介紹嵌入式硬件系統(tǒng)設(shè)計(jì)的方法。6.3.1電源、復(fù)位、時(shí)鐘電路和JTAG接口 1.電源和復(fù)位電路系統(tǒng)采用DC5V穩(wěn)壓電源進(jìn)行供電,電源輸入后經(jīng)過(guò)兩個(gè)穩(wěn)壓芯片產(chǎn)生3.3V和2.5V電壓,給MCU的I/O和ARM內(nèi)核供電,如圖6.7所示。第三節(jié) 系統(tǒng)硬件基本單元電路設(shè)計(jì) 嵌入式系統(tǒng)的硬件是嵌入65圖6.7電源原理圖圖6.7電源原理圖66 在系統(tǒng)中,復(fù)位電路主要完成系統(tǒng)的上電復(fù)位和系統(tǒng)在運(yùn)行時(shí)用戶的按鍵復(fù)位功能。復(fù)位電路可由簡(jiǎn)單的RC電路構(gòu)成,也可使用其他的相對(duì)較復(fù)雜,但功能更完善的電路。本系統(tǒng)采用較簡(jiǎn)單的RC復(fù)位電路,如圖6.8所示。該復(fù)位電路的工作原理如下:在系統(tǒng)上電時(shí),通過(guò)電阻R向電容C充電,當(dāng)C兩端的電壓未達(dá)到高電平的門限電壓時(shí),Reset端輸出為低電平,系統(tǒng)處于復(fù)位狀態(tài);當(dāng)C兩端的電壓達(dá)到高電平的門限電壓時(shí),Reset端輸出為高電平,系統(tǒng)進(jìn)入正常工作狀態(tài)。 在系統(tǒng)中,復(fù)位電路主要完成系統(tǒng)的上電復(fù)位和67圖6.8時(shí)鐘與復(fù)位圖6.8時(shí)鐘與復(fù)位68
當(dāng)用戶按下按鈕S時(shí),C兩端的電荷被泄放掉,Reset端輸出為低電平,系統(tǒng)進(jìn)入復(fù)位狀態(tài),再重復(fù)以上的充電過(guò)程,系統(tǒng)進(jìn)入正常工作狀態(tài)。兩級(jí)非門電路用于按鈕去抖動(dòng)和波形整形;通過(guò)調(diào)整R和C的參數(shù),可調(diào)整復(fù)位狀態(tài)的時(shí)間。
692.晶振電路晶振電路用于向CPU及其他電路提供工作時(shí)鐘,S3C44B0X的時(shí)鐘源來(lái)自晶振,也可以是外部時(shí)鐘。S3C44B0X的內(nèi)部時(shí)鐘發(fā)生器可產(chǎn)生CPU和外設(shè)所需要的時(shí)鐘信號(hào)。時(shí)鐘發(fā)生器有一個(gè)振蕩器連接到外部的晶體上,同時(shí)片內(nèi)的PLL電路把低頻振蕩器的輸出作為自己的輸入,產(chǎn)生S3C44B0X所需要的高頻信號(hào),因此,系統(tǒng)可以較低的外部時(shí)鐘信號(hào)獲得較高的工作頻率,以降低因高速開關(guān)時(shí)鐘所造成的高頻噪聲。實(shí)時(shí)時(shí)鐘通過(guò)MCU外接8mHn晶振和工作供電電路來(lái)實(shí)現(xiàn),如圖6.8所示。輸出的時(shí)鐘頻率fpllo和輸入的參考時(shí)鐘頻率fin的關(guān)系式為: fpllo=(m×fin)/(p×2s)m=
M(分頻器M的分頻值)+8p=p(分頻器p的分頻值)+22.晶振電路703.JTAG接口 JTAG(JointTestActionGroup,聯(lián)合測(cè)試行動(dòng)小組)是一種國(guó)際標(biāo)準(zhǔn)測(cè)試協(xié)議,主要用于芯片內(nèi)部測(cè)試及對(duì)系統(tǒng)進(jìn)行仿真、調(diào)試,JTAG技術(shù)是一種嵌入式調(diào)試技術(shù),它在芯片內(nèi)部封裝了專門的測(cè)試電路TAP(testaccessport,測(cè)試訪問口),通過(guò)專用的JTAG測(cè)試工具對(duì)內(nèi)部節(jié)點(diǎn)進(jìn)行測(cè)試。目前大多數(shù)比較復(fù)雜的器件都支持JTAG協(xié)議,如ARM、DSP和FPGA器件等。標(biāo)準(zhǔn)的JTAG接口是4線:TMS、TCK、TDI和TDO,分別為測(cè)試模式選擇、測(cè)試時(shí)鐘、測(cè)試數(shù)據(jù)輸入和測(cè)試數(shù)據(jù)輸出,關(guān)于JTAG的詳細(xì)內(nèi)容參見第9章。3.JTAG接口716.3.2Flash存儲(chǔ)器接口電路 這里以EmbestS3CV40開發(fā)板存儲(chǔ)系統(tǒng)為例,介紹Flash存儲(chǔ)器接口電路。如圖6.9所示,電路采用一片1M×16位的Flash(SST39VFl60),F(xiàn)lashROM采用標(biāo)準(zhǔn)總線接口與處理器交互,處理器通過(guò)片選nGCS0與片外Flash芯片連接。由于是16位的Flash,所以用CPU的地址線A1~A20來(lái)分別與F1ash的地址線A0~A19連接。F1ash的地址空間為0x00000000~0x00200000。FlashROM的數(shù)據(jù)接口為DQl5~0,因此,數(shù)據(jù)寬度是16位。又注意到處理器的ADDR20~1對(duì)應(yīng)著FlashROM的A19~0,偏移了1位,這是由于S3C44B0X是按照字節(jié)編址的,而FlashROM是以16位為一個(gè)存儲(chǔ)單元,因此,處理器的地址“左移”1位,采用ADDRl與FlashROM的A0相連。由于FlashROM映射在處理器的Bank0區(qū)域內(nèi),因此,它的片選線與處理器的nGCS0相連。6.3.2Flash存儲(chǔ)器接口電路 這里以Emb726.3.3SDRAM存儲(chǔ)器接口電路 與Flash存儲(chǔ)器相比較,SDRAM不具有掉電保持?jǐn)?shù)據(jù)的特性,但其存取速度大大高于Flash存儲(chǔ)器,且具有讀/寫的屬性,因此,SDRAM在系統(tǒng)中主要用作程序的運(yùn)行空間,數(shù)據(jù)及堆棧區(qū)。當(dāng)系統(tǒng)啟動(dòng)時(shí),CPU首先從復(fù)位地址0x0處讀取啟動(dòng)代碼,在完成系統(tǒng)的初始化后,程序代碼一般應(yīng)調(diào)入SDRAM中運(yùn)行,以提高系統(tǒng)的運(yùn)行速度,同時(shí),系統(tǒng)及用戶堆棧、運(yùn)行數(shù)據(jù)也都放在SDRAM中。 如圖6.10所示,SDRAM分成4個(gè)Bank,每個(gè)Bank的容量為1M×16位。Bank的地址由BAl、BA0決定,00對(duì)應(yīng)Bank0,01對(duì)應(yīng)Bankl,10對(duì)應(yīng)Bank2,11對(duì)應(yīng)Bank3。在每個(gè)Bank中,分別用行地址脈沖選通RAS和列地址脈沖選通CAS進(jìn)行尋址。系統(tǒng)為用戶提供設(shè)置跳線,作為升級(jí)SDRAM內(nèi)存容量可至4×2M×16位。具體方法是使SDRAM的BA0、BAl分別接至CPU的A21、A22、A23腳。SDRAM由MCU專用SDRAM片選信號(hào)nSCS0選通,地址空間為0x0C000000~0x0C7FFFFF。
6.3.3SDRAM存儲(chǔ)器接口電路 與Flash73圖6.9SST39VF160與S3C44B0X的接口電路圖6.10SDRAM連接電路圖6.9SST39VF160與S3C44B0X的接口電路74第四節(jié) S3C44B0X啟動(dòng)程序設(shè)計(jì)6.4.1BootLoader介紹6.4.2啟動(dòng)程序設(shè)計(jì)實(shí)例第四節(jié) S3C44B0X啟動(dòng)程序設(shè)計(jì)75第四節(jié) S3C44B0X啟動(dòng)程序設(shè)計(jì)6.4.1BootLoader介紹BootLoader是系統(tǒng)加電后運(yùn)行的第一段軟件代碼。在PC體系結(jié)構(gòu)中,PC機(jī)的引導(dǎo)加載程序由BIOS和位于硬盤MBR中的引導(dǎo)程序一起組成。BIOS在完成硬件檢測(cè)和資源分配后,將硬盤MBR中的引導(dǎo)程序讀到系統(tǒng)的RAM中,然后將控制權(quán)交給引導(dǎo)程序。引導(dǎo)程序的主要任務(wù)就是將內(nèi)核映像從硬盤上讀到RAM中,然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行,即開始啟動(dòng)操作系統(tǒng)。而在嵌入式系統(tǒng)中,通常沒有像BIOS那樣的固件程序,因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由BootLoader完成。
第四節(jié) S3C44B0X啟動(dòng)程序設(shè)計(jì)6.4.1Bo76
在嵌入式系統(tǒng)中,BootLoader的作用與PC機(jī)上的BIOS類似,通過(guò)BootLoader可以完成對(duì)系統(tǒng)板上的主要部件如CPU、SDRAM、Flash和串行口等進(jìn)行初始化,也可以下載文件到系統(tǒng)板、對(duì)Flash進(jìn)行擦除與編程。BootLoader在操作系統(tǒng)內(nèi)核運(yùn)行之前,可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備正確的環(huán)境。通常,BootLoader是緊密圍繞系統(tǒng)硬件對(duì)系統(tǒng)進(jìn)行初始化的,根據(jù)實(shí)現(xiàn)的功能不同,其復(fù)雜程度也各不相同。一個(gè)簡(jiǎn)單的BootLoader程序可以僅完成串行口的初始化,并進(jìn)行通信,而功能完善的BootLoader可以支持比較復(fù)雜的命令集,對(duì)系統(tǒng)的軟硬件資源進(jìn)行合理的配置與管理。在嵌入式系統(tǒng)中,BootLoader776.4.2啟動(dòng)程序設(shè)計(jì)實(shí)例這里以EmbestS3CV40開發(fā)板為例,介紹S3C44B0X啟動(dòng)程序設(shè)計(jì)。S3C44B0X沒有存儲(chǔ)區(qū)重映射功能,所有存儲(chǔ)區(qū)地址固定,S3C44B0X提供矢量中斷功能,減少了中斷延遲。因此在S3C44B0X的啟動(dòng)程序中,矢量中斷功能的出現(xiàn)導(dǎo)致擴(kuò)展了向量表,同時(shí)為方便程序設(shè)計(jì)和在RAM中調(diào)試,中斷入口通過(guò)地址定義方式轉(zhuǎn)移到RAM區(qū)的最高端。6.4.2啟動(dòng)程序設(shè)計(jì)實(shí)例這里以Emb781.命令腳本在進(jìn)行集成環(huán)境與目標(biāo)連接時(shí)、軟件調(diào)試過(guò)程中以及復(fù)位目標(biāo)板后,有時(shí)需要集成環(huán)境自動(dòng)完成一些特定的功能,比如復(fù)位目標(biāo)板、清除看門狗、屏蔽中斷寄存器和存儲(chǔ)區(qū)映射等,這些特定的功能可以通過(guò)執(zhí)行一組命令序列完成,保存一組命令序列的文本文件稱為命令腳本文件(commandscriptsfile*.cs)。開發(fā)板的命令腳本文件ev40boot.cs源代碼如下,具體功能的實(shí)現(xiàn)需要仔細(xì)分析。reset ;resetboardmemwrite0x01D300000x00000000 ;watchdog timercontrolRegister,1.命令腳本79 ;disablewatchdogmemwrite0x01E0000C0x07ffffff ;INTMSK(disableallinterrupt)memwrite0x01E000240xffffffff ;clearallinterruptmemwrite0x01C800000x11110102 ;BWSCONmemwrite0x01C800040x00000600 ;BANKCON0memwrite0x01C800080x00007FFC ;BANKCON1memwrite0x01C8000C0x00007FFC ;BANKCON2memwrite0x01C800100x00007FFC ;BANKCON3memwrite0x01C800140x00007FFC ;BANKCON4memwrite0x01C800180x00007FFC ;BANKCON5memwrite0x01C8001C0x00018000 ;BANKCON6memwrite0x01C800200x00018000 ;BANKCON7memwrite0x01C800240x00860459 ;REFRESH ;disablewatchdog80memwrite0x01C800280x00000010 ;BANKSIZEmemwrite0x01C8002C0x00000020 ;MRSRB6memwrite0x01C800300x00000020 ;MRSRB72.鏈接腳本在系統(tǒng)級(jí)別的嵌入式開發(fā)中需要使用鏈接定位文件,該文件描述代碼鏈接定位的有關(guān)信息,包括代碼段,數(shù)據(jù)段和地址段等,鏈接器必須使用該文件對(duì)整個(gè)系統(tǒng)的代碼做正確的定位,該文件稱為鏈接腳本文件(linkerscriptsfile*.ld)。 Flash固化時(shí)使用的鏈接腳本文件為:SECTIONS{ .=0x00000000;memwrite0x01C800280x0000001081 Image_RO_Base=.; .text:{*(.text)} .rodata:{*(.rodata)} Image_RO_Limit=.; .=0x0C000000; Image_RW_Base=.; .data:{*(.data)} Image_RW_Limit=.; Image_ZI_Base=.; .bss:{*(.bss)} Image_ZI_Limit=.; __bss_start__=.; __bss_end__=.; Image_RO_Base=.;82 __EH_FRAME_BEGIN__=.; __EH_FRAME_END__=.; PROVIDE(__stack=.); end=.; _end=.; .debug_info0:{*(.debug_info)} .debug_line 0:{*(.debug_line)} .debug_abbrev0:{*(.debug_abbrev)} .debug_frame0:{*(.debug_frame)} } __EH_FRAME_BEGIN__=.;83RAM調(diào)試時(shí)使用的鏈接腳本文件為:SECTIONS{ .=0x0C000000; Image_RO_Base=.; .text:{*(.text)} Image_RO_Limit=.; Image_RW_Base=.; .data:{*(.data)} .rodata:{*(.rodata)} Image_RW_Limit=.; Image_ZI_Base=.; .bss:{*(.bss)}RAM調(diào)試時(shí)使用的鏈接腳本文件為:84 Image_ZI_Limit=.; __bss_start__=.; __bss_end__=.; __EH_FRAME_BEGIN__=.; __EH_FRAME_END__=.; PROVIDE(__stack=.); end=.; _end=.; .debug_info0:{*(.debug_info)} .debug_line 0:{*(.debug_line)} .debug_abbrev0:{*(.debug_abbrev)} .debug_frame0:{*(.debug_frame)} } Image_ZI_Limit=.;853.S3C44B0X的啟動(dòng)程序源代碼部分相似的中斷入口定義和函數(shù)宏定義被省略,省略部分以“……”代替并加了注釋,讀者在使用這些源代碼作為啟動(dòng)程序時(shí),可以自行添加省略部分來(lái)修改程序。 #************************************************************ #文件名:44BINIT.S * #說(shuō)明:S3C44B0X啟動(dòng)文件 * #************************************************************ #************************************************************ #寄存器定義及其位定義 #************************************************************3.S3C44B0X的啟動(dòng)程序源代碼86 .equINTMSK,0x01e0000c .equWTCON,0x01d30000 .equCLKCON,0x01d80004 .equLOCKTIME,0x01d8000c .equFIQMODE,0x11 .equIRQMODE,0x12 .equSVCMODE,0x13 .equABORTMODE,0x17 .equUNDEFMODE,0x1b .equMODEMASK,0x1f .equNOINT,0xc0 .equCPSR_IRQ_EN,0x80 .equINTMSK,0x01e0000c87#************************************************************#中斷處理宏#************************************************************ .macroHANDLERHandleLabel subsp,sp,#4//??臻g遞減保存跳轉(zhuǎn)地址 stmfdsp!,{r0}//保存工作寄存器r0到棧 ldrr0,=\HandleLabel//載入中斷入口地址所在 位置到r0 ldrr0,[r0]//載入中斷入口地址到r0 strr0,[sp,#4] //保 存中斷入口地址到棧 ldmfdsp!,{r0,pc} //恢復(fù)工作 寄存器并跳轉(zhuǎn)到中斷函數(shù) .endm#************************************************************#設(shè)置ARM7中斷和異常向量#****************************88#***********************************************************ENTRY:bResetHandler //S3C44B0X復(fù)位后從此處執(zhí)行bHandlerUndef //未定義異常向量bHandlerSWI //軟中斷向量bHandlerPabort //取指異常向量bHandlerDabort //取數(shù)據(jù)異常向量b. //保留bHandlerIRQ //中斷向量bHandlerFIQ //快速中斷向量#**********************************************************#*****************************89#設(shè)置44B0中斷向量表#************************************************************ VECTOR_BRANCH: ldrpc,=HandlerEINT0 //mGA H/Winterruptvectortable ldrpc,=HandlerEINT1 …… //省略 ldrpc,=HandlerADC //mGKB …… //省略b.#************************************************************#設(shè)置44B0中斷向量表90#中斷向量處理宏#************************************************************ HandlerFIQ:HANDLERHandleFIQ HandlerIRQ:HANDLERHandleIRQ HandlerUndef:HANDLERHandleUndef HandlerSWI:HANDLERHandleSWI HandlerDabort:HANDLERHandleDabort HandlerPabort:HANDLERHandlePabort HandlerADC:HANDLERHandleADC ……//省略 HandlerEINT1:HANDLERHandleEINT1 HandlerEINT0:HANDLERHandleEINT0#************************************************************#中斷向量處理宏91#中斷向量處理宏#************************************************************ ResetHandler:ldrr0,=WTCON //看門狗禁止 ldrr1,=0x0strr1,[r0] ldrr0,=INTMSKldrr1,=0x07ffffff //所有中斷禁止 strr1,[r0]#************************************************************#設(shè)置時(shí)鐘控制控制器#************************************************************ ldrr0,=LOCKTIME ldrr1,=0xfffstrr1,[r0] ldrr0,=CLKCONldrr1,=0x7ff8//所有模塊的時(shí)鐘開啟 strr1,[r0]#中斷向量處理宏92#************************************************************#設(shè)置存儲(chǔ)區(qū)控制器#************************************************************ ldrr0,=SMRDATA ldmiar0,{r1-r13} ldrr0,=0x01c80000 stmiar0,{r1-r13}#************************************************************#初始化??臻g#************************************************************ ldrsp,=SVCStack //切換到超級(jí)用戶??臻g blInitStacks#****************************93#************************************************************#引入外部符號(hào),符號(hào)定義在鏈接腳本文件中#************************************************************ .externImage_RO_Limit //只讀區(qū)域大小 .externImage_RW_Base //可讀寫存儲(chǔ)區(qū)域起始地址 .externImage_ZI_Base //清零區(qū)域起始地址 .externImage_ZI_Limit //清零區(qū)域大小#************************************************************#初始化C代碼需要使用的存儲(chǔ)區(qū)#************************************************************ LDRr0,=Image_RO_Limit //獲取只讀區(qū)域大小 LDRr1,=Image_RW_Base //獲取可讀寫區(qū)域起始地址 LDRr3,=Image_ZI_Base //獲取清零區(qū)域起始地址#****************************94 CMPr0,r1 //比較只讀區(qū)域和可讀寫區(qū)域是否重疊 BEQLOOP1 LOOP0:CMPr1,r3 //復(fù)制程序中.data數(shù)據(jù)段內(nèi) 容到讀寫區(qū)域 LDRCCr2,[r0],#4 STRCCr2,[r1],#4 BCCLOOP0 LOOP1:LDRr1,=Image_ZI_Limit //從清零區(qū)域 頂部開始 MOVr2,#0 LOOP2:CMPr3,r1 //清零 STRCCr2,[r3],#4 BCCLOOP2 CMPr0,r1 //比較只讀區(qū)域和可讀寫區(qū)域是否95#************************************************************#全能IRQ中斷(I位)#************************************************************ MRSr0,CPSR BICr0,r0,#CPSR_IRQ_EN/*IRQenable*/ MSRCPSR_cxsf,r0#************************************************************#進(jìn)入C語(yǔ)言程序入口#************************************************************ .extern__main BL__main#************************************************************#初始化??臻g的函數(shù)#************************************************************ InitStacks:#****************************96 mrsr0,cpsr bicr0,r0,#MODEMASK orrr1,r0,#UNDEFMODE|NOINT msrcpsr_cxsf,r1 ldrsp,=UndefStack //設(shè)置未定義異常??臻g orrr1,r0,#ABORTMODE|NOINT msrcpsr_cxsf,r1 ldrsp,=AbortStack //設(shè)置異常??臻g orrr1,r0,#IRQMODE|NOINT msrcpsr_cxsf,r1 ldrsp,=IRQStack //設(shè)置中斷棧空間 orrr1,r0,#FIQMODE|NOINT msrcpsr_cxsf,r1 ldrsp,=FIQStack //設(shè)置快速中斷??臻g bicr0,r0,#MODEMASK|NOINT mrsr0,cpsr97 orrr1,r0,#SVCMODE msrcpsr_cxsf,r1 ldrsp,=SVCStack //設(shè)置超級(jí)用戶??臻g movpc,lr //函數(shù)返回#************************************************************#存儲(chǔ)區(qū)相關(guān)寄存器設(shè)置值#************************************************************ SMRDATA:.long0x11110101 //存儲(chǔ)區(qū)訪問寬度控 制寄存器 .long0x00000600 //BANK0控制寄存器 .long0x00007FFC //BANK1控制寄存器 .long0x00007FFC //BANK2控制寄存器 .long0x00007FFC //BANK3控制寄存器 .long0x00007FFC //BANK4控制寄存器 .long0x00007FFC //BANK5控制寄存器 orrr1,r0,#SVCMODE98 .long0x00018000 //BANK6控制寄存器 .long0x00018000 //BANK7控制寄存器 .long0x00860459 //SDRAM刷新控制寄存器 .long0x10 //SDRAM存儲(chǔ)區(qū)大小 .long0x20 //BANK6SDRAM模式寄存器 .long0x20 //BANK7SDRAM模式寄存器 .equSTARTADDRESS,0xc7fff00#************************************************************#棧空間定義#************************************************************ .equUserStack,STARTADDRESS-0x500 //c1(c7)ffa00 .equSVCStack,STARTADDRESS-0x500+256 //c1(c7)ffb00 .equUndefStack,STARTADDRESS-0x500+256*2 //c1(c7)ffc00 .long0x00018000 //BANK6控制99 .equAbortStack,STARTADDRESS-0x500+256*3 //c1(c7)ffd00 .equIRQStack,STARTADDRESS-0x500+256*4 //c1(c7)ffe00 .equFIQStack,STARTADDRESS-0x500+256*5 //c1(c7)fff00#********************************************************#ARM中斷向量入口定義#******************************************************** .equHandleReset,STARTADDRESS .equHandleUndef,STARTADDRESS+4 .equHandleSWI,STARTADDRESS+4*2 .equHandlePabort,STARTADDRESS+4*3 .equHandleDabort,STARTADDRESS+4*4 .equAbortStack,STARTADDRESS100 .equHandleReserved,STARTADDRESS+4*5 .equHandleIRQ,STARTADDRESS+4*6 .equHandleFIQ,STARTADDRESS+4*7#************************************************************#S3C44B0X中斷向量入口定義#************************************************************ .equHandleADC,STARTADDRESS+4*8 …… //省略 .equHandleEINT4567,STARTADDRESS+4*29 .equHandleEINT3,STARTADDRESS+4*30 .equHandleEINT2,STARTADDRESS+4*31 .equHandleEINT1,STARTADDRESS+4*32 .equHandleEINT0,STARTADDRESS+4*33 //0xc1(c7)fff8 .equHandleReserved,STARTADD101本章要點(diǎn)嵌入式應(yīng)用系統(tǒng)的設(shè)計(jì)包含硬件系統(tǒng)設(shè)計(jì)和軟件系統(tǒng)設(shè)計(jì)兩個(gè)部分,這兩部分的設(shè)計(jì)是互相關(guān)聯(lián)的。一個(gè)基于ARM的嵌入式系統(tǒng)通常包含以下的硬件組成部分:集成在芯片上的ARM處理器,通過(guò)存儲(chǔ)器映射地址的寄存器來(lái)訪問的外設(shè),一種被稱為控制器的特殊類型外設(shè),使嵌入式系統(tǒng)可實(shí)現(xiàn)諸如存儲(chǔ)器管理和中斷控制等高層功能,片內(nèi)的總線把處理器和外設(shè)連接在一起。在嵌入式系統(tǒng)中,BootLoader是系統(tǒng)加電后運(yùn)行的第一段軟件代碼,通過(guò)BootLoader可以完成對(duì)系統(tǒng)板上的主要部件進(jìn)行初始化,將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài)。根據(jù)實(shí)現(xiàn)的功能不同,其復(fù)雜程度也不相同。通過(guò)本章的學(xué)習(xí),可以掌握設(shè)計(jì)嵌入式最小系統(tǒng)的方法。本章要點(diǎn)嵌入式應(yīng)用系統(tǒng)的設(shè)計(jì)包含硬件系統(tǒng)設(shè)計(jì)和軟件系統(tǒng)102習(xí)題1.簡(jiǎn)述S3C44B0X最小系統(tǒng)應(yīng)包括哪些部分?2.S3C44B0X可使用的外部晶振頻率范圍是多少(使用/不使用PLL功能時(shí))?3.計(jì)算PLL設(shè)置值:設(shè)一個(gè)基于S3C44B0X的系統(tǒng)使用的晶振為11.0592MHz石英晶振,計(jì)算出最大的系統(tǒng)時(shí)鐘頻率為多少M(fèi)Hz?此時(shí)PLL的M值和P值為多少?習(xí)題1.簡(jiǎn)述S3C44B0X最小系統(tǒng)應(yīng)包括哪些部分103第6章嵌入式最小系統(tǒng)設(shè)計(jì)第一節(jié) 系統(tǒng)設(shè)計(jì)概述第二節(jié) S3C44B0X概述第三節(jié) 系統(tǒng)硬件基本單元電路設(shè)計(jì)第四節(jié) S3C44B0X啟動(dòng)程序設(shè)計(jì)第6章嵌入式最小系統(tǒng)設(shè)計(jì)第一節(jié) 系統(tǒng)設(shè)計(jì)概述104第一節(jié) 系統(tǒng)設(shè)計(jì)概述 圖6.1為嵌入式最小系統(tǒng)原理框圖,如圖中所示一個(gè)嵌入式控制器自己是不能獨(dú)立工作的,必須給它提供電源,加上時(shí)鐘信號(hào)、復(fù)位信號(hào),如果芯片沒有片內(nèi)程序存儲(chǔ)器,則還要加上存儲(chǔ)器系統(tǒng),然后嵌入式控制器才可能工作。其中存儲(chǔ)器系統(tǒng)是可選的,這是因?yàn)楹芏嗝嫦蚯度胧筋I(lǐng)域的嵌入式微控制器內(nèi)部設(shè)計(jì)了程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器。這些提供嵌入式控制器運(yùn)行所必須條件的電路與嵌入式控制器共同構(gòu)成了嵌入式的最小系統(tǒng)。而大多數(shù)基于ARM7處理器核的微控制器都有調(diào)試接口,這部分在芯片實(shí)際工作時(shí)不是必需的,但在開發(fā)時(shí)很重要,所以把這部分也歸入最小系統(tǒng)中。
第一節(jié) 系統(tǒng)設(shè)計(jì)概述 圖6.1為嵌入式最小系105圖6.1最小系統(tǒng)原理框圖嵌入式控制器時(shí)鐘系統(tǒng)調(diào)試測(cè)試接口復(fù)位及其配置系統(tǒng)存儲(chǔ)器系統(tǒng)供電系統(tǒng)(電源)嵌入式控制器時(shí)鐘系統(tǒng)調(diào)試測(cè)試接口復(fù)位及其存儲(chǔ)器系統(tǒng)供電系統(tǒng)106
圖6.2是一個(gè)典型的嵌入式系統(tǒng)硬件結(jié)構(gòu)框圖,部分基本功能描述如下:圖6.2是一個(gè)典型的嵌入式系統(tǒng)硬件結(jié)構(gòu)框圖,107復(fù)位電路可完成系統(tǒng)上電復(fù)位和在系統(tǒng)工作時(shí)用戶按鍵復(fù)位。電源電路為S3C44B0X及其他需要3.3V電源的外圍電路供電。晶振為系統(tǒng)提供工作時(shí)鐘,通過(guò)片內(nèi)PLL(時(shí)鐘發(fā)生器)電路倍頻作為微處理器的工作時(shí)鐘。Flash存儲(chǔ)器可存放已調(diào)試好的用戶應(yīng)用程序、嵌入式操作系統(tǒng)或其他在系統(tǒng)掉電后需要保存的用戶數(shù)據(jù)等。SDRAM存儲(chǔ)器作為系統(tǒng)運(yùn)行時(shí)的主要區(qū)域,系統(tǒng)及用戶數(shù)據(jù)、堆棧均位于SDRAM存儲(chǔ)器中。復(fù)位電路可完成系統(tǒng)上電復(fù)位和在系統(tǒng)工作時(shí)用戶按鍵復(fù)位。108JTAG接口可對(duì)芯片內(nèi)部的所有部件進(jìn)行訪問,通過(guò)該接口可對(duì)系統(tǒng)進(jìn)行調(diào)試、編程等。系統(tǒng)總線擴(kuò)展引出了數(shù)據(jù)總線、地址總線和必需的控制總線,便于用戶根據(jù)自身的特定要求擴(kuò)展外圍電路。串行接口電路用于系統(tǒng)與其他應(yīng)用系統(tǒng)的短距離雙向串行通信。10M以太網(wǎng)接口為系統(tǒng)提供以太網(wǎng)接入的物理通道,通過(guò)該接口,系統(tǒng)可以10Mb/s的速率接入以太網(wǎng)。JTAG接口可對(duì)芯片內(nèi)部的所有部件進(jìn)行訪問,通過(guò)該接口可對(duì)系109第二節(jié) S3C44B0X概述6.2.1S3C44B0X引腳及信號(hào)描述6.2.2S3C44B0X特性6.2.3 ARM存儲(chǔ)器6.2.4 S3C44B0X存儲(chǔ)控制器第二節(jié) S3C44B0X概述6.2.1S3C44B0110第二節(jié) S3C44B0X概述S3C44B0X微處理器是三星公司生產(chǎn)的基于ARM7TDMI核的微處理器,采用0.25μmCMOS工藝制造,并在ARM7TDMI核基本功能的基礎(chǔ)上集成了豐富的外圍功能模塊,便于低成本設(shè)計(jì)嵌入式應(yīng)用系統(tǒng)。片上集成的主要功能如下:在ARM7TDMI基礎(chǔ)上增加8KB的cache。外部擴(kuò)充存儲(chǔ)器控制器(FP/EDO/SDRAM控制,片選邏輯)。LCD控制器(最大支持256色的DSTN),并帶有1個(gè)LCD專用DMA通道。第二節(jié) S3C44B0X概述S3C44B1112個(gè)通用DMA通道/2個(gè)帶外部請(qǐng)求引腳的DMA通道。2個(gè)帶有握手協(xié)議的UART和1個(gè)SIO。1個(gè)多主的I2C總線控制器。1個(gè)IIS總線控制器。5個(gè)PWM定時(shí)器及1個(gè)內(nèi)部定時(shí)器??撮T狗定時(shí)器。71個(gè)通用可編程I/O口,8個(gè)外部中斷源。功耗控制模式是正常、低、休眠和停止。8路10位ADC。具有日歷功能的RTC(實(shí)時(shí)時(shí)鐘)。PLL時(shí)鐘發(fā)生器。2個(gè)通用DMA通道/2個(gè)帶外部請(qǐng)求引腳的DMA通道。1126.2.1S3C44B0X引腳及信號(hào)描述S3C44B0X引腳如圖6.3所示。6.2.1S3C44B0X引腳及信號(hào)描述S3C44113S3C44B0X引腳信號(hào)的詳細(xì)描述見表6.1。表6.1S3C44B0X引腳信號(hào)詳細(xì)描述嵌入式最小系統(tǒng)設(shè)計(jì)課件114嵌入式最小系統(tǒng)設(shè)計(jì)課件115嵌入式最小系統(tǒng)設(shè)計(jì)課件116嵌入式最小系統(tǒng)設(shè)計(jì)課件117嵌入式最小系統(tǒng)設(shè)計(jì)課件118嵌入式最小系統(tǒng)設(shè)計(jì)課件119嵌入式最小系統(tǒng)設(shè)計(jì)課件120嵌入式最小系統(tǒng)設(shè)計(jì)課件1216.2.2S3C44B0X特性1.體系結(jié)構(gòu)集成了手持設(shè)備和通用嵌入式系統(tǒng)應(yīng)用的解決方案。16/32位RISC體系結(jié)構(gòu)和ARM7TDMI處理器內(nèi)核強(qiáng)大的指令體系。Thumb代碼壓縮機(jī),最大代碼密度同時(shí)保持了32位指令的性能。基于JTAG的片上集成ICE調(diào)試支持解決方案。32×8的硬件乘法器。實(shí)現(xiàn)低功耗SAMBAII(三星ARM處理器嵌入式微控制器總線體系結(jié)構(gòu))的新型總線結(jié)構(gòu)。6.2.2S3C44B0X特性1.體系結(jié)構(gòu)1222.系統(tǒng)管理器支持大、小端模式(通過(guò)外部引腳來(lái)選擇)。包含8個(gè)地址空間,每個(gè)地址空間為32MB,總共有256MB。所有地址空間都可以通過(guò)編程設(shè)置為8位、16位或32位寬數(shù)據(jù)對(duì)齊訪問。8個(gè)地址空間中,6個(gè)地址空間可用于ROM、SRAM等存儲(chǔ)器,2個(gè)用于ROM、
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國(guó)推進(jìn)器控制系統(tǒng)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球IO-Link信號(hào)燈行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025建筑施工勞務(wù)勞動(dòng)合同內(nèi)、外墻保溫
- 臨時(shí)急需資金借款合同
- 提高數(shù)據(jù)可視化技能的技能培訓(xùn)
- 技術(shù)服務(wù)合同經(jīng)典
- 提高團(tuán)隊(duì)領(lǐng)導(dǎo)力的培訓(xùn)方法
- 委托國(guó)際貿(mào)易傭金合同書
- 零配件采購(gòu)合同
- 石材大板購(gòu)銷合同
- (正式版)CB∕T 4552-2024 船舶行業(yè)企業(yè)安全生產(chǎn)文件編制和管理規(guī)定
- 病案管理質(zhì)量控制指標(biāo)檢查要點(diǎn)
- 2024年西藏中考物理模擬試題及參考答案
- 九型人格與領(lǐng)導(dǎo)力講義
- 藥品經(jīng)營(yíng)和使用質(zhì)量監(jiān)督管理辦法培訓(xùn)試題及答案2023年9月27日國(guó)家市場(chǎng)監(jiān)督管理總局令第84號(hào)公布
- 人教版五年級(jí)上冊(cè)數(shù)學(xué)脫式計(jì)算練習(xí)200題及答案
- 卵巢黃體囊腫破裂教學(xué)查房
- 醫(yī)院定崗定編
- 計(jì)算機(jī)網(wǎng)絡(luò)畢業(yè)論文3000字
- 2023年大學(xué)物理化學(xué)實(shí)驗(yàn)報(bào)告化學(xué)電池溫度系數(shù)的測(cè)定
- 腦出血的護(hù)理課件腦出血護(hù)理查房PPT
評(píng)論
0/150
提交評(píng)論