資源描述:
《ARM系統(tǒng)硬件設(shè)計(jì)基礎(chǔ)課件.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第4章ARM系統(tǒng)硬件設(shè)計(jì)基礎(chǔ)主要內(nèi)容1324ADS1.2集成開(kāi)發(fā)環(huán)境簡(jiǎn)介基于ARM的匯編語(yǔ)言程序設(shè)計(jì)基于ARM的硬件啟動(dòng)程序基于ARM的C語(yǔ)言與匯編語(yǔ)言混合編程5印制電路板制作簡(jiǎn)介4.1ADS1.2集成開(kāi)發(fā)環(huán)境簡(jiǎn)介ADS的英文全稱為ARMDeveloperSuite,是ARM公司推出的新一代ARM集成開(kāi)發(fā)工具。ADS由六個(gè)部分組成,分別是:代碼生成工具集成開(kāi)發(fā)環(huán)境調(diào)試器指令集模擬器ARM開(kāi)發(fā)包ARM應(yīng)用庫(kù)4.1.1ADS1.2集成開(kāi)發(fā)環(huán)境下工程的創(chuàng)建使用ADS創(chuàng)建工程的步驟:新建工程“File
2、New…”設(shè)置目標(biāo)及其參數(shù)“Edit
3、D
4、ebugSettings…”向工程中添加文件“Project
5、AddFiles”4.1.2ADS1.2集成開(kāi)發(fā)環(huán)境下進(jìn)行仿真和調(diào)試的方法在Codewarrior中,如果工程編譯成功,將產(chǎn)生一個(gè)后綴為.axf的映像文件,接下來(lái)就可以使用AXDDebugger進(jìn)行調(diào)試。常用調(diào)試按鈕主要內(nèi)容1324ADS1.2集成開(kāi)發(fā)環(huán)境簡(jiǎn)介基于ARM的匯編語(yǔ)言程序設(shè)計(jì)基于ARM的硬件啟動(dòng)程序基于ARM的C語(yǔ)言與匯編語(yǔ)言混合編程5印制電路板制作簡(jiǎn)介4.2.1ARM匯編器支持的偽指令偽指令是ARM匯編語(yǔ)言程序中的一些特殊指令助記符,這些助記符與指令系統(tǒng)的助記
6、符不同,沒(méi)有相對(duì)應(yīng)的操作碼,它們所完成的操作稱為偽操作。偽指令在源程序中的作用是為完成匯編程序做各種準(zhǔn)備工作的,這些偽指令僅在匯編過(guò)程中起作用,一旦匯編結(jié)束,偽指令的使命就完成了。ARM匯編器支持的偽指令包括:符號(hào)定義偽指令、數(shù)據(jù)定義偽指令、匯編控制偽指令、宏指令以及其他偽指令。分類指令舉例符號(hào)定義偽指令GBLA/GBLL/GBLS/LCLA/LCLL/LCLS/SETA/SETL/SETS/RLISTGBLATest1;定義一個(gè)名為T(mén)est1的全局?jǐn)?shù)值字變量數(shù)據(jù)定義偽指令DCB/DCW/DCD/DCFD/DCFS/DCQ/SPACE
7、/MAP/FIELDstrDCB“Thisisatest”;分配起始地址為str的一段連續(xù)字節(jié)存儲(chǔ)單元存放字符串匯編控制偽指令I(lǐng)F/ELSE/ENDIF/WHILE/WEND/IFTest=TRUE;如果條件成立指令序列1;執(zhí)行指令序列1ELSE;否則執(zhí)行指令序列2指令序列2ENDIF宏指令MACRO/MEND/MEXITMACROSeg指令序列MEND;定義一個(gè)名為Seg的宏指令其他偽指令A(yù)REA/ALIGN/CODE16/CODE32/ENTRY/END/EQU/EXPORT/GLOBAL/IMPORT/EXTERN/GET/IN
8、CLUDE/INCBINAREAInit,CODE,READONLY,ALIGN=3;定義了一個(gè)代碼段,段名為Init,屬性為只讀,并指定其后的指令為8(23)字節(jié)對(duì)齊。ARM匯編器支持的常見(jiàn)偽指令4.2.2基于ARM的匯編語(yǔ)言語(yǔ)句格式ARM匯編語(yǔ)言的語(yǔ)句格式[標(biāo)號(hào)][指令或偽指令][;注釋]標(biāo)號(hào)是代表地址的符號(hào),必須在一行的頂格書(shū)寫(xiě),其后不能添加冒號(hào)“:”,而所有指令均不能頂格書(shū)寫(xiě)。ARM匯編語(yǔ)言對(duì)標(biāo)識(shí)符的大小寫(xiě)敏感,書(shū)寫(xiě)標(biāo)號(hào)及指令時(shí)字母大小寫(xiě)要一致。在ARM匯編語(yǔ)言中,ARM指令、偽指令、寄存器名等可以全部大寫(xiě)或者全部小寫(xiě),但不能
9、大小寫(xiě)混合使用。為了使源文件易讀,可以將一條長(zhǎng)的指令通過(guò)使用反斜杠字符“”將其分成幾行書(shū)寫(xiě)。每行從第一個(gè)分號(hào)開(kāi)始到本行結(jié)束為注釋內(nèi)容,所有的注釋內(nèi)容均被匯編起忽略。4.2.3ARM匯編語(yǔ)言程序的基本結(jié)構(gòu)在ARM匯編語(yǔ)言程序中,以程序段為單位來(lái)組織代碼。段是相對(duì)獨(dú)立的指令或數(shù)據(jù)序列,具有特定的名稱。段可以分為代碼段和數(shù)據(jù)段,代碼段的內(nèi)容為執(zhí)行代碼,數(shù)據(jù)段存放代碼運(yùn)行時(shí)所需的數(shù)據(jù)??蓤?zhí)行映像文件通常由以下幾部分構(gòu)成:一個(gè)或多個(gè)代碼段,代碼段為只讀屬性。零個(gè)或多個(gè)包含初始化數(shù)據(jù)的數(shù)據(jù)段,數(shù)據(jù)段的屬性為可讀寫(xiě)。零個(gè)或多個(gè)不包含初始化數(shù)據(jù)的數(shù)
10、據(jù)段,數(shù)據(jù)段的屬性為可讀寫(xiě)。一個(gè)含有子程序調(diào)用的代碼段的例子AREAInit,CODE,READONLYENTRYLDRR0,=0x3FF5000LDRR1,0x0fSTRR1,[R0]LDRR0,=0x3F50008LDRR1,0x1STRR1,[R0]BLPROC;子程序調(diào)用…PROC;子程序開(kāi)始…MOVPC,LR;從子程序返回…END一個(gè)數(shù)據(jù)段的例子AREADataArea,DATA,NOINIT,ALIGN=2DISPBUFSPACE200RCVBUFSPACE200…其中DATA為數(shù)據(jù)段的標(biāo)識(shí)。4.2.4基于ARM的匯編語(yǔ)言
11、程序舉例舉例:連續(xù)發(fā)送128個(gè)ASCII字符的匯編語(yǔ)言的例子…;呼叫子程序UARTbUARTUART;子程序開(kāi)始ldrr0,=GPHCON;設(shè)置GPIO(RxD0,TxD0引腳)ldrr1,=0x2afaaastrr1,