第6章 部件工作原理與編程示例(1)_第1頁(yè)
第6章 部件工作原理與編程示例(1)_第2頁(yè)
第6章 部件工作原理與編程示例(1)_第3頁(yè)
第6章 部件工作原理與編程示例(1)_第4頁(yè)
第6章 部件工作原理與編程示例(1)_第5頁(yè)
已閱讀5頁(yè),還剩60頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第 6章 部件工作原理與編程示例 (1本章主要以 S3C4510B 的幾個(gè)常用功能部件為編程對(duì)象,介紹基于 S3C4510B 的系統(tǒng)的程序 設(shè)計(jì)與調(diào)試,同時(shí)簡(jiǎn)介 BootLoader 的基本原理和編程方法,通過(guò)對(duì)本章的閱讀,可以使讀者了 解 S3C4510B 各功能部件的工作原理及基本編程方法。本章的主要內(nèi)容包括:-嵌入式系統(tǒng)應(yīng)用程序設(shè)計(jì)的基本方法。-S3C4510B 通用 I/O口的工作原理與編程示例。-S3C4510B 串行通信控制器的工作原理與編程示例。-S3C4510B 中斷控制器的工作原理與編程示例。-S3C4510B 定時(shí)器的工作原理與編程示例。-S3C4510B DMA控制器的工

2、作原理與編程示例。-S3C4510B IIC總線控制器的工作原理。-S3C4510B 以太網(wǎng)控制器的工作原理。-Flash 存儲(chǔ)器的工作原理與編程示例。-BootLoader 簡(jiǎn)介6.1 嵌入式系統(tǒng)的程序設(shè)計(jì)方法一般說(shuō)來(lái), 對(duì)于一個(gè)完整的嵌入式應(yīng)用系統(tǒng)的開發(fā), 硬件的設(shè)計(jì)與調(diào)試工作僅占整個(gè)工作量的一 半, 應(yīng)用系統(tǒng)的程序設(shè)計(jì)也是嵌入式系統(tǒng)設(shè)計(jì)一個(gè)非常重要的方面, 程序的質(zhì)量直接影響整個(gè)系 統(tǒng)功能的實(shí)現(xiàn),好的程序設(shè)計(jì)可以克服系統(tǒng)硬件設(shè)計(jì)的不足,提高應(yīng)用系統(tǒng)的性能, 反之, 會(huì)使 整個(gè)應(yīng)用系統(tǒng)無(wú)法正常工作。本章從應(yīng)用的角度出發(fā),以 S3C4510B 的各個(gè)功能模塊為編程對(duì)象,介紹一些實(shí)用的程序段,

3、讀 者既可按自己的需要修改, 也可吸收其設(shè)計(jì)思想和方法, 以便設(shè)計(jì)出適合于自己特定應(yīng)用系統(tǒng)的 實(shí)用程序。 同時(shí), 由于 ARM 體系結(jié)構(gòu)的一致性, 盡管以下的應(yīng)用程序段是針對(duì)特定硬件平臺(tái)開發(fā) 的,其編程思路同樣適合于其他類型的 ARM 微處理器。不同于基于 PC 平臺(tái)的程序開發(fā),嵌入式系統(tǒng)的程序設(shè)計(jì)具有其自身的特點(diǎn),程序設(shè)計(jì)的方法也 會(huì)因系統(tǒng)或因人而異, 但其程序設(shè)計(jì)還是有其共同的特點(diǎn)及規(guī)律的。 在編寫嵌入式系統(tǒng)應(yīng)用程序 時(shí),可采取如下幾個(gè)步驟:(1 明確所要解決的問題:根據(jù)問題的要求,將軟件分成若干個(gè)相對(duì)獨(dú)立的部分, 并合理設(shè)計(jì)軟件的總體結(jié)構(gòu)。(2 合理配置系統(tǒng)資源:與基于 8位或 16位微

4、控制器的系統(tǒng)相比較,基于 32位微 控制器的系統(tǒng)資源要豐富得多, 但合理的資源配置可最大限度的發(fā)揮系統(tǒng)的硬件 潛能,提高系統(tǒng)的性能。對(duì)于一個(gè)特定的系統(tǒng)來(lái)說(shuō),其系統(tǒng)資源,如 Flash 、 EEPROM 、 SDRAM 、中斷控制等,都是有限的,應(yīng)合理配置系統(tǒng)資源。(3 程序的設(shè)計(jì)、調(diào)試與優(yōu)化:根據(jù)軟件的總體結(jié)構(gòu)編寫程序,同時(shí)采用各種調(diào)試 手段,找出程序的各種語(yǔ)法和邏輯錯(cuò)誤,最后應(yīng)使各功能程序模塊化,縮短代碼 長(zhǎng)度以節(jié)省存儲(chǔ)空間并減少程序執(zhí)行時(shí)間。此外, 由于嵌入式系統(tǒng)一般都應(yīng)用在環(huán)境比較惡劣的場(chǎng)合, 易受各種干擾, 從而影響到系統(tǒng)的可 靠性, 因此, 應(yīng)用程序的抗干擾技術(shù)也是必須考慮的, 這也

5、是嵌入式系統(tǒng)應(yīng)用程序不同于其他應(yīng) 用程序的一個(gè)重要特點(diǎn)。6.2 部件工作原理與編程示例6.2.1 通用 I/O口工作原理與編程示例S3C4510B 提供了 18個(gè)可編程的通用 I/O端口,用戶可將每個(gè)端口配置為輸入模式、輸出模式或 特殊功能模式,由片內(nèi)的特殊功能寄存器 IOPMOD 和 IOPCON 控制。端口 0端口 7的工作模式僅由 IOPMOD 寄存器控制,但通過(guò)設(shè)置 IOPCON 寄存器,端口 8端口 11可用作外部中斷請(qǐng)求 INTREQ0INTREQ3的輸入, 端口 12、 端口 13可用作外部 DMA 請(qǐng)求 XDREQ0、 XDREQ1的輸入,端口 14、端口 15可作為外部 DM

6、A 請(qǐng)求的應(yīng)答信號(hào) XDACK0、 XDACK1,端口 16可 作為定時(shí)器 0的溢出 TOUT0,端口 17可作為定時(shí)器 1的溢出 TOUT1。I/O端口的功能模塊如圖 6.2.1所示: 圖 6.2.1 通用 I/O口的功能模塊控制 I/O口的特殊功能寄存器一共有 3個(gè):IOPMOD 、 IOPCON 和 IOPDATA ,簡(jiǎn)要描述如下:I/O口模式寄存器(IOPMOD :I/O口模式寄存器 IOPMOD 用于配置 P17P0。 0P0口的 I/O模式位0=輸入1=輸出1P1口的 I/O模式位0=輸入1=輸出2P2口的 I/O模式位0=輸入1=輸出317P3P17口的 I/O模式位0=輸入1=

7、輸出I/O口控制寄存器(IOPCON :I/O口控制寄存器 IOPCON 用于配置端口 P8P17的特殊功能,當(dāng)這些端口用作特殊功能(如外 部中斷請(qǐng)求、 外部中斷請(qǐng)求應(yīng)答、 外部 DMA 請(qǐng)求或應(yīng)答、 定時(shí)器溢出 時(shí), 其工作模式由 IOPCON 寄存器控制,而不再由 IOPMOD 寄存器。對(duì)于特殊功能輸入端口, S3C4510B 提供了一個(gè)濾波器用于檢測(cè)特殊功能信號(hào)的輸入,如果輸入 信號(hào)電平寬度等于三個(gè)系統(tǒng)時(shí)鐘周期, 該信號(hào)被認(rèn)為是諸如外部中斷請(qǐng)求或外部 DMA 請(qǐng)求等特殊 功能信號(hào)。 4:0控制端口 8的外部中斷請(qǐng)求信號(hào) 0(xIRQ0輸入4端口 8用作外部中斷請(qǐng)求信號(hào) 00 = 禁止 1

8、 = 使能3 0 = 低電平有效 1 = 高電平有效2 0 = 濾波器關(guān) 1 = 濾波器開1:0 00 = 電平檢測(cè) 01 = 上升沿檢測(cè)10 = 下降沿檢測(cè) 11 = 上升、下降沿均檢測(cè)9:5控制端口 9的外部中斷請(qǐng)求信號(hào) 1(xIRQ1輸入使用方法同端口 8。14:10控制端口 10的外部中斷請(qǐng)求信號(hào) 2(xIRQ2輸入使用方法同端口 8。19:15控制端口 11的外部中斷請(qǐng)求信號(hào) 3(xIRQ3輸入使用方法同端口 8。22:20控制端口 12的外部 DMA 請(qǐng)求信號(hào) 0(DRQ0輸入22端口 12用作外部 DMA 請(qǐng)求信號(hào) 0(nXDREQ00 = 禁止 1 = 使能21 0 = 濾波器

9、關(guān) 1 = 濾波器開20 0 = 低電平有效 1 = 高電平有效25:23控制端口 13的外部 DMA 請(qǐng)求信號(hào) 1(DRQ1輸入25端口 13用作外部 DMA 請(qǐng)求信號(hào) 1(nXDREQ10 = 禁止 1 = 使能24 0 = 濾波器關(guān) 1 = 濾波器開23 0 = 低電平有效 1 = 高電平有效27:26控制端口 14的外部 DMA 應(yīng)答信號(hào) 0(DAK0輸出27端口 14用作外部 DMA 信號(hào) 0(nXDACK00 = 禁止 1 = 使能26 0 = 低電平有效 1 = 高電平有效29:28控制端口 15的外部 DMA 應(yīng)答信號(hào) 1(DAK1輸出29端口 15用作外部 DMA 信號(hào) 1(

10、nXDACK10 = 禁止 1 = 使能28 0 = 低電平有效 1 = 高電平有效30控制端口 16作為定時(shí)器 0溢出信號(hào)(TOEN00 = 禁止 1 = 使能31控制端口 17作為定時(shí)器 1溢出信號(hào)(TOEN10 = 禁止 1 = 使能I/O口數(shù)據(jù)寄存器(IOPDATA :當(dāng)配置為輸入模式時(shí), 讀取 I/O口數(shù)據(jù)寄存器 IOPDATA 的每一位對(duì)應(yīng)輸入狀態(tài), 當(dāng)配置為輸出模 式時(shí),寫每一位對(duì)應(yīng)輸出狀態(tài)。位 17:0對(duì)應(yīng)于 18個(gè) I/O引腳 P17P0。 17:0對(duì)應(yīng) I/O口 P17P0的讀 /寫值。 I/O口數(shù)據(jù)寄存器的值反映對(duì)應(yīng)引腳的信號(hào)電平。 以上簡(jiǎn)述了 S3C4510B 的通用

11、I/O口的基本工作原理, 更詳細(xì)的內(nèi)容可參考 S3C4510B 的用戶手冊(cè)。 作為本章的第一個(gè)例子, 將比較詳細(xì)的描述建立項(xiàng)目、 編寫程序的過(guò)程, 同時(shí)可參考第八章關(guān)于 ADS 集成編譯調(diào)試環(huán)境的使用方法。打開 CodeWarrior for ARM Developer Suite(或 ARM Project Manager,新建一個(gè)項(xiàng)目,并 新建一個(gè)文件,名為 Init.s ,具體內(nèi)容如下:; *; Institute of Automation, Chinese Academy of Sciences; Description :; Date :; *IMPORT MainAREA Ini

12、t , CODE , READONLYENTRYLDR R0, =0x3FF0000LDR R1, =0xE7FFFF80 ;配置 SYSCFG, 片內(nèi) 4K Cache,4K SRAMSTR R1, R0LDR SP, =0x3FE1000 ; SP 指向 4K SRAM的尾地址,堆棧向下生成BL MainB .END該段代碼完成的功能為:配置 SYSCFG 特殊功能寄存器,將 S3C4510B 片內(nèi)的 8K 一體化的 SRAM 配置為 4K Cache , 4K SRAM , 并將用戶堆棧設(shè)置在片內(nèi)的 SRAM 中。4K SRAM 的地址為 0x3FE,0000(0x3FE,1000-1

13、, 由于 S3C4510B 的堆棧由高地址向低地址生成, 將 SP 初始化為 0x3FE,1000。完成上述操作后,程序跳轉(zhuǎn)到 Main 函數(shù)執(zhí)行。保存 Init.s ,并添加到新建的項(xiàng)目。再新建一個(gè)文件,名為 main.c ,具體內(nèi)容如下:/* Institute of Automation,Chinese Academy of Sciences* Description:* Date:*/#define IOPMOD (*(volatile unsigned *0x03FF5000 /IO port mode register#define IOPDATA (*(volatile unsi

14、gned *0x03FF5008 /IO port data registervoid Delay(unsigned int;int Main(unsigned long LED;IOPMOD=0xFFFFFFFF; /將 IO 口置為輸出模式IOPDATA=0x01;for(;LED=IOPDATA;LED=(LED<<1;IOPDATA=LED;Delay(10;if(!(IOPDATA&0x0FIOPDATA=0x01;return(0;void Delay(unsigned int xunsigned int i,j,k;for(i=0;i<=x;i+for(

15、j=0;j<0xff;j+for(k=0;k<0xff;k+;保存 main.c ,并添加到新建的項(xiàng)目。此時(shí)可對(duì)該項(xiàng)目進(jìn)行編譯鏈接,生成可執(zhí)行的映象文 件??蓤?zhí)行的映象文件主要用于程序的調(diào)試,一般在系統(tǒng)的 SDRAM 中運(yùn)行,并不燒寫入 Flash ,因此, 項(xiàng)目文件在鏈接時(shí), 注意程序的入口點(diǎn)應(yīng)與系統(tǒng)中 SDRAM 的實(shí)際配置地址相對(duì)應(yīng)。 鏈接器 默認(rèn)程序的入口地址為 0x8000,該值應(yīng)根據(jù)實(shí)際的 SDRAM 映射地址進(jìn)行修改。在編譯鏈接項(xiàng)目文件時(shí),將鏈接器程序的入口地址為 0x0040,0000。系統(tǒng)中 SDRAM 被映射到 0x0040,0000(0x0140,0000-1

16、,從 0x0040,0000處裝入生成的 可執(zhí)行的映象文件,并將 PC 指針寄存器修改為 0x0040,0000,就可單步調(diào)試或運(yùn)行生成的可執(zhí) 行的映象文件。該程序的運(yùn)行效果為接在 P0P3口的 LED 顯示器輪流被點(diǎn)亮。6.2.2 串行通訊工作原理與編程示例串行通訊是微計(jì)算機(jī)之間一種常見的近距離通訊手段,因使用方便、編程簡(jiǎn)單而廣泛使用, 幾乎所有的微控制器、 PC 都提供串行通訊接口。S3C4510B 的 UART 單元提供兩個(gè)獨(dú)立的異步串行 I/O口(Asynchronous Serial I/O, SIO , 每個(gè)通訊口均可工作在中斷模式或 DMA 模式,也即 UART 能產(chǎn)生內(nèi)部中斷請(qǐng)

17、求或 DMA 請(qǐng)求在 CPU 和串行 I/O口之間傳送數(shù)據(jù)。S3C4510B 的 UART 單元特性包括:-波特率可編程-支持紅外發(fā)送與接收- 12個(gè)停止位- 5、 6、 7或 8個(gè)數(shù)據(jù)位-奇偶校驗(yàn)每一個(gè)異步串行通訊口都具有獨(dú)立的波特率發(fā)生器、發(fā)送器、接收器和控制單元。波特率 發(fā)生器可由片內(nèi)系統(tǒng)時(shí)鐘 MCLK 驅(qū)動(dòng),或由外部時(shí)鐘 UCLK (Pin64驅(qū)動(dòng);發(fā)送器和接收器都有 獨(dú)立的數(shù)據(jù)緩沖寄存器和數(shù)據(jù)移位器。待發(fā)送的數(shù)據(jù)首先傳送到發(fā)送緩沖寄存器,然后拷貝到發(fā)送移位器并通過(guò)發(fā)送數(shù)據(jù)引腳 UATXDn 發(fā)送出去。接收數(shù)據(jù)首先從接收數(shù)據(jù)引腳 UARXDn 移入移位器,當(dāng)接收到一個(gè)字節(jié)時(shí)就拷 貝到接

18、收緩沖寄存器。SIO 的控制單元通過(guò)軟件控制工作模式的選擇、狀態(tài)和中斷產(chǎn)生。當(dāng)使用 UART 的發(fā)送中斷功能時(shí),應(yīng)在初始化 UART 之前先寫一個(gè)字節(jié)數(shù)據(jù)到 UART 的發(fā)送緩 沖寄存器,這樣,當(dāng)發(fā)送緩沖寄存器空時(shí)就可以產(chǎn)生 UART 的發(fā)送中斷。圖 6.2.2為串行口的功能模塊。 圖 6.2.2 串行口功能模塊。表 6-2-1為 UART 特殊功能寄存器描述表 6-2-1 UART 特殊功能寄存器 UART 行控制寄存器(UART Line Control Registers, ULCON0、 ULCON1: 表 6-2-2為 UART 行控制寄存器描述 1:0每幀字長(zhǎng)(WL 00=5位 0

19、1=6位10=7位 11=8位2幀末尾停止位(STB 0 = 每幀一個(gè)停止位1 = 每幀兩個(gè)停止位5:3校驗(yàn)?zāi)J?PMD 0xx = 無(wú)校驗(yàn)100 = 奇校驗(yàn)101 = 偶校驗(yàn)110 = 校驗(yàn)強(qiáng)制 /檢測(cè)為 1111 = 校驗(yàn)強(qiáng)制 /檢測(cè)為 06串行時(shí)鐘選擇(SC 0 = 內(nèi)部時(shí)鐘(MCLK 1 = 外部時(shí)鐘(UCLK 7紅外模式選擇(IR 0 = 正常操作模式1 = 紅外發(fā)送模式UART 控制寄存器(UART Control Registers, UCON0、 UCON1: 表 6-2-3為 UART 控制寄存器描述 1:0接收模式選擇(RxM 00 = 禁止01 = 產(chǎn)生中斷請(qǐng)求10 =

20、產(chǎn)生 GDMA 通道 0請(qǐng)求11 = 產(chǎn)生 GDMA 通道 1請(qǐng)求2接收狀態(tài)中斷使能(RxSI 0 = 不產(chǎn)生接收狀態(tài)中斷1 = 產(chǎn)生接收狀態(tài)中斷4:3發(fā)送模式選擇(TxM 00 = 禁止01 = 產(chǎn)生中斷請(qǐng)求10 = 產(chǎn)生 GDMA 通道 0請(qǐng)求11 = 產(chǎn)生 GDMA 通道 1請(qǐng)求5數(shù)據(jù)設(shè)備準(zhǔn)備好(DSR 0 = 不產(chǎn)生 DSR 輸出(nUADSR 引腳1 = 產(chǎn)生 DSR 輸出(nUADSR 引腳6發(fā)送間隔(SBK 0 = 發(fā)送間隔信號(hào)1 = 不發(fā)送間隔信號(hào)7回環(huán)使能(LPB 0 = 正常工作模式1 = 使能回環(huán)模式(僅用于測(cè)試UART 狀態(tài)寄存器(UART Status Registe

21、rs, USTAT0、 USTAT1: 表 6-2-4為 UART 狀態(tài)寄存器描述 0Overrun錯(cuò)誤(OV 0=在接收過(guò)程中未產(chǎn)生 Overrun 錯(cuò)誤1=Overrun錯(cuò)誤(如果 UCON2置為 1,則會(huì)產(chǎn)生接收狀態(tài)中斷注:當(dāng)已接收到的數(shù)據(jù)還未被讀取, 而新接收的數(shù)據(jù)覆蓋了原有的數(shù)據(jù)時(shí), 就會(huì)產(chǎn)生 Overrun 錯(cuò)誤。1校驗(yàn)錯(cuò)誤(PE 0=在接收過(guò)程中無(wú)校驗(yàn)錯(cuò)誤1=校驗(yàn)錯(cuò)誤(如果 UCON2置為 1,則會(huì)產(chǎn)生接收狀態(tài)中斷2幀錯(cuò)誤(FE 0=在接收過(guò)程中無(wú) 幀 錯(cuò)誤1=幀 錯(cuò)誤(如果 UCON2置為 1,則會(huì)產(chǎn)生接收狀態(tài)中斷3間隔信號(hào)檢測(cè)(BKD 0=未收到間隔信號(hào)1=收到間隔信號(hào)(如果

22、 UCON2置為 1,則會(huì)產(chǎn)生接收狀態(tài)中斷4數(shù)據(jù)終端準(zhǔn)備好(DTR 0=DTR引腳(nUADTR 置高1=DTR引腳(nUADTR 置低5接收數(shù)據(jù)準(zhǔn)備好(RDR 0=接收緩沖寄存器中無(wú)有效數(shù)據(jù)1=接收緩沖寄存器中有有效數(shù)據(jù)(若設(shè)置 UCON1:0,則產(chǎn)生中斷或 DMA 請(qǐng)求6發(fā)送緩沖寄存器空(TBE 0=發(fā)送保持寄存器中有有效數(shù)據(jù)1=發(fā)送保持寄存器中無(wú)數(shù)據(jù)(若設(shè)置 UCON4:3,則產(chǎn)生中斷或 DMA 請(qǐng)求7發(fā)送結(jié)束(TC 0=正在發(fā)送數(shù)據(jù)1=發(fā)送數(shù)據(jù)結(jié)束UART 發(fā)送緩沖寄存器(UART Transmit Buffer Registers, UTXBUF0、 UTXBUF1:UART 發(fā)送緩

23、沖寄存器 UTXBUF0、 UTXBUF1,存放待發(fā)送的 8位數(shù)據(jù)。當(dāng)把待發(fā)送的數(shù)據(jù)寫入 該寄存器時(shí), UART 的狀態(tài)寄存器 USTAT6自動(dòng)清零。 表 6-2-5為 UART 發(fā)送緩沖寄存器描述 7:0UART要發(fā)送的數(shù)據(jù)UART 接收緩沖寄存器(UART Receive Buffer Register, URXBUF0、 URXBUF1:UART 接收緩沖寄存器 URXBUF0、 URXBUF1,存放接收到的 8位串行數(shù)據(jù)。當(dāng) UART 接收完一 個(gè)數(shù)據(jù)幀, UART 的狀態(tài)寄存器 USTAT5置為 1。當(dāng)讀取 URXBUF 時(shí), USTAT5自動(dòng)清零。 表 6-2-6為 UART 接收

24、緩沖寄存器描述7:0UART接收到的數(shù)據(jù)UART 波特率除數(shù)因子寄存器(UART Baud Rate Divisor Registers, UBRDIV0、 UBRDIV1: UART 波特率除數(shù)因子寄存器 UBRDIV0、 UBRDIV1的值,決定發(fā)送、接收的波特率。 3:0 波特率除數(shù)因子值(CNT1xxx0=除 1xxx1=除 1615:4時(shí)間常數(shù)值(CNT0CNT0的計(jì)算公式如下:CNT0=MCLK/(32×BR -1MCLK :系統(tǒng)的工作頻率。BR :通 訊的波特率。UART 波特率示例:UART 的波特率發(fā)生器的輸入時(shí)鐘可以為系統(tǒng)時(shí)鐘,也可以從外部引入時(shí)鐘信號(hào)。若選用系統(tǒng)

25、時(shí)鐘為波特率發(fā)生器的輸入時(shí)鐘,當(dāng)系統(tǒng)時(shí)鐘為 50MHz 時(shí),則最大的波特率時(shí) 鐘輸出為 MCLK2/16(= 1.5625MHz,其中 MCLK2為系統(tǒng)時(shí)鐘 MCLK 除以 2。UCLK 引腳為 UART0、 UART1的外部時(shí)鐘輸入引腳。 UART 波特率發(fā)生器的輸入時(shí)鐘 MCLK2或 UCLK ,由寄存器 UCCON6選擇。下圖為 UART 波特率發(fā)生器的結(jié)構(gòu)圖和典型的波特率。 關(guān)于 UART 工作原理和使用方法的更詳細(xì)內(nèi)容,可參考 S3C4510B 用戶手冊(cè)。以下的示例完成通過(guò)串行口 UART0發(fā)送數(shù)據(jù)的功能,接收功能的編程與之類似。該示例的 通訊協(xié)議為:19200波特、 8位數(shù)據(jù)、 1

26、位停止、無(wú)校驗(yàn)。打開 CodeWarrior for ARM Developer Suite(或 ARM Project Manager,新建一個(gè)項(xiàng)目,并 新建一個(gè)文件,名為 Init.s ,具體內(nèi)容與第一個(gè)例子相同。保存 Init.s ,并添加到新建的項(xiàng)目。再新建一個(gè)文件,名為 main.c ,具體內(nèi)容如下:/* * Institute of Automation, Chinese Academy of Sciences* Description:* Date:*/#define ULCON0 (*(volatile unsigned *0x03FFD000 /UART channel0 l

27、ine control register#define UCON0 (*(volatile unsigned *0x03FFD004 /UART channel0 control register#define USTAT0 (*(volatile unsigned *0x03FFD008 /UART channel0 status register#define UTXBUF0 (*(volatile unsigned *0x03FFD00c /UART channel0 transimit holding register#define URXBUF0 (*(volatile unsign

28、ed *0x03FFD010 /UART channel0 recieve buffer register#define UBRDIV0 (*(volatile unsigned *0x03FFD014 /Baud rate divisor register0#define ULCON1 (*(volatile unsigned *0x03FFE000 /UART channel1 line control register#define UCON1 (*(volatile unsigned *0x03FFE004 /UART channel1 control register#define

29、USTAT1 (*(volatile unsigned *0x03FFE008 /UART channel1 status register#define UTXBUF1 (*(volatile unsigned *0x03FFE00c /UART channel1 transimit holding register#define URXBUF1 (*(volatile unsigned *0x03FFE010 /UART channel1 recieve buffer register#define UBRDIV1 (*(volatile unsigned *0x03FFE014 /Bau

30、d rate divisor register1void InitUART(int Port,int Baudrate;void PrintUART(int Port,char *s;int Main(InitUART(0,0x500; /19200bps CPU工作頻率 50MHz 0=COM1;1=COM2for(;PrintUART(0,"Communcation Testting! rn"return(0;void PrintUART(int Port,char *sif(Port=0for(;*s!='0's+for(;(!(USTAT0&

31、0x40;UTXBUF0=*s;if(Port=1for(;*s!='0's+for(;(!(USTAT1&0x40;UTXBUF1=*s;void InitUART(int Port,int Baudrateif(Port=0ULCON0=0x03;UCON0=0x09;UBRDIV0=Baudrate;if(Port=1ULCON1=0x03;UCON1=0x09;UBRDIV1=Baudrate;保存 main.c ,并添加到新建的項(xiàng)目。此時(shí)可對(duì)該項(xiàng)目進(jìn)行編譯鏈接,生成可執(zhí)行的映象文 件,當(dāng)可執(zhí)行的映象文件運(yùn)行時(shí),會(huì)不停的向 UART0發(fā)送字符串“ Communc

32、ation Testting!”。6.2.3 中斷控制器工作原理與編程示例中斷是計(jì)算機(jī)的一種基本工作方式,幾乎所有的 CPU 都支持中斷, S3C4510B 的支持多達(dá) 21個(gè)中斷源,中斷請(qǐng)求可由內(nèi)部功能模塊和外部引腳信號(hào)產(chǎn)生。ARM7TDMI 核可以識(shí)別兩種類型的中斷:正常中斷請(qǐng)求(Normal Interrupt Request, IRQ 和快速中斷請(qǐng)求(Fast Interrupt Request, FIQ ,因此, S3C4510B 的所有中斷都可以歸類為 IRQ 或 FIQ 。 S3C4510B 的中斷控制器對(duì)每一個(gè)中斷源都有一個(gè)中斷懸掛位(Interrupt Pending Bit

33、 。S3C4510B 用如下四個(gè)寄存器控制中斷的產(chǎn)生和對(duì)中斷進(jìn)行處理:-中斷優(yōu)先級(jí)寄存器(Interrupt Priority Register:每一個(gè)中斷源的索引號(hào)寫入一 個(gè)預(yù)定義的中斷優(yōu)先級(jí)寄存器,以獲得特定的優(yōu)先級(jí)。中斷優(yōu)先級(jí)預(yù)定義為從 020。-中斷模式寄存器(Interrupt Mode Register :為每一個(gè)中斷源定義中斷模式,是 IRQ 還是 FIQ 。-中斷懸掛寄存器(Interrupt Pending Register:指示中斷請(qǐng)求處于懸掛狀態(tài)(未 處理。如果中斷懸掛位被置位,則中斷懸掛狀態(tài)會(huì)一直保存,直到 CPU 通過(guò)寫 1到中斷懸掛寄存器的相應(yīng)位清除(注意是寫 1清

34、除,而不是寫 0。當(dāng)中斷懸掛位被置位時(shí),無(wú)論 中斷屏蔽寄存器是否為 0,中斷服務(wù)程序都開始執(zhí)行。在中斷服務(wù)程序中,必須通過(guò)向中斷 懸掛寄存器的相應(yīng)位寫 1來(lái)清除中斷懸掛標(biāo)志,以避免由于同一個(gè)中斷懸掛位導(dǎo)致中斷服務(wù) 程序的反復(fù)執(zhí)行。-中斷屏蔽寄存器(Interrupt Mask Register:如果中斷屏蔽位為 1則對(duì)應(yīng)的中斷會(huì)被禁止,如果中斷屏蔽位為 0,則對(duì)應(yīng)的中斷請(qǐng)求能正常響應(yīng)。但如果全局 中斷屏蔽位(位 21為 1,則所有的中斷都會(huì)被禁止。當(dāng)有中斷請(qǐng)求產(chǎn)生時(shí),對(duì)應(yīng)的中斷懸 掛位會(huì)被置為 1,在全局中斷屏蔽位和對(duì)應(yīng)的中斷屏蔽位為 0時(shí),中斷請(qǐng)求就會(huì)被響應(yīng)。 S3C4510B 的中斷源(I

35、nterrupt SourcesS3C4510B 可支持 21個(gè)中斷源,如表 6-2-7所示:表 6-2-7 S3C4510B的中斷源 中斷控制器的特殊功能寄存器(Interrupt Controller Special Registers中斷模式寄存器(Interrupt Mode Register中斷模式寄存器 INTMOD 通過(guò)每一位的設(shè)置決定每一種中斷是按快速中斷(FIQ 還是按正 常中斷(IRQ 響應(yīng)。 INTMOD 的 21個(gè)位分別對(duì)應(yīng)于表 6-2-7中所描述的 21個(gè)中斷源,當(dāng)中斷模式位被置為 1 時(shí), ARM7TDMI 核按 FIQ 方式處理對(duì)應(yīng)的中斷, 否則按 IRQ 方式處

36、理中斷。 21個(gè)中斷源映射如下: 20 IIC 中斷19 以太網(wǎng)控制器 MAC 接收中斷18 以太網(wǎng)控制器 MAC 發(fā)送中斷17 以太網(wǎng)控制器 BDMA 接收中斷16 以太網(wǎng)控制器 BDMA 發(fā)送中斷15 HDLC 通道 B 接收中斷14 HDLC 通道 B 發(fā)送中斷13 HDLC 通道 A 接收中斷12 HDLC 通道 A 發(fā)送中斷11 定時(shí)器 1中斷10 定時(shí)器 0中斷9 GDMA 通道 1中斷8 GDMA 通道 0中斷7 UART1接收與錯(cuò)誤中斷6 UART1發(fā)送中斷5 UART0接收與錯(cuò)誤中斷4 UART0發(fā)送中斷3 外部中斷 32 外部中斷 21 外部中斷 10 外部中斷 0中斷懸掛

37、寄存器(Interrupt Pending Register中斷懸掛寄存器 INTPND 保持每一個(gè)中斷源的中斷懸掛位。該寄存器對(duì)應(yīng)的中斷懸掛位應(yīng)在 中斷服務(wù)程序中首先清除,以避免由于同一個(gè)中斷懸掛位導(dǎo)致中斷服務(wù)程序的反復(fù)執(zhí)行。 20:0中斷懸掛位INTPND 的 21個(gè)位分別對(duì)應(yīng)于表 6-2-7中所描述的 21個(gè)中斷源,當(dāng)中斷請(qǐng)求產(chǎn)生時(shí),對(duì)應(yīng) 的中斷懸掛位被置為 1 , 在中斷服務(wù)程序中應(yīng)通過(guò)向?qū)?yīng)位寫入 1 的方式清除中斷懸掛位。 21個(gè)中斷源映射如下:20 IIC 中斷19 以太網(wǎng)控制器 MAC 接收中斷18 以太網(wǎng)控制器 MAC 發(fā)送中斷17 以太網(wǎng)控制器 BDMA 接收中斷16 以太

38、網(wǎng)控制器 BDMA 發(fā)送中斷15 HDLC 通道 B 接收中斷13 HDLC 通道 A 接收中斷12 HDLC 通道 A 發(fā)送中斷11 定時(shí)器 1中斷10 定時(shí)器 0中斷9 GDMA 通道 1中斷8 GDMA 通道 0中斷7 UART1接收與錯(cuò)誤中斷6 UART1發(fā)送中斷5 UART0接收與錯(cuò)誤中斷4 UART0發(fā)送中斷3 外部中斷 32 外部中斷 21 外部中斷 10 外部中斷 0中斷屏蔽寄存器(Interrupt Mask Register中斷屏蔽寄存器 INTMSK 保持每一個(gè)中斷源的中斷屏蔽位。 20:0中斷屏蔽位INTMSK 的 21個(gè)位分別對(duì)應(yīng)于表 6-2-7中所描述的 21個(gè)中斷

39、源,當(dāng)中斷屏蔽位被置為 1 時(shí),對(duì)應(yīng)的中斷請(qǐng)求不能被 CPU 響應(yīng),當(dāng)中斷屏蔽位為 0時(shí),中斷請(qǐng)求會(huì)被響應(yīng)。但如果全 局屏蔽位(位 21為 1時(shí),所有的中斷請(qǐng)求都不能被響應(yīng)(但只要中斷請(qǐng)求產(chǎn)生,對(duì)應(yīng)的中 斷懸掛位都會(huì)被設(shè)置,當(dāng)全局屏蔽位被清除時(shí),中斷請(qǐng)求會(huì)得到響應(yīng)。 21個(gè)中斷源映射如下: 20 IIC 中斷19 以太網(wǎng)控制器 MAC 接收中斷18 以太網(wǎng)控制器 MAC 發(fā)送中斷17 以太網(wǎng)控制器 BDMA 接收中斷16 以太網(wǎng)控制器 BDMA 發(fā)送中斷15 HDLC 通道 B 接收中斷14 HDLC 通道 B 發(fā)送中斷13 HDLC 通道 A 接收中斷12 HDLC 通道 A 發(fā)送中斷11

40、定時(shí)器 1中斷10 定時(shí)器 0中斷9 GDMA 通道 1中斷8 GDMA 通道 0中斷7 UART1接收與錯(cuò)誤中斷6 UART1發(fā)送中斷5 UART0接收與錯(cuò)誤中斷4 UART0發(fā)送中斷3 外部中斷 32 外部中斷 21 外部中斷 10 外部中斷 021全局中斷屏蔽位0 = 使能中斷請(qǐng)求1 = 禁止所有的中斷請(qǐng)求關(guān)于 S3C4510B 的中斷控制器的工作原理和使用方法的更詳細(xì)內(nèi)容,可參考 S3C4510B 用戶 手冊(cè)。6.2.4 定時(shí)器工作原理與編程示例S3C4510B 提供兩個(gè) 32位的定時(shí)器 T0和 T1,均可工作在間隔模式(Interval Mode或觸 發(fā)模式(Toggle Mode,

41、對(duì)應(yīng)的信號(hào)輸出為 TOUT0和 TOUT1。通過(guò)設(shè)置定時(shí)器控制寄存器 TCON 中的控制位可以禁止或使能 T0和 T1。無(wú)論何時(shí)當(dāng)定時(shí)器 計(jì)數(shù)溢出(減計(jì)數(shù)時(shí)都會(huì)產(chǎn)生中斷請(qǐng)求。間隔模式(Interval Mode在這種模式下,當(dāng)定時(shí)器計(jì)數(shù)溢出時(shí)產(chǎn)生一個(gè)脈沖輸出,該脈沖輸出產(chǎn)生定時(shí)中斷請(qǐng)求, 同時(shí)從定時(shí)器配置輸出引腳 (TOUTn Pin196、 Pin199輸出。 引腳的輸出脈沖頻率可按下式計(jì)算: f OUT = fMCLK /定時(shí)器的數(shù)據(jù)值觸發(fā)模式(Toggle Mode在觸發(fā)模式下,定時(shí)器的輸出電平會(huì)持續(xù)到下一次的計(jì)數(shù)溢出時(shí)觸發(fā)產(chǎn)生翻轉(zhuǎn)。當(dāng)發(fā)生定 時(shí)器計(jì)數(shù)溢出時(shí),會(huì)產(chǎn)生定時(shí)器中斷請(qǐng)求,同時(shí)由

42、配置引腳輸出電平狀態(tài)。在該模式下,定時(shí)器輸出引腳輸出占空比為 50%的時(shí)鐘信號(hào)。引腳的輸出脈沖頻率可按下 式計(jì)算:f OUT = fMCLK /(2×定時(shí)器的數(shù)據(jù)值圖 6.2.3為定時(shí)器輸出信號(hào)的時(shí)序。 圖 6.2.3 定時(shí)器輸出信號(hào)時(shí)序定時(shí)器的工作描述圖 6.2.4為定時(shí)器的功能模塊圖。其工作描述如下: 圖 6.2.4 定時(shí)器的功能模塊圖-當(dāng)使能計(jì)數(shù)器時(shí),會(huì)向計(jì)數(shù)器的計(jì)數(shù)寄存器裝入一個(gè)數(shù)據(jù)值,然后計(jì)數(shù)寄存器開始遞 減。-當(dāng)定時(shí)器計(jì)數(shù)溢出時(shí),會(huì)產(chǎn)生相應(yīng)的中斷請(qǐng)求,同時(shí)重新裝入原來(lái)的數(shù)據(jù)值并開始遞 減。-在禁用定時(shí)器的情況下,可以向定時(shí)器的寄存器寫入一個(gè)新的數(shù)據(jù)。-如果定時(shí)器在運(yùn)行時(shí)暫

43、停,原來(lái)的數(shù)據(jù)值不會(huì)被自動(dòng)重新裝入。定時(shí)器模式寄存器(Timer Mode Register, TMOD 定時(shí)器模式寄存器 TMOD 用于控制兩個(gè) 32位定時(shí)器的操作。 TMOD 寄存器的設(shè)置描述如下: 0定時(shí)器 0使能(TE00 = 禁用定時(shí)器 01 = 使能定時(shí)器 01定時(shí)器 0模式選擇(TMD00 = 間隔模式1 = 觸發(fā)模式2定時(shí)器 0初始化 TOUT0的值(TCLR00 = 在觸發(fā)模式下初始化 TOUT0為 01 = 在觸發(fā)模式下初始化 TOUT0為 13定時(shí)器 1使能(TE10 = 禁用定時(shí)器 11 = 使能定時(shí)器 14定時(shí)器 1模式選擇(TMD10 = 間隔模式1 = 觸發(fā)模式5

44、定時(shí)器 1初始化 TOUT1的值(TCLR10 = 在觸發(fā)模式下初始化 TOUT1為 01 = 在觸發(fā)模式下初始化 TOUT1為 1定時(shí)器數(shù)據(jù)寄存器(Timer Data Registers, TDATA0, TDATA1定時(shí)器數(shù)據(jù)寄存器 TDATA0和 TDATA1的值決定每一個(gè)定時(shí)器的計(jì)數(shù)溢出時(shí)間的長(zhǎng)短。該時(shí) 間的計(jì)算公式為:(定時(shí)器數(shù)據(jù)+1個(gè)時(shí)鐘周期。TDATA 寄存器描述如下: 31:0定時(shí)器 0或定時(shí)器 1 的數(shù)據(jù)值定時(shí)器計(jì)數(shù)寄存器(Timer Count Register定時(shí)器計(jì)數(shù)寄存器 TCNT0和 TCNT1保存定時(shí)器 0或定時(shí)器 1在正常工作情況下的當(dāng)前計(jì)數(shù) 值。TCNT 寄

45、存器描述如下: 31:0定時(shí)器 0或定時(shí)器 1 的計(jì)數(shù)值關(guān)于 S3C4510B 定時(shí)器的工作原理和使用方法的更詳細(xì)內(nèi)容,可參考 S3C4510B 用戶手冊(cè)。以下的示例顯示定時(shí)中斷服務(wù)程序的設(shè)計(jì)方法,其他中斷服務(wù)的編程與之類似。打開 CodeWarrior for ARM Developer Suite(或 ARM Project Manager,新建一個(gè)項(xiàng)目,并 新建一個(gè)文件,名為 Init.s ,具體內(nèi)容如下:; *; Institute of Automation, Chinese Academy of Sciences;Description: Timer interrupt test.

46、;Author: JuGuang , Lee;Date:;* IOPMOD EQU 0x3FF5000 ; I/O口模式寄存器IOPDATA EQU 0x3FF5008 ; I/O口數(shù)據(jù)寄存器TMOD EQU 0x3FF6000 ;定時(shí)器模式寄存器TDATA0 EQU 0x3FF6004 ;定時(shí)器數(shù)據(jù)寄存器INTMOD EQU 0x3FF4000 ;中斷模式寄存器INTPND EQU 0x3FF4004 ;中斷懸掛寄存器INTMASK EQU 0x3FF4008 ;中斷屏蔽寄存器AREA Init,CODE,READONLYENTRYB Reset_Handler ;復(fù)位異常向量,跳轉(zhuǎn)到程序開

47、始位置。B . ;未定義指令異常,跳轉(zhuǎn)到當(dāng)前位置。B . ; SWI 異常,跳轉(zhuǎn)到當(dāng)前位置。B . ;指令預(yù)取中止異常,跳轉(zhuǎn)到當(dāng)前位置。 B . ;數(shù)據(jù)訪問中止異常,跳轉(zhuǎn)到當(dāng)前位置。NOPB IRQ_Handler ; IRQ 異常,跳轉(zhuǎn)到響應(yīng)中斷服務(wù)程序。 B . ; FIQ 異常,跳轉(zhuǎn)到當(dāng)前位置。Reset_Handler;*;LED Display;*LDR R1,=IOPMODLDR R0,=&ffSTR R0,R1LDR R1,=IOPDATALDR R0,=&03STR R0,R1EOR R0,R0,R0LEDDELAYADD R0,R0,#1CMP R0,#&am

48、p;180000BNE LEDDELAYLDR R1,=IOPDATALDR R0,=&0STR R0,R1;*;User Stack;*LDR R0, =0x3FF0000LDR R1, =0xE7FFFF80 ;配置 SYSCFG, 片內(nèi) 4K Cache,4K SRAM STR R1, R0LDR SP, =0x3FE1000 ; SP 指向 4K SRAM的尾地址,堆棧向下生成 ;*;Interrupt Special Registers;*LDR R1,=INTMOD ;設(shè)置中斷模式寄存器LDR R0,=&0STR R0,R1LDR R1,=INTMSK ;設(shè)置中斷屏

49、蔽寄存器,只允許定時(shí)器 0中斷LDR R0,=&1FFbFFSTR R0,R1;*;Timer0 Special Registers;*LDR R1,=TDATA0 ;定時(shí)器 0的數(shù)據(jù)寄存器裝入初始化值LDR R0,=&3FFFFFFSTR R0,R1LDR R1,=TMOD ;使能定時(shí)器 0LDR R0,=&01STR R0,R1B . ;循環(huán)等待中斷發(fā)生; *; Timer0 Interrupt Service Routine; *IRQ_HandlerSTMFD SP!,R0-R6,LR ;保護(hù)現(xiàn)場(chǎng)LDR R1,=INTPND ; 清 INTPND 中的對(duì)應(yīng)位LD

50、R R0,=&400STR R0,R1LDR R0,=IOPDATA ; 讀 IOPDATA 的值加一并送回LDR R1, R0ADD R1,R1,#1STR R1,R0LDMFD SP!,R0-R6,LR ;恢復(fù)現(xiàn)場(chǎng),中斷返回SUBS PC,LR,#4END保存 Init.s ,并添加到新建的項(xiàng)目。此時(shí)可對(duì)該項(xiàng)目進(jìn)行編譯鏈接, 生成可執(zhí)行的映象文件。 由于異常向量地址是固定不變的,注意在連接該文件時(shí)應(yīng)保證載入地址為 0x0,否則程序不能正 常運(yùn)行。當(dāng)可執(zhí)行的映象文件運(yùn)行時(shí), 會(huì)按程序中定義的時(shí)間間隔產(chǎn)生定時(shí)器中斷, 通過(guò)外部的 LED 顯示器顯示中斷服務(wù)程序的執(zhí)行。6.2.5 G D

51、MA 工作原理與編程示例DMA 用于在模塊之間進(jìn)行高速的數(shù)據(jù)傳輸,在進(jìn)行大量數(shù)據(jù)傳輸時(shí)經(jīng)常使用, S3C4510B 內(nèi)建兩通道的通用 DMA 控制器(General DMA Controller, GDMA 。在沒有 CPU 的干預(yù)下, 兩通道的 GDMA 可完成如下的數(shù)據(jù)傳輸:-存儲(chǔ)器到存儲(chǔ)器的雙向數(shù)據(jù)傳輸。-UART 到存儲(chǔ)器的雙向數(shù)據(jù)傳輸。片內(nèi)的 GDMA 控制器可由軟件請(qǐng)求或外部的 DMA 請(qǐng)求(nXDREQ 啟動(dòng)。當(dāng)一次 DMA 操作完成以后,可由軟件再次啟動(dòng)。S3C4510B 的 DMA 控制器能自動(dòng)增減源地址與目標(biāo)地址,同時(shí)能以 8位、 16位或 32位的 方式傳送數(shù)據(jù)。圖 6.

52、2.5為 GDMA 控制器的功能模塊圖。 圖 6.2.5 GDMA控制器的功能模塊圖GDMA 特殊功能寄存器(GDMA Special Registers表 6-2-8為 GDAM 特殊功能寄存器概述。表 6-2-8 GDAM 特殊功能寄存器概述 GDMA 控制寄存器(GDMA Control Registers GDMA 控制寄存器描述如表 6-2-9: 注意:要確保 DMA 操作可靠,必須小心的單獨(dú)配置 GDMA 控制寄存器的每一位。0運(yùn)行使能(RE 0 = 禁用 DMA 操作1 = 使能 DMA 操作1忙狀態(tài)(BS 0 = DMA空閑1 = DMA工作3:2模式選擇(MODE 00 = 軟件請(qǐng)求模式(存儲(chǔ)器到存儲(chǔ)器。01 = 外部請(qǐng)求模式(用于外設(shè)。

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論