《uCOOS-II原理與ARM應(yīng)用程序設(shè)計(jì)》課件第2章_第1頁
《uCOOS-II原理與ARM應(yīng)用程序設(shè)計(jì)》課件第2章_第2頁
《uCOOS-II原理與ARM應(yīng)用程序設(shè)計(jì)》課件第2章_第3頁
《uCOOS-II原理與ARM應(yīng)用程序設(shè)計(jì)》課件第2章_第4頁
《uCOOS-II原理與ARM應(yīng)用程序設(shè)計(jì)》課件第2章_第5頁
已閱讀5頁,還剩197頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第二章

EWARM使用方法與芯片級(jí)程序2.1EWARM和ARM芯片級(jí)實(shí)例

2.2定時(shí)器中斷與實(shí)例二

2.3串口通信與實(shí)例三

2.4本章小結(jié)

說明:本書所有的實(shí)例均是獨(dú)立可運(yùn)行的完整實(shí)例,為了節(jié)省篇幅和不重復(fù)介紹相同的代碼,本書后續(xù)章節(jié)的實(shí)例均在本章實(shí)例一和已介紹的實(shí)例的基礎(chǔ)上擴(kuò)充而成,這樣既可以大幅度減少篇幅,又不影響程序的完整性。2.1EWARM和ARM芯片級(jí)實(shí)例

J-LINK仿真器的JTAG接口電壓為3.3V,本書使用的三個(gè)平臺(tái)UP-Star、UP-CUP2410和TQ2440的JTAG接口均為

3.3V,所以可以直接相連。

如第1.1節(jié)所述,將筆記本電腦的一個(gè)USB口通過J-LINK仿真器(及其轉(zhuǎn)接頭)與UP-Star實(shí)驗(yàn)板(或UP-CUP2410實(shí)驗(yàn)箱、TQ2440開發(fā)板或其他ARM平臺(tái))上的JTAG接頭相連接,筆記本電腦的另一個(gè)USB口通過USB轉(zhuǎn)串口線與實(shí)驗(yàn)板上的串口0相連接,將實(shí)驗(yàn)板的電源線連接好,打開實(shí)驗(yàn)板電源開關(guān)和筆記本電腦,則實(shí)驗(yàn)環(huán)境與學(xué)習(xí)平臺(tái)就建立好了,如圖2-1所示。圖2-1UP-Star實(shí)驗(yàn)硬件環(huán)境2.1.1EWARM開發(fā)環(huán)境和實(shí)例一

本節(jié)將介紹EWARM集成開發(fā)環(huán)境的使用方法。下面將演示一個(gè)仿真環(huán)境下運(yùn)行的ARM芯片級(jí)的程序?qū)嵗?,讀者需要具有《ARM原理與C程序設(shè)計(jì)》一書的基礎(chǔ)知識(shí),事實(shí)上,這本書也是本書的基礎(chǔ)篇。本節(jié)的實(shí)例工程文件名為ex2_1,實(shí)現(xiàn)的功能為將UP-Star實(shí)驗(yàn)板上的三個(gè)LED燈閃爍點(diǎn)亮。如第1.1節(jié)所述安裝好EWARM軟件,安裝EWARMV5.3/V5.4軟件是件輕松的事情。EWARM軟件的這個(gè)版本支持英語和日語,但是選擇日語后,啟動(dòng)的是英語工作環(huán)境;而選擇英語后,啟動(dòng)的卻是日語工作環(huán)境(在軟件啟動(dòng)后,右下角有一個(gè)國旗標(biāo)志,點(diǎn)擊后可以改變語言配置。盡管如此,這仍然是一處缺陷)。

選擇“開始|所有程序|IARSystems|IAREmbeddedWorkbenchforARM5.30|IAREmbeddedWorkbench”或桌面快捷圖標(biāo),進(jìn)入IAREWARM軟件工作環(huán)境,將彈出的“EmbeddedWorkbenchStartup”對(duì)話框關(guān)閉后,如圖2-2所示。圖2-2EWARM開發(fā)環(huán)境為了清晰地介紹實(shí)例ex2_1的創(chuàng)建過程,下面將工作的每一步用“S+數(shù)字”表示,例如第5步用S5表示。

S1.創(chuàng)建實(shí)例文件夾。

在D:\ZYUCOSII目錄下創(chuàng)建子目錄ex2_1,再在D:\ZYUCOSII\ex2_1目錄下創(chuàng)建兩個(gè)子目錄,即ASM和User,ASM子目錄存放所有匯編語言程序文件,而User子目錄存放所有C語言程序文件(EWARM還會(huì)生成兩個(gè)子目錄,即settings和Debug,其中,Debug目錄名可以在EWARM中指定,編譯時(shí)生成,后面將介紹)。

S2.創(chuàng)建空項(xiàng)目ex2_1并保存。

在圖2-2中點(diǎn)擊“Project|CreateNewProject…”菜單,彈出如圖2-3所示的對(duì)話框,選擇“Emptyproject”工程模板,點(diǎn)擊“OK”按鈕,進(jìn)入圖2-4。圖2-3創(chuàng)建新工程對(duì)話框圖2-4輸入工程文件名在圖2-4中,輸入工程文件名ex2_1后,點(diǎn)擊“保存”按鈕,進(jìn)入圖2-5。

在圖2-5中的“Debug”表示新建的工程ex2_1處于調(diào)試工作模式下,即編譯后的目標(biāo)文件中包括調(diào)試信息和指示符。一般地,新建的工程均應(yīng)工作在調(diào)試模式下,當(dāng)工程正常工作后,再通過菜單“Project|EditConfigurations…”修改為“Release”發(fā)行模式。圖2-5中Debug右上角的“*”號(hào)表示工作區(qū)沒有存盤。點(diǎn)擊圖2-5左上角的全部文件存盤按鈕,將工作區(qū)保存,彈出如圖2-6所示的窗口。圖2-5新建的空工程文件ex2_1在圖2-6中,輸入ex2_1,點(diǎn)擊“保存”按鈕,將保存工作區(qū)。此時(shí),D:\ZYUCOSII\ex2_1目錄下的文件如圖2-7所示。

由圖2-7可見,EWARM自動(dòng)創(chuàng)建了一個(gè)目錄settings和四個(gè)文件ex2_1.eww、ex2_1.ewp、ex2_1.ewd、ex2_1.dep,這四個(gè)文件均是ASCII碼文本文件,可以用UltraEdit等軟件打開。其中,eww擴(kuò)展名表示工作區(qū)文件,ewp擴(kuò)展名表示工程(或項(xiàng)目)文件。圖2-6工作區(qū)存盤圖2-7D:\ZYUCOSII\ex2_1目錄下的文件

S3.配置工程ex2_1。

如圖2-8所示,鼠標(biāo)右鍵點(diǎn)擊工作區(qū)中的工程文件ex2_1,在右鍵彈出菜單中選擇“Options…”(或點(diǎn)擊菜單“Project|Options…”,或按快捷鍵Alt+F7),進(jìn)入如圖2-9所示的窗口。圖2-8空項(xiàng)目ex2_1窗口圖2-9ex2_1的GeneralOptions|Target選項(xiàng)卡圖2-9包含了配置項(xiàng)目的所有選項(xiàng)卡,在其中將處理器配置為“SamsungS3C2410A”,設(shè)置為“Little”Endian模式。還需要進(jìn)一步配置其他選項(xiàng)卡,依次如圖2-10~圖2-21所示。圖2-10GeneralOptions|Output選項(xiàng)卡圖2-10中配置目標(biāo)文件為可執(zhí)行文件“Executable”(“Library”表示編譯鏈接后的目標(biāo)文件為庫文件),輸入目標(biāo)文件路徑為當(dāng)前工作目錄下的“Debug”子目錄,該子目錄下又有三個(gè)子目錄。其中,Exe子目錄存放.out和.hex類型的可執(zhí)行文件;Obj子目錄存放.o等類型的目標(biāo)文件;List子目錄存放.map等類型的文件。進(jìn)行如圖2-10所示的配置,編譯工程后,將在D:\ZYUCOSII\ex2_1目錄下創(chuàng)建Debug子目錄。圖2-11C/C++Compiler|Code選項(xiàng)卡在圖2-11中,選中“Arm”單選鈕,C語言編譯生成的目標(biāo)文件是32位的ARM指令集(這一步設(shè)置純粹是筆者習(xí)慣)。

進(jìn)行如圖2-12所示的配置后,工程文件ex2_1編譯時(shí)生成ex2_1.hex文件。事實(shí)上,這一步一般在需要進(jìn)行Bootloader之前才配置。圖2-12OutputConverter|Output選項(xiàng)卡圖2-13Linker|Config選項(xiàng)卡圖2-13為“Linker|Config”選項(xiàng)卡,在圖中選中“Overridedefault”復(fù)選框后,可以選擇“鏈接配置文件”(icf為其擴(kuò)展名),此時(shí),“Edit…”按鈕將使能,如圖2-14所示。圖2-14Linker|Config選項(xiàng)卡對(duì)于高級(jí)的EWARM開發(fā)人員,會(huì)有自己編寫的icf文件;而對(duì)于初學(xué)者,只需點(diǎn)擊“Edit…”按鈕,進(jìn)入如圖2-15所示的窗口。圖2-15鏈接配置文件圖形化編輯器按圖2-15所示設(shè)置后,表示中斷向量表位于地址0x0開始處;ROM空間從0x30000000到0x3003FFFF,大小為256KB;RAM空間從0x30040000到0x3013FFFF,大小為1MB;并依次設(shè)置了棧和堆的大小。點(diǎn)擊圖2-15中最后一個(gè)圖的“Save”按鈕進(jìn)入圖2-16。圖2-16保存鏈接配置文件圖2-17配置好的Linker|Config選項(xiàng)卡在圖2-16中點(diǎn)擊“保存”按鈕,進(jìn)入圖2-17。

這時(shí)在D:\ZYUCOSII\ex2_1目錄下多了一個(gè)ex2_1.icf文件,用UltraEdit打開后,其內(nèi)容如下:參考圖2-15,可讀懂上面的文件內(nèi)容,然后可以寫出具有自己特色的icf文件(如果是用戶自己寫的icf文件,則圖2-15所示的圖形化編輯器無法編輯)。

圖2-18中可以指定編譯鏈接后的工程目標(biāo)文件名,這里使用的是默認(rèn)文件名ex2_1.out。圖2-18Linker|Output選項(xiàng)卡圖2-19這一項(xiàng)很重要,選中“Generatelinkermapfile”復(fù)選框,編譯鏈接后,將產(chǎn)生.map文件(這里是ex2_1.map文件,位于D:\ZYUCOSII\ex2_1\Debug\List目錄下),這個(gè)文件對(duì)于初學(xué)者尤其重要,閱讀這個(gè)文件可以了解目標(biāo)文件的存儲(chǔ)配置。圖2-19Linker|Output選項(xiàng)卡筆者使用了J-LINK仿真器,所以圖2-20中選擇“J-Link/J-Trace”,如果“Runto”復(fù)選框選中了,則在線仿真時(shí),PC(程序計(jì)數(shù)器指針)將跳至main標(biāo)號(hào);如果不選中,則PC將跳到“_iar_program_start”標(biāo)號(hào)處(對(duì)于初學(xué)者,建議選中)。圖2-20Debugger|Setup選項(xiàng)卡在線仿真調(diào)試程序時(shí),一般需要將程序下載到SDRAM中,所以,需要一個(gè)宏文件(

.mac為擴(kuò)展名)對(duì)ARM開發(fā)板進(jìn)行存儲(chǔ)器配置(實(shí)際上,就是初始化存儲(chǔ)器配置寄存器,使SDRAM正常工作),這個(gè)文件是ex2_1.mac,是使用UltraEdit編輯的,保存在D:\ZYUCOSII\ex2_1目錄下,其內(nèi)容如下:上述代碼的功能依次為關(guān)閉看門狗定時(shí)器、設(shè)定CPU工作頻率為192MHz以及配置SDRAM,這在《ARM原理與C程序設(shè)計(jì)》一書中曾介紹過。需要指出的是第15行代碼,因?yàn)閁P-Star外擴(kuò)SDRAM為一片32MB的HY57V561620芯片,這里總線寬度和等待控制寄存器寫入值應(yīng)為0x11111110。

在圖2-20中選中“J-Link/J-Trace”后,則可以進(jìn)一步設(shè)置“J-Link/J-Trace”一欄,如圖2-21所示。圖2-21Debugger-J-Link/J-Trace|Setup選項(xiàng)卡在圖2-21中,點(diǎn)擊“OK”按鈕,完成工程配置,返回到圖2-5或圖2-8所示界面。

S4.編輯一個(gè)代碼文件。

點(diǎn)擊“File|New|FileCtrl+N”菜單,如圖2-22所示,或按快捷鍵Ctrl+N,進(jìn)入如圖2-23所示的界面。圖2-22新建文件菜單圖2-23新建文件編輯器在圖2-23中輸入一些代碼,然后點(diǎn)擊“File|Save”菜單或按下快捷鍵“Ctrl+S”存盤,彈出如圖2-24所示的窗口。圖2-24文件存盤在圖2-24中選擇目錄為D:\ZYUCOSII\ex2_1\ASM,即匯編語言程序存放在ASM子目錄下,然后,輸入文件名為zyDef2410.s,點(diǎn)擊“保存”按鈕存盤。

S5.編輯其他的代碼文件。

如同第S4步所示方法,依次編輯cstartup.s、zyDef2410.h、zyIRQ.c、zyLED.c和zyMain.c等文件,其中,將cstartup.s文件保存在D:\ZYUCOSII\ex2_1\ASM目錄下,其他文件保存在D:\ZYUCOSII\ex2_1\User目錄下。所有這些文件的源碼羅列于第2.1.2節(jié)。

S6.將文件添加到工程ex2_1中。

如圖2-25所示,在工程ex2_1的右鍵彈出菜單中,選擇“Add|AddGroup...”可向“Workspace”工作區(qū)中添加分組標(biāo)簽,這里建立了兩個(gè)分組,即asm和user,剛好與D:\ZYUCOSII\ex2_1下的兩個(gè)目錄同名,如圖2-26所示。圖2-25向工作區(qū)添加分組菜單圖2-26添加了分組asm和user下面將各個(gè)文件依次添加到工作區(qū)中,例如添加zyMain.c文件到user分組中:在編輯窗口中打開zyMain.c文件,再在“user”分組標(biāo)簽的右鍵彈出菜單中選擇“Add"zyMain.c"”項(xiàng),即可將zyMain.c文件添加到工作區(qū)user分組中,如圖2-27所示。圖2-27向工程中添加文件由于zyMain.c正被打開,所以圖2-27中出現(xiàn)了“Add”zyMain.c“”一項(xiàng),點(diǎn)擊該項(xiàng)可以將zyMain.c添加到工程中;如果希望添加其他的文件,則點(diǎn)擊“AddFiles...”,在彈出的對(duì)話框中選擇相應(yīng)的文件即可。

依次將zyMain.c、zyLED.c、zyIRQ.c和cstartup.s文件添加到工程中,其中cstartup.s添加到asm分組下;其余文件添加到user分組下。被這些文件包括了的文件,會(huì)自動(dòng)添加到相應(yīng)文件的下面(點(diǎn)擊“+”號(hào)后,可以看到被包括的文件,同時(shí)出現(xiàn)一個(gè)Output項(xiàng)),如圖2-28所示。圖2-28完整的ex2_1工程

S7.編譯鏈接工程文件。

在圖2-28中,點(diǎn)擊菜單“Project|Make”或“Project|RebuildAll”,可編譯鏈接工程ex2_1,生成目標(biāo)文件ex2_1.out和ex2_1.hex(這兩個(gè)文件位于D:\ZYUCOSII\ex2_1\Debug\Exe目錄下),編譯鏈接成功后如圖2-29所示。圖2-29ex2_1編譯鏈接成功

S8.仿真運(yùn)行工程ex2_1。

在圖2-29中,點(diǎn)擊“在線仿真”快捷按鈕,或按下快捷鍵Ctrl+D,或單擊菜單“Project|DownloadandDebug”,均可進(jìn)入如圖2-30所示的界面。圖2-30EWARM仿真環(huán)境界面在圖2-30中,點(diǎn)擊“運(yùn)行”快捷按鈕,可看到UP-Star實(shí)驗(yàn)板上的三個(gè)LED燈循環(huán)閃爍。至此,整個(gè)實(shí)例ex2_1介紹完了。2.1.2實(shí)例一工程源碼

下面給出實(shí)例一工程中所有文件的源代碼,即文件zyDef2410.s、cstartup.s、zyDef2410.h、zyIRQ.c、zyLED.c和zyMain.c的源代碼,讀者在學(xué)習(xí)了《ARM原理與C程序設(shè)計(jì)》后,應(yīng)均能讀懂這些程序,下面僅就一些特別的地方作簡(jiǎn)單的說明。同時(shí),該實(shí)例的MAP表文件ex2_1.map內(nèi)容羅列于附錄一,供初學(xué)者閱讀分析。文件zyDef2410.s的內(nèi)容如下:

文件cstartup.s的內(nèi)容如下:上述代碼中需要說明的是定義代碼段的方法,例如第22行:

SECTION.intvec:CODE:NOROOT(2)

這里SECTION為關(guān)鍵字,表示定義段;段名為.intvec,這是個(gè)特殊段名,表示復(fù)位和異常中斷向量表,必須定位在0x0~0x3F地址范圍內(nèi);CODE為關(guān)鍵字,表示本段為代碼段,如果是數(shù)據(jù)段,則使用DATA關(guān)鍵字,例如第15~20行;NOROOT為關(guān)鍵字,可理解為段中不使用的部分不會(huì)被初始化;括號(hào)中的2表示段的首地址必須為最低2個(gè)位為0的地址,即4個(gè)字節(jié)對(duì)齊,同理,第15~20行的數(shù)字3,表示最低3個(gè)位為0,即8字節(jié)對(duì)齊。第14行的“MODULE?cstartup”為定義一個(gè)模塊,其中“?”不是通配符,而是一般的符號(hào),國外的文檔中常用“?”表示用戶可以改為自己喜歡的符號(hào)。第123行的SFE表示取段的最高地址,由于ARM920T的棧頂是棧的高地址,所以SP賦為棧的最高地址。詳細(xì)信息請(qǐng)參考“ARMIARAssemblerReferenceGuide”文件,可在EWARM安裝目錄中找到。文件zyDef2410.h的內(nèi)容如下:文件zyIRQ.c的內(nèi)容如下:

1/*FileName:zyIRQ.c

2**Byzhnyong@21

3**@2009-4-4

4**ISRSubroutine

5**CopyrightReserved

6*/

7

8voidISR_IrqHandler(void)

9{

10}文件zyLED.c的內(nèi)容如下:文件zyMain.c的內(nèi)容如下:21

22//InitLEDLight

23zrInitLED();

24

25while(1)

26{

27zrLEdCircle(2000);

28}

29}按照第2.1節(jié)的方法,新建工程ex2_2,存儲(chǔ)目錄為D:\ZYUCOSII\ex2_2(除了工程文件名由ex2_1換為ex2_2之外,其他文件和目錄沒有變化;原ex2_1.mac更名為ex2_2.mac),如圖2-31所示。2.2定時(shí)器中斷與實(shí)例二圖2-31工程ex2_2顯然,工程ex2_2的運(yùn)行結(jié)果與實(shí)例ex2_1完全相同。實(shí)例ex2_1中使用輪詢的方式閃爍LED燈,工程ex2_2將在ex2_1的基礎(chǔ)上引入定時(shí)器中斷,使用定時(shí)器中斷的方式閃爍LED燈。下面首先介紹定時(shí)器中斷,補(bǔ)充zyIRQ.c的內(nèi)容;然后介紹完整的實(shí)例ex2_2。2.2.1S3C2410中斷源

S3C2410A有56個(gè)中斷源,定時(shí)器4(Timer4)中斷為其中的一個(gè)中斷,這些中斷源的處理如圖2-32所示(更詳細(xì)的內(nèi)容請(qǐng)參考《ARM原理與C程序設(shè)計(jì)》第170頁或S3C2410A芯片手冊(cè)第14章)。

如圖2-32所示,有些中斷源(Requestsources(withsub-register),約11個(gè))具有子源懸掛寄存器(SUBSRCPND)和子源屏蔽寄存器(SUBMASK),這些源中斷產(chǎn)生后,會(huì)自動(dòng)向其SUBSRCPND相應(yīng)的位寫1。如果其SUBMASK屏蔽了這些中斷,則這些中斷不會(huì)響應(yīng);如果SUBMASK開放了這些中斷,則這些中斷和另外一些不具有子源寄存器的中斷取或后進(jìn)入到SRCPND中。為了解釋的方便,假定SUBMASK屏蔽了所有帶子源寄存器的中斷源,則那些不帶子源寄存器的中斷源(Requestsources(withoutsub-register),約35個(gè))產(chǎn)生后,將首先置位SRCPND(地址為0x4A000000)相應(yīng)的位(不受屏蔽),表示該中斷產(chǎn)生了,這些位和SRCPND的對(duì)應(yīng)關(guān)系如表2-1所示。在進(jìn)入中斷服務(wù)程序后,應(yīng)立即通過向相應(yīng)的位寫1清除該位,否則,會(huì)認(rèn)為一個(gè)新的中斷又產(chǎn)生了。圖2-32S3C2410A中斷源處理流程表2-1中斷請(qǐng)求寄存器SRCPND雖然產(chǎn)生的中斷請(qǐng)求可以使SRCPND相應(yīng)的位置1,用以表示該中斷發(fā)生了,但是中斷是否能得到響應(yīng)受圖2-32中MASK的約束,MASK即為中斷屏蔽寄存器INTMSK(地址為0x4A000008)。其32位的每一位為0表示開啟中斷,為1表示屏蔽(或關(guān)閉)中斷,初始值為0xFFFFFFFF。但是這種約束只對(duì)圖2-32中MODE確定為IRQ類型的中斷才起作用,對(duì)于MODE確定為FIQ類型的中斷,即快速響應(yīng)中斷,則INTMSK不能屏蔽。這里的MODE即為中斷模式寄存器INTMOD(地址為0x4A000004)。其32位中相應(yīng)的位設(shè)置為1表示該中斷源為FIQ中斷模式,清為0表示該中斷源為IRQ中斷,初始值為0x00000000。從圖2-32中可以看出,IRQ模式的中斷源還要經(jīng)過Priority優(yōu)先級(jí)仲裁,這里的Priority即為IRQ優(yōu)先級(jí)寄存器PRIORITY(地址為0x4A00000C),初始值為0x7F,優(yōu)先級(jí)設(shè)定內(nèi)容請(qǐng)參考S3C2410A手冊(cè)。

當(dāng)某IRQ中斷源得到了服務(wù),如圖2-32所示,則INTPND相應(yīng)的位自動(dòng)置1。當(dāng)進(jìn)入中斷服務(wù)程序后,該位需要通過寫1清零的方法清位。這里需要注意:①?INTPND即中斷掛起寄存器(地址為0x4A000010)不能向原本為0的位寫入1!因此寫1清零時(shí),要確保寫入1的位為1才可以,往往采用讀出INTPND的值后重新寫入讀出值的方法;②?INTPND與SRCPND不同:只要有中斷發(fā)生,不管中斷開啟還是屏蔽著,SRCPND的相應(yīng)位都會(huì)被置1,有多少個(gè)中斷發(fā)生,就會(huì)有多少個(gè)相應(yīng)的位被置1;即使有很多中斷發(fā)生,INTPND每次只可能有一位被置1,即優(yōu)先級(jí)高而得到服務(wù)的中斷位。回到表2-1,表2-1中也給出了每個(gè)中斷的偏移號(hào),中斷偏移號(hào)寄存器為INTOFFSET,其地址為0x4A000014,其復(fù)位值為0。在IRQ模式下,如果某個(gè)中斷發(fā)生了,該中斷偏移號(hào)將保存在INTOFFSET寄存器中。例中,表2-1中的INT_TIMER4中斷(即定時(shí)器4中斷)產(chǎn)生了,則其偏移號(hào)14將自動(dòng)寫入到INTOFFSET中。INTOFFSET是只讀寄存器,通過清零INTPND和SRCPND,INTOFFSET自動(dòng)清零。2.2.2定時(shí)器4中斷

S3C2410A有5個(gè)16位的定時(shí)器,其中定時(shí)器0~3具有PWM波形輸出功能,而定時(shí)器4沒有外部波形輸出,是一個(gè)內(nèi)部定時(shí)器。本節(jié)設(shè)置定時(shí)器4,使它每1秒產(chǎn)生一次定時(shí)中斷,其步驟如下:

S1.關(guān)閉IRQ中斷,關(guān)閉所有中斷源。

設(shè)置CPSR寄存器的第I位(第7位)為1,關(guān)閉IRQ中斷;同時(shí),設(shè)置INTMSK寄存器的值為0xFFFFFFFF,INTSUBMSK寄存器的值為0x7FF,關(guān)閉所有中斷源。

S2.設(shè)置定時(shí)器4的工作頻率為20kHz。

設(shè)置TCFG0寄存器的值為0x9500,定時(shí)器4預(yù)分頻因子為149;設(shè)置TCFG1寄存器的值為0x30000,定時(shí)器4分頻因子為1/16。于是,定時(shí)器4工作頻率為PCLK/(149+1)/16=

20kHz(其中,PCLK為48MHz)。

S3.設(shè)置定時(shí)器4每1秒產(chǎn)生中斷1次,并打開定時(shí)器4。

設(shè)置TCNTB4寄存器的值為0x4E20(十進(jìn)制20000),當(dāng)定時(shí)器4以20kHz的減計(jì)數(shù)頻率減計(jì)數(shù)到0時(shí),產(chǎn)生一次定時(shí)中斷,即每隔20000/20kHz=1秒產(chǎn)生一次定時(shí)中斷。設(shè)置TCON的值為0x600000,將刷新TCNTB4的值為0x4E20。然后,設(shè)置TCON寄存器的值為0x50000,開啟定時(shí)器4。

S4.打開定時(shí)器4中斷,開啟IRQ中斷。

設(shè)置INTMOD寄存器的值為0x0,工作在IRQ模式下;設(shè)置INTMSK寄存器的第14位為0,開啟定時(shí)器4中斷。設(shè)置CPSR寄存器的第7位為0,開啟IRQ中斷。

S5.編寫中斷服務(wù)程序。

經(jīng)過S1~S4后,每隔1秒S3C2410將產(chǎn)生一次定時(shí)器4中斷,將PC指針指向0x18地址處,該地址處一般為跳轉(zhuǎn)指令,跳轉(zhuǎn)到IRQ中斷服務(wù)程序入口地址處,進(jìn)入IRQ中斷服務(wù)程序后,首先判斷INTOFFSET的值,如果INTOFFSET的值為14,則中斷源為定時(shí)器4,然后再跳轉(zhuǎn)到定時(shí)器4的中斷服務(wù)程序中。定時(shí)器4的中斷服務(wù)程序?qū)⒁来吻宄齋RCPND和INTPND中對(duì)應(yīng)于定時(shí)器4的位,然后開始定時(shí)器4的中斷處理程序。

工程ex2_2中文件zyIRQ.c以函數(shù)的形式實(shí)現(xiàn)了上述各步過程,如表2-2所示。表2-2zyIRQ.c中函數(shù)名及作用

文件zyIRQ.c的完整代碼如下所示:需要說明的是,這里使用C語言實(shí)現(xiàn)中斷響應(yīng)的方法與《ARM原理與C程序設(shè)計(jì)》中完全不同,這里借助一個(gè)IRQ中斷入口函數(shù),根據(jù)INTOFFSET的值選擇對(duì)應(yīng)的中斷服務(wù)程序。

第38行的“_arm”表示該函數(shù)編譯鏈接成ARM指令集。如果把該行的“_armvoidISR_IrqHandler(void)”改用“_arm_irqvoidISR_IrqHandler(void)”形式也是可以的,“_irq”指示該函數(shù)為IRQ中斷服務(wù)函數(shù),那么,cstartup.s文件(參考ex2_1)中的第65行中的“BL”改為“B”,第67行注釋掉;同時(shí),在頭文件zyDef2410.h中的函數(shù)聲明中添加“_irq”。由文件zrIRQ.c可知,當(dāng)定時(shí)器4中斷發(fā)生后,首先通過IRQ中斷跳轉(zhuǎn)到函數(shù)ISR_IrqHandler,然后,由INTOFFSET的值為14,轉(zhuǎn)到“case14:”執(zhí)行Timer4_Act函數(shù),這個(gè)函數(shù)是定時(shí)器4的中斷服務(wù)程序,實(shí)現(xiàn)每隔1秒時(shí)間UP-Star實(shí)驗(yàn)板上的三個(gè)LED燈同時(shí)點(diǎn)亮1秒。2.2.3實(shí)例ex2_2

現(xiàn)在,在圖2-31的基礎(chǔ)上,相對(duì)于工程ex2_1,對(duì)工程ex2_2中的文件進(jìn)行編輯。由圖2-31可知,工程ex2_2與工程ex2_1的文件數(shù)和名稱相同,具有zyDef2410.s、cstartup.s、zyDef2410.h、zyIRQ.c、zyLED.c和zyMain.c等6個(gè)源文件。下面依次說明各個(gè)文件相對(duì)于工程ex2_1的變化內(nèi)容。

(1)文件zyDef2410.s與工程ex2_1中的同名文件內(nèi)容相同。

(2)文件cstartup.s在工程ex2_1中同名文件的基礎(chǔ)上,把第142和143行內(nèi)容注釋掉,這樣,S3C2410A工作于SVC(管理)模式,μC/OS-Ⅱ也工作在該模式下。

(3)文件zyDef2410.h增加了較多新的宏定義,現(xiàn)把完整的代碼羅列如下:

(4)文件zyIRQ.c的內(nèi)容已經(jīng)在第2.2.2節(jié)給出了。

(5)文件zyLED.c添加了zrLEDoff函數(shù),并改寫了zyLED函數(shù)為zyLEDon函數(shù),當(dāng)zyLEDon的參數(shù)為4時(shí),三個(gè)LED同時(shí)點(diǎn)亮,該文件的完整代碼如下:

(6)文件zyMain.c中的while(1)循環(huán)什么都不做,程序靠中斷來工作,該文件的完整代碼如下:

進(jìn)行完上述6步修改后,則工程ex2_2建設(shè)好了。編譯鏈接好后,可在線仿真程序的執(zhí)行情況,此時(shí),三個(gè)LED燈將按設(shè)定的1秒時(shí)間間隔閃爍。按照第2.2節(jié)的方法,新建工程ex2_3,存儲(chǔ)目錄為D:\ZYUCOSII\ex2_3(除了工程文件名由ex2_2換為ex2_3之外,其他文件和目錄沒有變化;原ex2_2.mac更名為ex2_3.mac),如圖2-33所示。2.3串口通信與實(shí)例三圖2-33工程ex2_3的最初版本由圖2-33,此時(shí)的工程ex2_3本質(zhì)上是工程ex2_2,下面添加串口通信功能,使UP-Star實(shí)驗(yàn)板的串口0和計(jì)算機(jī)的串口(本書使用USB轉(zhuǎn)串口線從筆記本電腦引出的串口,并把這個(gè)串口號(hào)修改為COM1,借助串口調(diào)試助手SComAssistantV2.2)間進(jìn)行通信。2.3.1串口通信方法

串口通信是使用廣泛且協(xié)議簡(jiǎn)單的通信方式,缺點(diǎn)在于速度低、通信距離短。

S3C2410A具有3個(gè)串口,每個(gè)串口具有11個(gè)寄存器,其中,串口0的寄存器基地址為0x50000000。對(duì)于簡(jiǎn)單的串口0通信來說,需要配置的寄存器有ULCON0(地址為0x50000000)、UCON0(地址為0x50000004)、UFCON0(地址為0x50000008)和UBRDIV0(地址為0x50000028)。初始化串口的過程是:UFCON0和UMCON0(地址為0x5000000C)置為0,表示不使用FIFO,不使用流控制;ULCON0置為0x03,表示1位停止位,8位數(shù)據(jù)位,無校驗(yàn)位;UCON0置為0x05,表示串口工作方式為中斷方式或詢問方式;UBRDIV0置為0x270,表示波特率為4800bps(1bps=

1bit/s,計(jì)算方法為PCLK(此處為48MHz)/16/波特率-1=0x270;如果設(shè)置為0x19,則波特率為115200bps。串口讀寫方式有兩種,即詢問方式和中斷方式。詢問方式下,循環(huán)進(jìn)行串口的讀/寫過程,直到讀或?qū)懙淖址邮栈虬l(fā)送完畢;中斷方式下,當(dāng)串口接收到數(shù)據(jù)后或發(fā)送數(shù)據(jù)前將產(chǎn)生中斷請(qǐng)求,在中斷服務(wù)程序中實(shí)現(xiàn)串口的讀或?qū)憽?/p>

S3C2410芯片上,串口0的收發(fā)占用了引腳GPH3和GPH2,需要配置這兩個(gè)引腳為串口通信功能。

基本的串口讀操作為從寄存器URXH0(地址為0x50000024)中讀取一個(gè)字節(jié);基本的串口寫操作為向寄存器UTXH0(地址為0x50000020)中寫入一個(gè)字節(jié)。說明:更詳細(xì)的串口工作原理及其協(xié)議請(qǐng)參考網(wǎng)上資料或相關(guān)書籍。

本書中串口通信主要用于輸出顯示結(jié)果,即計(jì)算機(jī)上的串口調(diào)試助手作為顯示輸出終端。盡管UP-Star實(shí)驗(yàn)板帶有一塊真彩TFTLCD屏,但是驅(qū)動(dòng)LCD屏的代碼遠(yuǎn)遠(yuǎn)多于使用串口通信輸出的代碼(LCD驅(qū)動(dòng)代碼在UP-Star實(shí)驗(yàn)板配套光盤中可以找到)。

與串口0通信相關(guān)的代碼位于文件zyUART0.c中,該文件的完整代碼羅列如下:1/*FileName:zyUART0.c

2**Byzhnyong@21

3**@2009-4-4

4**CopyrightReserved

5*/

6

7#include"zyDef2410.h"

8

9//InitializeUART0

10voidzyInitUART0(void)11{

12//SetGPH3:2asRXD0:TXD0

13GPHCON=0xA0;

14

15//SetUART0Baudrate:4800bps,8-bit,1-bitstop

16UFCON0=0x0;

17UMCON0=0x0;

18ULCON0=0x03;

19UCON0=0x05;

20UBRDIV0=0x270;

21}

2223//ReceiveAbyte(8-bit)

24U8Rd_Uart0(void)

25{

26U8aByte;

27while(!(UTRSTAT0&0x01))

28aByte=URXH0;

29returnaByte;

30}

31

32//SendAbyte

33voidWr_Uart0(U8aByte)

34{

35while(!(UTRSTAT0&0x02));

36UTXH0=aByte;37}

38

39//SendAstring

40voidStr_Uart0(U8*str8)

41{

42while(*str8)

43{

44Wr_Uart0(*str8++);

45}

46}

47

48//SendAsignedbye

49voidSWr_Uart0(charaByte)50{

51while(!(UTRSTAT0&0x02));

52UTXH0=aByte;

53}

54

55//SendAsignedstring

56voidSStr_Uart0(char*str8)

57{

58char*p=&str8[0];

59while(*p)

60{

61SWr_Uart0(*p++);

62}

63

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(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)論