ARM嵌入式體系結(jié)構(gòu)與接口技術(shù)(Cortex-A9版)全套課件_第1頁(yè)
ARM嵌入式體系結(jié)構(gòu)與接口技術(shù)(Cortex-A9版)全套課件_第2頁(yè)
ARM嵌入式體系結(jié)構(gòu)與接口技術(shù)(Cortex-A9版)全套課件_第3頁(yè)
ARM嵌入式體系結(jié)構(gòu)與接口技術(shù)(Cortex-A9版)全套課件_第4頁(yè)
ARM嵌入式體系結(jié)構(gòu)與接口技術(shù)(Cortex-A9版)全套課件_第5頁(yè)
已閱讀5頁(yè),還剩112頁(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章嵌入式ARM技術(shù)概論第1章嵌入式ARM技術(shù)概論.pptx第2章ARM開(kāi)發(fā)環(huán)境搭建.pptx第3章ARM指令.pptx第4章ARM匯編程序設(shè)計(jì).pptx第5章GPIO編程.pptx第6章ARM異常及中斷處理.pptx第7章串行通信接口.pptx第8章PWM定時(shí)器.pptx第9章看門狗定時(shí)器.pptx第10章RTC定時(shí)器.pptx第11章AD轉(zhuǎn)換器.pptx第12章I2C接口.pptx第13章SPI接口.pptxARM公司成立于1990年11月前身為Acorn計(jì)算機(jī)公司主要設(shè)計(jì)ARM系列RISC處理器內(nèi)核授權(quán)ARM內(nèi)核給生產(chǎn)和銷售半導(dǎo)體的合作伙伴ARM公司不生產(chǎn)芯片另外也提供基于ARM架構(gòu)的開(kāi)發(fā)設(shè)計(jì)技術(shù)軟件工具、評(píng)估板、調(diào)試工具、應(yīng)用軟件、總線架構(gòu)、外圍設(shè)備單元等ARM全球分布ARM合作伙伴SILICONDESIGNSUPPORTSOFTWARETRAININGCONSORTIAARM處理器的最新發(fā)展數(shù)據(jù)和指令類型ARM采用的是32位架構(gòu)ARM約定:Byte:8bitsHalfword:16bits(2byte)Word:32bits(4byte)Doubleword:64-bits(8byte)(Cortex-A處理器)大部分ARMcore提供:ARM指令集(32-bit)Thumb指令集(16-bit)Cortex-A處理器16位和32位Thumb-2指令集16位和32位ThumbEE指令集程序計(jì)數(shù)器PC(r15)當(dāng)處理器執(zhí)行在ARM狀態(tài):所有指令32bits寬所有指令必須word對(duì)齊所以pc值由bits[31:2]決定,bits[1:0]未定義(所以指令不能halfword/byte對(duì)齊)當(dāng)處理器執(zhí)行在Thumb狀態(tài):所有指令16bits寬所有指令必須halfword對(duì)齊所以pc值由bits[31:1]決定,bits[0]未定義(所以指令不能byte對(duì)齊)當(dāng)處理器執(zhí)行在Jazelle狀態(tài):所有指令8bits寬處理器執(zhí)行word存取一次取4條指令字節(jié)順序ARM可以用little/bigendian格式存取數(shù)據(jù)處理器工作模式ARM有8個(gè)基本工作模式:User:非特權(quán)模式,大部分任務(wù)執(zhí)行在這種模式FIQ:當(dāng)一個(gè)高優(yōu)先級(jí)(fast)中斷產(chǎn)生時(shí)將會(huì)進(jìn)入這種模式IRQ:當(dāng)一個(gè)低優(yōu)先級(jí)(normal)中斷產(chǎn)生時(shí)將會(huì)進(jìn)入這種模式Supervisor:當(dāng)復(fù)位或軟中斷指令執(zhí)行時(shí)將會(huì)進(jìn)入這種模式Abort:當(dāng)存取異常時(shí)將會(huì)進(jìn)入這種模式Undef:當(dāng)執(zhí)行未定義指令時(shí)會(huì)進(jìn)入這種模式System:使用和User模式相同寄存器集的特權(quán)模式Cortex-A特有模式:Monitor:是為了安全而擴(kuò)展出的用于執(zhí)行安全監(jiān)控代碼的模式,也是一種特權(quán)模式Cortex-A寄存器組織概要當(dāng)前程序狀態(tài)寄存器(CPSR)條件位:N=NegativeresultfromALUZ=ZeroresultfromALUC=ALUoperationCarriedoutorborrowV=ALUoperationOverflowed中斷禁止位:

I=1:禁止IRQ.F=1:禁止FIQT位T=0處理器處于ARM狀態(tài)T=1處理器處于Thumb狀態(tài)處理器模式位10000Usermode10001FIQmode10011SVCmode10111Abortmode11011Undfinedmode11111Systemmode10110Monitormode10010IRQ最佳流水線該例中用6個(gè)時(shí)鐘周期執(zhí)行了6條指令所有的操作都在寄存器中(單周期執(zhí)行)指令周期數(shù)(CPI)=1指令流水線為增加處理器指令流的速度,ARM7系列使用3級(jí)流水線允許多個(gè)操作同時(shí)處理,而非順序執(zhí)行PC指向正被取指的指令,而非正在執(zhí)行的指令板載硬件資源第2章ARM開(kāi)發(fā)環(huán)境搭建連接示意圖環(huán)境的搭建流程開(kāi)發(fā)工具的安裝。創(chuàng)建一個(gè)新工程如何編譯一個(gè)新工程如何調(diào)試一個(gè)新工程第3章ARM指令數(shù)據(jù)處理指令包括:算術(shù)指令: ADD ADC SUB SBC RSB RSC邏輯指令: AND ORR EOR BIC比較指令: CMP CMN TST TEQ數(shù)據(jù)搬移: MOV

MVN上述指令只能對(duì)寄存器操作,不能針對(duì)存儲(chǔ)器。語(yǔ)法:<操作>{<cond>}{S}Rd,Rn,Operand2只有比較指令影響標(biāo)志位-不指定Rd數(shù)據(jù)搬移(MOV指令)不指定Rn第二個(gè)操作數(shù)通過(guò)桶型移位器送到ALU中。數(shù)據(jù)處理指令機(jī)器碼格式movr1,r2,lsl#2指令機(jī)器碼0xe1a01102Cond:指令的條件碼。Opcode:指令操作碼。S:操作是否影響cpsr,S=0不影響,S=1影響。Rn:包含第一個(gè)操作數(shù)的寄存器編碼。Rd:目標(biāo)寄存器編碼。Operand2:第2操作數(shù)、RmI:用于區(qū)別Operand2是立即數(shù)(I=1),還是寄存器移位(I=0)Shiftamount:移位數(shù)Shift:移位方式數(shù)據(jù)處理指令加法指令A(yù)DDR1,R2,R3R1=R2+R3帶進(jìn)位加法ADCR1,R2,R3R1=R2+R3+C減法指令SUBR1,R2,R3R1=R2-R3逆向減法RSBR1,R2,R3R1=R3-R2帶借位減法SBCR1,R2,R3R1=R2-R3-!C帶借位逆減法

RSCR1,R2,R3R1=R3-R2-!C邏輯與指令A(yù)NDR0,R0,#0X0F邏輯或指令ORRR0,R0,#0X0F邏輯異或EORR0,R0,#0X0F位清除BICR0,R0,#9比較指令CMPR1,#10 cpsr=R1-10反值比較指令

CMNR1,R2cpsr=R1+R2位測(cè)試指令TSTR1,#3cpsr=R1AND3相等測(cè)試TEQR1,R2cpsr=R1EORR2數(shù)據(jù)傳輸指令

MOVR1,R2R1=R2取反傳送指令

MVNR1,R2 R1=~R2立即數(shù)沒(méi)有任何一條ARM指令可包括一個(gè)32bit的立即數(shù)所有的ARM指令都是32bits固定長(zhǎng)度數(shù)據(jù)處理指令格式中,第二個(gè)操作數(shù)有12位4bit移位值(0-15)乘于2,得到一個(gè)范圍在0-30,步長(zhǎng)為2的移位值。記住一條準(zhǔn)則:“最后8位一定要移動(dòng)偶數(shù)位”.桶型移位器DestinationCF0DestinationCFLSL:LogicalLeftShiftASR:ArithmeticRightShift(無(wú)符號(hào)數(shù))乘2除2,并保留符號(hào)位DestinationCF...0DestinationCFLSR:LogicalShiftRightROR:RotateRight(無(wú)符號(hào)數(shù))除2位輪換DestinationRRX:RotateRightExtended位輪換,從CF到MSB都參與操作CF分支指令Branch: B{<cond>}labelBranchwithLink: BL{<cond>}

subroutine_label處理器核按偏移量左移兩位,符號(hào)擴(kuò)展,再把該值加到當(dāng)前PC寄存器內(nèi)跳轉(zhuǎn)范圍:±32Mbyte如何執(zhí)行長(zhǎng)跳轉(zhuǎn)?條件執(zhí)行及標(biāo)志位ARM指令可以通過(guò)添加適當(dāng)?shù)臈l件碼前綴來(lái)達(dá)到條件執(zhí)行的目的。這樣可以提高代碼密度,減少分支跳轉(zhuǎn)指令數(shù)目,提高性能。CMPr3,#0CMPr3,#0

BEQskipADDNEr0,r1,r2

ADDr0,r1,r2

skip默認(rèn)情況下,數(shù)據(jù)處理指令不影響條件碼標(biāo)志位,但可以選擇通過(guò)添加“S”來(lái)影響標(biāo)志位。CMP不需要增加“S”就可改變相應(yīng)的標(biāo)志位。

SUBSr3,r3,#0

BEQskip如果Z標(biāo)志清零則跳轉(zhuǎn)R1減1,并設(shè)置標(biāo)志位條件碼條件執(zhí)行示例一系列的指令都使用條件指令if(a==0)func(1);CMPr1,#0

MOVEQr0,#1

BLEQfunc置標(biāo)志位,再使用不同的條件碼if(a==0)x=0;

if(a>0)x=1;CMPr0,#0

MOVEQr1,#0

MOVGTr1,#1使用條件比較指令if(a==4||a==10)x=0;CMPr0,#4

CMPNEr0,#10

MOVEQr1,#0測(cè)驗(yàn)#2-GCD.global_start_start: MOVr0,#9 MOVr1,#15Loop: ;yourcodeherestop: Bstop .end單寄存器數(shù)據(jù)傳送LDR STR

WordLDRB STRB

ByteLDRH STRH HalfwordLDRSB

帶符號(hào)的byteloadLDRSH

帶符號(hào)的halfwordload存儲(chǔ)器系統(tǒng)必須支持所有訪問(wèn)寬度語(yǔ)法:

LDR{<cond>}{<size>}Rd,<address>STR{<cond>}{<size>}Rd,<address>e.g.LDREQB

地址訪問(wèn)LDR/STR訪問(wèn)的地址由基址寄存器加上偏移量來(lái)產(chǎn)生。針對(duì)word和無(wú)符號(hào)byte的訪問(wèn),偏移量可以是:一個(gè)無(wú)符號(hào)12-bit立即數(shù)(如0-4095bytes).

LDRr0,[r1,#8]一個(gè)寄存器,或再加上移位(由立即數(shù)指定)

LDRr0,[r1,r2]

LDRr0,[r1,r2,LSL#2]可以是從基址寄存器上加或減去偏移量:

LDRr0,[r1,#-8]

LDRr0,[r1,-r2]

LDRr0,[r1,-r2,LSL#2]對(duì)于halfword和帶符號(hào)的halfword/byte,偏移量可以是:一個(gè)無(wú)符號(hào)8bit立即數(shù)(如0-255bytes).一個(gè)寄存器(不能有偏移操作)。PreorPostIndexed尋址

Pre-indexed:STRr0,[r1,#12]通過(guò)

STRr0,[r1,#12]!來(lái)自動(dòng)更新基址寄存器Post-indexed:STRr0,[r1],#12塊數(shù)據(jù)傳送LDM/STM指令允許一次傳送1到16個(gè)寄存器到/從存儲(chǔ)器中。寄存器傳送順序是固定的,不能被改變最小數(shù)字的寄存器總是被對(duì)應(yīng)到存儲(chǔ)器的最低地址上。LDMIA r10!,{r0,r1,r4}基址寄存器指定存儲(chǔ)器訪問(wèn)開(kāi)始的地址

塊傳送指令針對(duì)下列情況很有效:從存儲(chǔ)器中搬運(yùn)一塊數(shù)據(jù)保存或恢復(fù)堆棧中的內(nèi)容如果是慢速存儲(chǔ)器,會(huì)影響中斷響應(yīng)時(shí)間r1r4r0r10地址增加LDM/STM操作語(yǔ)法:<LDM|STM>{<cond>}<addressing_mode>Rb{!},<寄存器list>4種尋址操作:

LDMIA/STMIA

Increment

After(先操作,后增加)

LDMIB/STMIB

Increment

Before(先增加,后操作)

LDMDA/STMDA

DecrementAfter

(先操作,后遞減)

LDMDB/STMDB

DecrementBefore(先遞減,后操作)LDMxxr10!,{r0,r1,r4}STMxxr10!,{r0,r1,r4}存儲(chǔ)器塊拷貝可選項(xiàng)“

!

”將導(dǎo)致LDM/STM

指令去自動(dòng)更新基址寄存器后綴為IA,IB時(shí),加上4乘以用于傳送的寄存器的數(shù)目的值后綴為DA,DB時(shí),減去4乘以用于傳送的寄存器的數(shù)目的值示例:;r12指向源數(shù)據(jù)起始地址;r14指向源數(shù)據(jù)尾地址;r13指向目的數(shù)據(jù)起始地址loop LDMIA r12!,{r0-r11} STMIA r13!,{r0-r11}CMP r12,r14 BNE loop

堆棧ARM堆棧操作通過(guò)塊傳送指令來(lái)完成:STMFD (Push) 塊存儲(chǔ)-FullDescendingstack[STMDB]LDMFD (Pop) 塊裝載-FullDescendingstack[LDMIA]

STMFDsp!,{r4-r7,lr}r4100r5FFr61234r7A0BElr8034ABCD8765102E16FFFF1010123484209753存儲(chǔ)器頂SPLDMFDsp!,{r4-r7,pc}SP100FF1234AOBE80341010123484209753r41r514544r60r712lr9048pc9020SWP在寄存器和存儲(chǔ)器之間,由一次存儲(chǔ)器讀和一次存儲(chǔ)器寫組成的原子操作。完成一個(gè)字節(jié)或字的交換。語(yǔ)法:

SWP{<cond>}{B}Rd,Rm,[Rn]可用作信號(hào)量操作不能由gcc編譯產(chǎn)生,必須使用匯編器(as)。PSR傳送指令MRS和MSR允許傳送CPSR/SPSR中的內(nèi)容到/從一個(gè)通用寄存器中。語(yǔ)法:

MRS{<cond>}Rd,<psr>;Rd=<psr>

MSR{<cond>}<psr[_fields]>,Rm;<psr[_fields]>=Rm在這里:<psr>=CPSRorSPSR[_fields]=‘fsxc’的任意組合也允許送一個(gè)立即數(shù)到psr_fields

MSR{<cond>}<psr_fields>,#Immediate用戶模式下,所有位均可以被讀取,但只有條件標(biāo)志位(_f)可被寫。協(xié)處理器指令A(yù)RM體系支持16個(gè)協(xié)處理器針對(duì)每個(gè)協(xié)處理器的指令占用ARM指令集中的固定部分如果相應(yīng)的協(xié)處理器不存在,將發(fā)生一個(gè)未定義指令異常。這有三種協(xié)處理器指令協(xié)處理器數(shù)據(jù)處理指令

CDP:初始化協(xié)處理器數(shù)據(jù)處理操作協(xié)處理器寄存器傳送指令

MRC:從協(xié)處理器寄存器移到ARM寄存器

MCR:從ARM寄存器移到協(xié)處理器寄存器協(xié)處理器存儲(chǔ)器傳送指令

LDC:從存儲(chǔ)器裝載到協(xié)處理器寄存器

STC:從協(xié)處理器寄存器存儲(chǔ)到存儲(chǔ)器軟件中斷(SWI)產(chǎn)生一個(gè)異常陷阱,跳轉(zhuǎn)到SWI硬件向量。SWI處理程序可以檢測(cè)SWI號(hào),從而決定采取何種操作。通過(guò)SWI機(jī)制,運(yùn)行在用戶模式下的應(yīng)用程序,可請(qǐng)求操作系統(tǒng)執(zhí)行一系列特權(quán)操作。語(yǔ)法:

SWI{<cond>}<SWInumber>283124270Cond1111SWInumber(ignoredbyprocessor)23條件域第4章ARM匯編程序設(shè)計(jì)數(shù)據(jù)定義(DataDefinition)偽操作數(shù)據(jù)定義偽操作一般用于為特定的數(shù)據(jù)分配存儲(chǔ)單元,同時(shí)可完成已分配存儲(chǔ)單元的初始化。常見(jiàn)的數(shù)據(jù)定義偽操作有如下幾種:.byte單字節(jié)定義

.byte0x12,’a’,23.short定義雙字節(jié)數(shù)據(jù)

.short0x1234,65535.long/.word定義4字節(jié)數(shù)據(jù) .word0x12345678.quad定義8字節(jié)

.quad0x1234567812345678.float 定義浮點(diǎn)數(shù) .float0f3.2.string/.asciz/.ascii定義字符串

.ascii“abcd\0”,

注意:.ascii偽操作定義的字符串需要每行添加結(jié)尾字符‘\0‘,其他不需要匯編控制偽操作匯編控制偽操作用于控制匯編程序的執(zhí)行流程,常用的匯編控制偽操作包括以下幾條:.if、.else

.endif偽操作能根據(jù)條件的成立與否決定是否執(zhí)行某個(gè)指令序列。當(dāng).if后面的邏輯表達(dá)式為真,則執(zhí)行.if后的指令序列,否則執(zhí)行.else后的指令序列;.if、.else、.endif偽指令可以嵌套使用。語(yǔ)法格式:.iflogical-expressing….else….endif雜項(xiàng)偽操作.arm.arm 定義一下代碼使用ARM指令集編譯.thumb.thumb定義一下代碼使用Thumb指令集編譯.section.sectionexpr

定義一個(gè)段。expr可以使.text.data..bss.text.text{subsection}

將定義符開(kāi)始的代碼編譯到代碼段.data.data{subsection}

將定義符開(kāi)始的代碼編譯到數(shù)據(jù)段,初始化數(shù)據(jù)段.bss.bss{subsection}

將變量存放到.bss段,未初始化數(shù)據(jù)段.align.align{alignment}{,fill}{,max}通過(guò)用零或指定的數(shù)據(jù)進(jìn)行填充來(lái)使當(dāng)前位置與指定邊界對(duì)齊_start匯編程序的缺省入口是,用戶也可以在連接腳本文件中用ENTRY標(biāo)志指明其它入口點(diǎn).global/.globl

用來(lái)聲明一個(gè)全局的符號(hào).end文件結(jié)束數(shù)據(jù)定義(DataDefinition)偽操作.include格式:.include“filename”

包含指定的頭文件,可以把一個(gè)匯編常量定義放在頭文件中.equ格式:.equsymbol,expression把某一個(gè)符號(hào)(symbol)定義成某一個(gè)值(expression).該指令并不分配空間.(c語(yǔ)言的#define)偽指令A(yù)DR偽指令:ADR偽指令為小范圍地址讀取偽指令,ADR偽指令將基于PC相對(duì)偏移地址或基于寄存器相對(duì)偏移地址值讀取到寄存器中,當(dāng)?shù)刂分凳亲止?jié)對(duì)齊時(shí),取值范圍為?255~255,當(dāng)?shù)刂分凳亲謱?duì)齊時(shí),取值范圍為?1020~1020。

語(yǔ)法格式:ADR{cond}register,labelADRL偽指令:ADRL偽指令為中等范圍地址讀取偽指令。ADRL偽指令將基于PC相對(duì)偏移的地址或基于寄存器相對(duì)偏移的地址值讀取到寄存器中,當(dāng)?shù)刂分凳亲止?jié)對(duì)齊時(shí),取值范圍為?64~64KB;當(dāng)?shù)刂分凳亲謱?duì)齊時(shí),取值范圍為?256~256KB,

語(yǔ)法格式:ADRL{cond}register,labelLDR偽指令:LDR偽指令裝載一個(gè)32位的常數(shù)和一個(gè)地址到寄存器。 LDR{cond}register,=[expr|label-expr]

語(yǔ)法格式:LDRR0,=0XFFFF0000C/匯編的混合編程混合編程的優(yōu)勢(shì)ATPCS標(biāo)準(zhǔn)寄存器用名GCC內(nèi)聯(lián)匯編GCC內(nèi)聯(lián)匯編語(yǔ)法C和匯編的混合編程優(yōu)勢(shì)C和匯編能很容易的混合:可實(shí)現(xiàn)在c中無(wú)法實(shí)現(xiàn)的處理器功能使用新的或不支持的指令產(chǎn)生更高效的代碼直接鏈接變量和程序確定符合程序調(diào)用規(guī)范輸入/輸出相關(guān)的符號(hào)編譯器也可保留內(nèi)嵌匯編大多數(shù)arm指令都可實(shí)現(xiàn)內(nèi)嵌匯編代碼可由編譯器的優(yōu)化器來(lái)傳遞ATPCS(arm/thumb程序調(diào)用規(guī)范)開(kāi)始四個(gè)字大小的參數(shù)直接使用寄存器的R0-R3來(lái)傳遞(快速且高效的)更多的信息可參看ATPCS如果需要更多的參數(shù),將使用堆棧。(需要額外的指令和慢速的存儲(chǔ)器操作)所以通常限制參數(shù)的個(gè)數(shù),使它為4或更少。如果不可避免,把常用的參數(shù)放在前4個(gè)使用滿減棧C程序中調(diào)用匯編在匯編程序中用exportname來(lái)定義在C程序中直接調(diào)用一般的鏈接即可externvoidmystrcopy(char*d,constchar*s);intmain(void){constchar*src=“Source”;

chardest[10];...

mystrcopy(dest,src);...}這里所有的參數(shù)都是可以用寄存器來(lái)傳遞的,所以不需要在匯編程序中使用PUSH/POP來(lái)保護(hù).globalmystrcopy.textmystrcopy:LDRBr2,[r1],#1STRBr2,[r0],#1CMPr2,#0BNEmystrcopyMOVpc,lrENDCALLGCC內(nèi)聯(lián)匯編Gcc通過(guò)關(guān)鍵字“asm”來(lái)聲明內(nèi)聯(lián)匯編。允許使用一些不能由編譯器自動(dòng)生成的指令:MSR/MRS新的指令協(xié)處理器指令通常在關(guān)聯(lián)的內(nèi)嵌函數(shù)中使用使用C變量代替寄存器不是一個(gè)真正的匯編文件通過(guò)優(yōu)化器實(shí)現(xiàn)intadd(unsignedinta,unsigendintb){intsum;asmvolatile ( “add%0,%1,%2\n\t” :”=r”(sum):”r”(a),”r”(b) :”memory”

); returnsum;}intadd(unsignedinta,unsignedintb)

{

intsum;asmvolatile (

“add%[op1],%[op2],%[op3]\n” :[op1]”=r”(sum) :[op2]”r”(a),[op3]”r”(b) :”memory” ); returnsum;}內(nèi)嵌匯編語(yǔ)法格式通用的內(nèi)嵌匯編語(yǔ)法格式是這樣的:asm(code:outputoperandlist:inputoperandlist:clobberlist);每一個(gè)asm語(yǔ)句被冒號(hào)(:)分成了四個(gè)部分。匯編指令放在第一部分中的“”中間:“addr0,%1,%2\n\t”接下來(lái)是冒號(hào)后的可選擇的outputoperandlist,每一個(gè)條目是由一對(duì)[](方括號(hào))和被他包括的符號(hào)名組成,它后面跟著限制性字符串,再后面是圓括號(hào)和它括著的C變量::”=r”(sum)接著冒號(hào)后面是輸入操作符列表,它的語(yǔ)法和輸入操作列表一樣:

:”r”(a),”r”(b)

破壞符列表::”r0”注意:asm聲明的4個(gè)部分中,只要最尾部沒(méi)有使用的部分都可以省略。但是有一點(diǎn)要注意的是,上面的4個(gè)部分中只要后面的還要使用,前面的部分沒(méi)有使用也不能省略,可以空但是保留冒號(hào)。使用“volatile”第5章GPIO編程GPIOGPIO的英文全稱為General-PurposeIOports,也就是通用IO接口。在嵌入式系統(tǒng)中常常有數(shù)量眾多,但是結(jié)構(gòu)比較簡(jiǎn)單,很多外部設(shè)備/電路需要CPU為之提供控制手段,有的則需要被CPU用做輸入信號(hào)在實(shí)際的MCU中,GPIO是有多種形式的Exynos4412GPIO接口簡(jiǎn)介Exynos4412中有304個(gè)復(fù)用功能的GPIO,這些引腳被分為37個(gè)組包含了172個(gè)外部中斷其中252個(gè)引腳的功能是復(fù)用的部分引腳還有睡眠模式相關(guān)寄存器使用的寄存器GPIO接口開(kāi)發(fā)注意事項(xiàng)方向電壓驅(qū)動(dòng)能力輸入阻抗——輸入電流第6章ARM異常及中斷處理異常處理當(dāng)異常產(chǎn)生時(shí),ARMcore:拷貝CPSR到SPSR_<mode>設(shè)置適當(dāng)?shù)腃PSR位:改變處理器狀態(tài)進(jìn)入ARM狀態(tài)改變處理器模式進(jìn)入相應(yīng)的異常模式設(shè)置中斷禁止位禁止相應(yīng)中斷(如果需要)保存返回地址到LR_<mode>設(shè)置PC為相應(yīng)的異常向量返回時(shí),異常處理需要:從SPSR_<mode>恢復(fù)CPSR從LR_<mode>恢復(fù)PC

Note:這些操作只能在ARM態(tài)執(zhí)行.異常返回指令異常返回:使用一數(shù)據(jù)處理指令:相應(yīng)的指令取決于什么樣的異常在特權(quán)模式不僅僅更新PC,

而且拷貝SPSR到CPSR指令帶有“S”后綴PC做為目的寄存器從SWI和Undef異常返回

MOVSpc,lr從FIQ,IRQ和預(yù)取異常(PrefectAbort)返回

SUBSpc,lr,#4從數(shù)據(jù)異常(DataAbort)返回

SUBSpc,lr,#8

如果LR之前被壓棧的話使用LDM“^”

LDMFDsp!,{pc}^異常優(yōu)先級(jí)異常在當(dāng)前指令執(zhí)行完成之后才被響應(yīng)多個(gè)異??梢栽谕粫r(shí)間產(chǎn)生異常指定了優(yōu)先級(jí)和固定的服務(wù)順序:ResetDataAbortFIQIRQPrefetchAbortSWIUndefinedinstruction異常處理中的與異常發(fā)生相關(guān)的模式改變意味著所調(diào)用的異常處理程序至少要訪問(wèn):私有的SP_<mode>(stackpointer).私有的LR_<mode>(linkregister).私有的SPSR_<mode>(savedprogramstatusregister).在FIQ異常處理中,另有5個(gè)私有的通用寄存器(r8_fiqtor12_fiq).其它的寄存器是所有模式共用的.異常處理程序必須確保其他的寄存器在退出前恢復(fù)到原來(lái)的狀態(tài)這可以通過(guò)將任何正在使用的寄存器的內(nèi)容保存在堆棧中,并在返回前恢復(fù)來(lái)實(shí)現(xiàn)任何所需寄存器的初始化要有應(yīng)用程序的起始代碼來(lái)完成中斷處理ARM有兩級(jí)外部中斷FIQ,IRQ.可是大多數(shù)的基于ARM的系統(tǒng)有>2個(gè)的中斷源!因此需要一個(gè)中斷控制器(通常是地址映射的)來(lái)控制中斷是怎樣傳遞給ARM的。在許多系統(tǒng)中,一些中斷的優(yōu)先級(jí)比其它中斷的優(yōu)先級(jí)高,他們要搶先任何正在處理的低優(yōu)先級(jí)中斷。 Note:通常中斷處理程序總是應(yīng)該包含清除中斷源的代碼。FIQvsIRQFIQ和IRQ提供了非?;镜膬?yōu)先級(jí)級(jí)別。FIQs有高于IRQs的優(yōu)先級(jí),表現(xiàn)在下面2個(gè)方面:當(dāng)多個(gè)中斷產(chǎn)生時(shí),CPU優(yōu)先處理FIQ.處理FIQ時(shí)禁止IRQs.IRQs將不會(huì)被響應(yīng)直到FIQ處理完成.FIQs的設(shè)計(jì)使中斷響應(yīng)盡可能的快.FIQ向量位于異常向量表的最末.異常處理程序可從異常量處連續(xù)執(zhí)行FIQ模式有5個(gè)額外的私有寄存器(r8-r12)中斷處理必須保護(hù)其使用的非私有寄存器可以有多個(gè)IRQ中斷源,但是考慮到系統(tǒng)性能應(yīng)避免嵌套。第7章串行通信接口串行通信的基本概念在通信領(lǐng)域內(nèi),有兩種數(shù)據(jù)通信方式:并行通信和串行通信串口的數(shù)據(jù)傳輸是以串行方式進(jìn)行的。串口在數(shù)據(jù)通信中,一次只傳輸一個(gè)比特的數(shù)據(jù)。串行數(shù)據(jù)的傳輸速度用bps或波特率來(lái)描述。串行通信涉及的常用術(shù)語(yǔ)單工、半雙工和全雙工單工(Simplex)特點(diǎn):僅能進(jìn)行一個(gè)方向的數(shù)據(jù)傳送半雙工(HalfDuplex)特點(diǎn):數(shù)據(jù)可以在兩個(gè)方向上進(jìn)行傳送,但是這種傳送絕不能同時(shí)進(jìn)行全雙工(FullDuplex)特點(diǎn):能夠在兩個(gè)方向同時(shí)進(jìn)行數(shù)據(jù)傳送數(shù)據(jù)傳輸率每秒傳輸?shù)亩M(jìn)制位數(shù),單位為bps(bitpersecond)也稱比特率串行通信涉及的常用術(shù)語(yǔ)異步方式與同步方式同步通信方式(Synchronous)所用的數(shù)據(jù)格式?jīng)]有起始位、停止位,一次傳送的字符個(gè)數(shù)可變。在傳送前,先按照一定的格式將各種信息裝配成一個(gè)包,該包包括供接收方識(shí)別用的同步字符一個(gè)或兩個(gè),其后緊跟著要傳送的n個(gè)字符,再后就是校驗(yàn)字符。異步方式(Asynchronous):也稱“起止同步式”。串行通信涉及的常用術(shù)語(yǔ)硬件流控制如果打開(kāi)串口硬件流控制后,串口A只有在nCTS被(串口B的nRTS)激活后才能把數(shù)據(jù)發(fā)送出去;當(dāng)串口A可以接收數(shù)據(jù)時(shí),激活nRTSExynos4412UART接口功能模塊Exynos4412相關(guān)寄存器第8章PWM定時(shí)器PWM的概念PWM(PulseWidthModulation):脈沖寬度調(diào)制占空比:就是輸出的PWM中,高電平保持的時(shí)間與該P(yáng)WM的時(shí)鐘周期的時(shí)間之比PWM應(yīng)用它是利用微處理器的數(shù)字輸出來(lái)對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù),廣泛應(yīng)用于測(cè)量,通信,功率控制與變換等許多領(lǐng)域。脈沖寬度調(diào)制(PWM)是一種對(duì)模擬信號(hào)電平進(jìn)行數(shù)字編碼的方法。通過(guò)高分辨率計(jì)數(shù)器的使用,方波的占空比被調(diào)制用來(lái)對(duì)一個(gè)具體模擬信號(hào)的電平進(jìn)行編碼。常見(jiàn)應(yīng)用有:電機(jī)控制,DAC輸出等Exynos4412PWM控制器特性在Exynos4412中,一共有5個(gè)32位的定時(shí)器,定時(shí)器0、1、2、3包含了脈沖寬度調(diào)制(PWM),并可驅(qū)動(dòng)其外部的I/O口定時(shí)器0有可選的dead-zone功能,以支持大電流設(shè)備Exynos4412PWM控制器原理Exynos4412PWM控制器框圖第9章看門狗定時(shí)器看門狗的概念門狗定時(shí)器主要用來(lái)將受到外界干擾無(wú)法正常運(yùn)行的芯片重新啟動(dòng),其在實(shí)際項(xiàng)目和產(chǎn)品中有重大意義對(duì)產(chǎn)品穩(wěn)定性的提高有很大幫助Exynos4412看門狗定時(shí)器原理啟動(dòng)看門狗后,必須在看門狗復(fù)位之前向特定寄存器中寫入數(shù)值,不讓看門狗定時(shí)器溢出,這樣看門狗就會(huì)重新計(jì)時(shí)。當(dāng)用戶程序溢出時(shí)在規(guī)定時(shí)間內(nèi)沒(méi)有向特定寄存器中依次寫入數(shù)值,看門狗定時(shí)器計(jì)數(shù)溢出,引起看門狗復(fù)位,看門狗產(chǎn)生一個(gè)強(qiáng)制系統(tǒng)復(fù)位。這樣可以使程序重新運(yùn)行Exynos4412看門狗定時(shí)器相關(guān)寄存器第10章RTC定時(shí)器實(shí)時(shí)時(shí)鐘(RRTC)概念實(shí)時(shí)時(shí)鐘(REALTIMECLOCK)英文縮寫也叫RTC計(jì)算機(jī)系統(tǒng)通常需要一個(gè)能夠記錄時(shí)間的功能單元,在系統(tǒng)關(guān)閉后依然可以記錄時(shí)間,這個(gè)功能單元就叫實(shí)時(shí)時(shí)鐘單元。實(shí)時(shí)時(shí)鐘通??梢蕴峁┠?、月、日、時(shí)、分、秒等信息。有些還可以提供定時(shí)等功能。Exynos4412實(shí)時(shí)時(shí)鐘單元BCD碼的年、月、日、星期、小時(shí)、分鐘、秒輸出功能Alarm定時(shí)喚醒功能獨(dú)立的電源供電管腳(RTCVDD)為RTOS提供毫秒級(jí)的定時(shí)時(shí)鐘晶振選取32.768HZExynos4412實(shí)時(shí)時(shí)鐘相關(guān)寄存器第11章AD轉(zhuǎn)換器A/D轉(zhuǎn)換的概念A(yù)/D轉(zhuǎn)換是將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),被廣泛應(yīng)用于控制領(lǐng)域分辯率(Resolution)指數(shù)字量變化一個(gè)最小量時(shí)模擬信號(hào)的變化量轉(zhuǎn)換速率(Conversion

Rate)是指完成一次從模擬轉(zhuǎn)換到數(shù)字的AD轉(zhuǎn)換所需的時(shí)間的倒數(shù)量化誤差(Quantizing

Error)

由于AD的有限分辯率而引起的誤差線性度(Linearity)實(shí)際轉(zhuǎn)換器的轉(zhuǎn)移函數(shù)與理想直線的最大偏移,不包括以上三種誤差。Exynos4412A/D轉(zhuǎn)換器特點(diǎn)Exy

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論