LPC2000系列微處理器組成與中斷技術(shù).ppt
《LPC2000系列微處理器組成與中斷技術(shù).ppt》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《LPC2000系列微處理器組成與中斷技術(shù).ppt(132頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1,5.1LPC2000系列簡(jiǎn)介5.2芯片內(nèi)部結(jié)構(gòu)5.3存儲(chǔ)器結(jié)構(gòu)5.4系統(tǒng)控制模塊5.5中斷技術(shù)5.6向量中斷控制器,LPC2000系列微處理器組成與中斷技術(shù),2,5.1LPC2000系列芯片簡(jiǎn)介,嵌入式處理器常見(jiàn)的有ARM、PowerPC、MIPS、Motorola68K等,其中ARM占據(jù)了絕對(duì)主流。基于ARM平臺(tái)的嵌入式系統(tǒng)設(shè)計(jì)在工業(yè)控制、無(wú)線(xiàn)通訊、網(wǎng)絡(luò)應(yīng)用、消費(fèi)類(lèi)電子產(chǎn)品、成像和安全產(chǎn)品等領(lǐng)域內(nèi)均有廣泛地應(yīng)用。ARM處理器根據(jù)其應(yīng)用及其特點(diǎn),分為控制類(lèi)芯片、特殊應(yīng)用類(lèi)芯片、數(shù)字信號(hào)處理器、消費(fèi)類(lèi)電子的嵌入式芯片以及安全芯片??刂祁?lèi)芯片要求相對(duì)較低,具有中斷控制器、片內(nèi)存儲(chǔ)器;應(yīng)用處理器具有MMU、支持SDRAM、附帶LCD控制器或接口并具有DMA;消費(fèi)類(lèi)電子的嵌入式芯片一般具有較強(qiáng)的專(zhuān)業(yè)性;數(shù)字信號(hào)處理器通過(guò)使用協(xié)處理器和DSP等方式提高運(yùn)算能力;安全芯片使用專(zhuān)門(mén)的SecurCore內(nèi)核。,3,5.1LPC2000系列芯片簡(jiǎn)介,ARM系列種類(lèi)繁多,本章我們主要討論一般控制類(lèi)的芯片,以NXP公司LPC2000系列處理器為例進(jìn)行介紹。LPC2000系列微控制器基于ARM7TDMI-SCPU內(nèi)核。支持ARM和Thumb指令集,芯片內(nèi)集成豐富外設(shè),而且具有非常低的功率消耗。使該系列微控制器特別適用于工業(yè)控制、醫(yī)療系統(tǒng)、訪(fǎng)問(wèn)控制和POS機(jī)等場(chǎng)合。,簡(jiǎn)介,LPC2100系列LPC2200系列LPC2300系列LPC2400系列LPC2800系列,,4,5.1.1LPC2100系列芯片,LPC2100系列MCU基于一個(gè)支持實(shí)時(shí)仿真和跟蹤的16/32位ARM7TDMI-SCPU,并帶有128/256KB嵌入的高速Flash存儲(chǔ)器。128位寬度的存儲(chǔ)器接口和獨(dú)特的加速結(jié)構(gòu)使32位代碼能夠在最大時(shí)鐘速率下運(yùn)行。如果在實(shí)際應(yīng)用中對(duì)代碼規(guī)模有嚴(yán)格控制,使用16位Thumb模式可將代碼規(guī)模降低超過(guò)30%,而性能的損失卻很小。,5,LPC2100系列MCU主要特點(diǎn):,16/32位ARM7TDMI-S核,超小LQFP和HVQFN封裝;16/32/64kB片內(nèi)SRAM;128/256kB片內(nèi)Flash程序存儲(chǔ)器;128位寬度接口/加速器可實(shí)現(xiàn)高達(dá)60MHz工作頻率;通過(guò)片內(nèi)boot裝載程序?qū)崿F(xiàn)在系統(tǒng)編程(ISP)和在應(yīng)用編程(IAP);EmbeddedICE可實(shí)現(xiàn)斷點(diǎn)和觀(guān)察點(diǎn);嵌入式跟蹤宏單元(ETM)支持對(duì)執(zhí)行代碼進(jìn)行無(wú)干擾的高速實(shí)時(shí)跟蹤;10位A/D轉(zhuǎn)換器,轉(zhuǎn)換時(shí)間低至2.44μs;CAN接口,帶有先進(jìn)的驗(yàn)收濾波器;包括2個(gè)16C550工業(yè)標(biāo)準(zhǔn)UART、高速I(mǎi)2C接口(400kHz)和2個(gè)SPI接口。,6,表5.1LPC2100系列MCU參數(shù)規(guī)格,7,5.1.2LPC2200系列芯片特點(diǎn):,處理器和封裝:16/32位ARM7TDMI-S微控制器,LQFP144和TFBGA144封裝;RAM:16/64kB片內(nèi)靜態(tài)RAM(LPC2210/LPC2220);串行boot裝載程序通過(guò)UART0來(lái)實(shí)現(xiàn)在系統(tǒng)下載和編程;調(diào)試:EmbeddedICE-RT和嵌入式跟蹤接口使用片內(nèi)RealMonitor軟件對(duì)任務(wù)進(jìn)行實(shí)時(shí)調(diào)試;支持對(duì)執(zhí)行代碼進(jìn)行無(wú)干擾的高速實(shí)時(shí)跟蹤;8路10位A/D轉(zhuǎn)換器,轉(zhuǎn)換時(shí)間低至2.44μs;定時(shí)器:2個(gè)32位定時(shí)器(LPC2220也具有外部事件計(jì)數(shù)器)帶4路捕獲和4路比較通道;PWM單元(6路輸出)、實(shí)時(shí)時(shí)鐘(RTC)和看門(mén)狗;串口:包括2個(gè)16C550工業(yè)標(biāo)準(zhǔn)UART、高速I(mǎi)2C總線(xiàn)(400kbit/s)和2個(gè)SPI接口;在LPC2220上,可選擇帶有數(shù)據(jù)緩沖區(qū)和可變長(zhǎng)度傳輸?shù)耐酱锌?SSP)來(lái)代替一個(gè)SPI;,8,LPC2200系列MCU芯片資源及特點(diǎn)(續(xù)),向量中斷控制器(VIC),可配置優(yōu)先級(jí)和向量地址;外存:通過(guò)外部存儲(chǔ)器接口可將存儲(chǔ)器配置成4組,每組的容量高達(dá)16Mb,數(shù)據(jù)寬度為8/16/32位;多達(dá)76個(gè)通用I/O口(可承受5V電壓)。可使用9個(gè)邊沿或電平觸發(fā)的外部中斷管腳;通過(guò)可編程的片內(nèi)鎖相環(huán)(PLL)可實(shí)現(xiàn)最大為60/75MHz(LPC2210/2220)的CPU操作頻率;頻率:帶外部晶體的片內(nèi)振蕩器頻率范圍:1~30MHz,外部振蕩器的頻率高達(dá)50MHz;2個(gè)低功耗模式:空閑和掉電;喚醒:通過(guò)外部中斷將處理器從掉電模式中喚醒;優(yōu)化功耗:通過(guò)個(gè)別使能/禁止外部功能來(lái)優(yōu)化功耗;雙電源,CPU操作電壓范圍:1.65V1.95V(1.8V0.15V);I/O操作電壓范圍:3.03.6V(3.3V10%),I/O口可承受5V電壓。,9,表5.2LPC2200系列MCU參數(shù)規(guī)格表,10,5.1LPC2100/2200系列簡(jiǎn)介,器件信息,關(guān)于LPC2000其它器件的介紹請(qǐng)登錄“LPC2000系列ARM”專(zhuān)欄,11,5.1LPC2000系列簡(jiǎn)介5.2芯片內(nèi)部結(jié)構(gòu)5.3存儲(chǔ)器結(jié)構(gòu)5.4系統(tǒng)控制模塊5.5中斷技術(shù)5.6向量中斷控制器,LPC2000系列微處理器組成與中斷技術(shù),12,5.2芯片內(nèi)部結(jié)構(gòu),LPC2000系列微控制器包含4大部分:,13,5.2芯片內(nèi)部結(jié)構(gòu),,,,,,LPC2200系列芯片內(nèi)部結(jié)構(gòu)如圖5.1所示,芯片內(nèi)部有三種總線(xiàn),分別是局部總線(xiàn)、AHB和VPB,14,5.1LPC2000系列簡(jiǎn)介5.2芯片內(nèi)部結(jié)構(gòu)5.3存儲(chǔ)器結(jié)構(gòu)5.4系統(tǒng)控制模塊5.5中斷技術(shù)5.6向量中斷控制器,LPC2000系列微處理器組成與中斷技術(shù),15,嵌入式系統(tǒng)中存儲(chǔ)器部分按其位置分為片內(nèi)和片外存儲(chǔ)器,其存儲(chǔ)器主要分為RAM、ROM和FlashMemory。Flashmemory(閃速存儲(chǔ)器)是嵌入式系統(tǒng)中重要的組成部分,用來(lái)存儲(chǔ)程序和數(shù)據(jù)。FlashMemory是一種非易失性存儲(chǔ)器NVM(Non-VolatileMemory),掉電后數(shù)據(jù)不會(huì)丟失,但在使用FlashMemory時(shí),必須根據(jù)其自身特性,對(duì)存儲(chǔ)系統(tǒng)進(jìn)行特殊設(shè)計(jì),以保證系統(tǒng)的性能達(dá)到最優(yōu)。,5.3存儲(chǔ)器結(jié)構(gòu),16,5.3存儲(chǔ)器尋址,5.3.1存儲(chǔ)器映射5.3.2片內(nèi)存儲(chǔ)器5.3.3片外存儲(chǔ)器5.3.4存儲(chǔ)器重映射及引導(dǎo)塊5.3.5啟動(dòng)代碼相關(guān)部分,17,LPC2000系列微處理器的片內(nèi)儲(chǔ)存器大小,1MB,,512KB,,64KB,32KB,256KB,128KB,64KB,,,32KB,16KB,,,LPC2104LPC2114LPC2119LPC2134LPC2144LPC2212,,,,8KB,,,LPC2210LPC2290,LPC2220LPC2880,片內(nèi)SRAM,,0KB,4KB,2KB,16KB,8KB,LPC2124LPC2194LPC2129LPC2214LPC2292LPC2294,LPC2136LPC2146,,LPC2103LPC2131LPC2141,,,LPC2101,,,LPC2102,LPC2105,LPC2106,LPC2132LPC2142,LPC2138LPC2148,,LPC2888,片內(nèi)Flash,LPC2101,LPC2102,LPC2103LPC2131LPC2141,LPC2210LPC2290,LPC2132LPC2142,LPC2104LPC2114LPC2119LPC2134LPC2144LPC2212,LPC2124LPC2194LPC2129LPC2214LPC2292LPC2294,LPC2105,LPC2136LPC2146,LPC2220LPC2880,LPC2138LPC2148,LPC2106,LPC2888,18,概述,5.3.1存儲(chǔ)器映射,ARM芯片存儲(chǔ)器分布可以在片內(nèi)和片外,這些存儲(chǔ)器本身不具有地址信息,它們?cè)谛酒械牡刂肥怯尚酒瑥S(chǎng)家或用戶(hù)分配的。給物理存儲(chǔ)器分配邏輯地址的過(guò)程稱(chēng)為存儲(chǔ)器映射。通過(guò)這些邏輯地址就可以訪(fǎng)問(wèn)到相應(yīng)存儲(chǔ)器的物理存儲(chǔ)單元。,19,LPC2210存儲(chǔ)器地址分布,圖5.2LPC2210存儲(chǔ)器地址分布,ARM芯片存儲(chǔ)器分布可以在片內(nèi)和片外,地址從低到高分布有片內(nèi)FLASH、片內(nèi)SRAM、BOOTBLOCK、保留的外存儲(chǔ)器空間、VPB外設(shè)以及AHB外設(shè)。,20,系統(tǒng)存儲(chǔ)器映射,5.3.1存儲(chǔ)器映射,256KB片內(nèi)非失憶性存儲(chǔ)器(LPC2124/2214),2MBAHB外設(shè),128KB片內(nèi)非失憶性存儲(chǔ)器(LPC2114/2212),16KB片內(nèi)靜態(tài)RAM,8KBBootBlock(片內(nèi)ROM存儲(chǔ)器重映射),2MBVPB外設(shè),16MBBank0,保留,保留給片內(nèi)RAM存儲(chǔ)器,保留給片內(nèi)FLASH存儲(chǔ)器,16MBBank1,16MBBank2,16MBBank3,,,,,保留給片外存儲(chǔ)器,用戶(hù)所見(jiàn)存儲(chǔ)器的分布,圖5.3系統(tǒng)存儲(chǔ)器地址映射,21,ARM存儲(chǔ)器映射空間,ARM7TDMI的存儲(chǔ)器映射空間0X00000000~0XFFFFFFFF起始地址依次為:FLASH——0X00000000,SRAM——0X40000000,BOOTBLOCK,外部存儲(chǔ)器0X80000000,VPB(低速外設(shè)地址)——0XE0000000,AHB(高速外設(shè):向量中斷控制器,外部存儲(chǔ)器控制器)——從0XFFFFFFFF回頭。,22,5.3.1存儲(chǔ)器映射,AHB和VPB,AHB(先進(jìn)的高性能總線(xiàn))和VPB(VLSI外設(shè)總線(xiàn))外設(shè)區(qū)域都為2M字節(jié),可各分配128個(gè)外設(shè)。每個(gè)外設(shè)空間的規(guī)格都為16K字節(jié),這樣就簡(jiǎn)化了每個(gè)外設(shè)的地址譯碼。,注意:外設(shè)寄存器的地址都是字對(duì)齊。AHB和VPB外設(shè)區(qū)域中不管是字還是半字,都是一次性訪(fǎng)問(wèn)。例如不可能對(duì)一個(gè)字寄存器的最高字節(jié)執(zhí)行單獨(dú)的讀或?qū)懖僮鳌?23,外設(shè)存儲(chǔ)器映射,5.3.1存儲(chǔ)器映射,注:AHB和VPB均為128x16kB(2MB)范圍。,24,AHB外設(shè)映射,5.3.1存儲(chǔ)器映射,注:只有LPC2200系列微處理器有外部總線(xiàn)控制器,25,VPB外設(shè)映射,4.3.3存儲(chǔ)器映射,26,5.3.2片內(nèi)存儲(chǔ)器,LPC2000系列中除了LPC2210/2220/2290外,其它的ARM微處理器內(nèi)部都帶有容量不等的Flash,這為ARM芯片的單片應(yīng)用帶來(lái)可能。片內(nèi)Flash通過(guò)128位寬度的總線(xiàn)與ARM內(nèi)核相連,具有很高的速度,加上特有的存儲(chǔ)器加速功能,因此可以將程序直接放在Flash上運(yùn)行。,片內(nèi)FLASH程序存儲(chǔ)器,27,5.3.2片內(nèi)存儲(chǔ)器,片內(nèi)Flash編程方法,1.使用JTAG仿真/調(diào)試器,通過(guò)芯片的JTAG接口下載程序;,2.使用在系統(tǒng)編程技術(shù)(即ISP),通過(guò)UART0接口下載程序;,3.使用在應(yīng)用編程技術(shù)(即IAP),在用戶(hù)程序運(yùn)行時(shí)對(duì)Flash進(jìn)行擦除和/或編程操作,實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)和固件的現(xiàn)場(chǎng)升級(jí)。,,,,,,,,,,,JTAG,,UART0,28,5.3.2片內(nèi)存儲(chǔ)器,LPC2000系列微控制器的片內(nèi)RAM為靜態(tài)RAM(SRAM),它們可用作代碼和/或數(shù)據(jù)的存儲(chǔ)。SRAM支持8位、16位和32位的讀寫(xiě)訪(fǎng)問(wèn)。,片內(nèi)靜態(tài)RAM,29,5.3.3片外存儲(chǔ)器,概述,在CPU外部擴(kuò)展連接的存儲(chǔ)器芯片稱(chēng)為片外存儲(chǔ)器,這些器件通常都具有數(shù)據(jù)線(xiàn)、地址線(xiàn)和控制線(xiàn)等。主要器件有ROM、FLASH、SRAM等。,,Bank0,Bank1,Bank2,Bank3,,,,,LPC2200,每個(gè)Bank尋址空間:16M字節(jié);數(shù)據(jù)寬度:8/16/32位。,30,5.3.3片外存儲(chǔ)器,片外Flash編程方法,Flash的擦寫(xiě)操作需要配合一段符合Flash編程時(shí)序的代碼,這段代碼稱(chēng)為裝載程序,一般由用戶(hù)編寫(xiě)。,,,程序代碼(源),程序代碼(目標(biāo)),Loader,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,下載用戶(hù)代碼時(shí),首先得在CPU內(nèi)運(yùn)行裝載程序,通過(guò)它把從串口(或其它接口)接收的代碼寫(xiě)到片外Flash中。,31,5.3.4存儲(chǔ)器重映射及引導(dǎo)塊,存儲(chǔ)器重映射,將已經(jīng)過(guò)映射的存儲(chǔ)器再次映射的過(guò)程稱(chēng)為存儲(chǔ)器重映射,它使同一物理存儲(chǔ)單元出現(xiàn)多個(gè)不同的邏輯地址。這些存儲(chǔ)單元主要包括引導(dǎo)塊“BootBlock”和用于保存異常向量表的少量存儲(chǔ)單元。,Addr1,0 x1234,0 x1234,,,注意:存儲(chǔ)器重映射并不是對(duì)映射單元的內(nèi)容進(jìn)行了復(fù)制,而只是將多個(gè)地址指向了同一個(gè)存儲(chǔ)單元,這種效果是通過(guò)芯片內(nèi)部的“存儲(chǔ)器管理部件”實(shí)現(xiàn)的。,32,5.3.4存儲(chǔ)器重映射及引導(dǎo)塊,存儲(chǔ)器映射:為存儲(chǔ)器分配地址的過(guò)程.存儲(chǔ)器重映射:為了增加系統(tǒng)的靈活性,系統(tǒng)中有部分地址可以同時(shí)出現(xiàn)在不同的地址上,這就叫做存儲(chǔ)器重映射。包括引導(dǎo)塊“BootBlock”重映射和異常向量表的重映射。1.引導(dǎo)塊“BootBlock”及其重映射引入的原因:BootBlock中有些程序可被用戶(hù)調(diào)用,如擦寫(xiě)片內(nèi)Flash的IAP代碼。為了增加用戶(hù)代碼的可移植性,所以最好把BootBlock的代碼固定的某個(gè)地址上。但由于各芯片的片內(nèi)Flash大小不盡相同,如果把BootBlock的地址安排在內(nèi)部Flash結(jié)束的位置上,那就無(wú)法固定BootBlock的地址。廠(chǎng)家為了BOOTBLOCK在芯片中的位置固定,就在編址的2G靠前編址的位置虛擬劃分一個(gè)區(qū)域作為BOOTBLOCK區(qū)域,這就是重映射,這樣訪(fǎng)問(wèn)<2G即<0X80000000的位置時(shí),就可以訪(fǎng)問(wèn)到在FLASH尾部的BOOTBLOCK區(qū)了。,33,5.3.4存儲(chǔ)器重映射及引導(dǎo)塊,1.引導(dǎo)塊及其重映射,引導(dǎo)塊(BootBlock)是芯片設(shè)計(jì)廠(chǎng)家在LPC2000系列ARM內(nèi)部固化的一段代碼,用戶(hù)無(wú)法修改或刪除。這段代碼在芯片復(fù)位后被首先運(yùn)行,其功能主要是:,判斷運(yùn)行哪個(gè)存儲(chǔ)器上的程序;檢查用戶(hù)代碼是否有效;判斷芯片是否被加密;芯片的在應(yīng)用編程(IAP)以及在系統(tǒng)編程功能(ISP)。,注意:部分器件內(nèi)部雖然沒(méi)有用戶(hù)Flash空間(比如LPC2210/2220/2290),但它們?nèi)匀淮嬖贐ootBlock,并且復(fù)位后會(huì)被首先運(yùn)行。,34,5.3.4存儲(chǔ)器重映射及引導(dǎo)塊,引導(dǎo)塊在存儲(chǔ)器中的狀態(tài),LPC2200系列芯片的BootBlock為8KB大小,它們占用了用戶(hù)的Flash空間。,LPC2130系列芯片的BootBlock為12KB大小,除了LPC2138占用用戶(hù)的Flash空間外,該系列中其它的芯片不占用用戶(hù)Flash空間。,35,,BootBlock重新映射,,BootBlock重新映射,5.3.4存儲(chǔ)器重映射及引導(dǎo)塊,BootBlock,BootBlock,引導(dǎo)塊(BootBlock)的重映射,36,引入原因:由于ARM處理器的存儲(chǔ)器結(jié)構(gòu)比較復(fù)雜,可能同時(shí)存在片內(nèi)存儲(chǔ)器和片外存儲(chǔ)器等,他們?cè)诖鎯?chǔ)器映射上的起始地址都不一樣,因此ARM內(nèi)核要訪(fǎng)問(wèn)的中斷向量表可能不在0 x0000~0 x003F地址上,因此采用了存儲(chǔ)器重映射來(lái)實(shí)現(xiàn)將存在與不同地方的中斷向量表都映射到0 x0000~0 x003F地址上。ARM內(nèi)核在發(fā)生異常后,會(huì)使程序跳轉(zhuǎn)到0 x0000~0 x001C的異常向量表處,再經(jīng)過(guò)向量跳轉(zhuǎn)到異常服務(wù)程序。但ARM單條指令的尋址范圍有限,無(wú)法用一條指令實(shí)現(xiàn)4G范圍的跳轉(zhuǎn),所以應(yīng)在其后面的0 x0020~0 x003F地址上放置跳轉(zhuǎn)目標(biāo),這樣就可以實(shí)現(xiàn)4G范圍內(nèi)的任意跳轉(zhuǎn),因此一個(gè)異常向量表實(shí)際上占用了16個(gè)字的存儲(chǔ)單元(64字節(jié))。,5.3.4存儲(chǔ)器重映射及引導(dǎo)塊,2.異常向量表概述,37,5.3.4存儲(chǔ)器重映射及引導(dǎo)塊,ARM異常入口,該位置被Boot裝載程序用作有效用戶(hù)程序的檢測(cè)標(biāo)志。通過(guò)定義此保留值,使向量表所有數(shù)據(jù)32位累加和為0,芯片復(fù)位后才能脫機(jī)運(yùn)行用戶(hù)程序。,38,5.3.4存儲(chǔ)器重映射及引導(dǎo)塊,異常向量表的重映射,異常向量表可以來(lái)自四個(gè)不同的區(qū)域:BootBlock、片內(nèi)Flash、片內(nèi)RAM和外部存儲(chǔ)器。微控制器可以執(zhí)行這些存儲(chǔ)器中的代碼。除了片內(nèi)Flash的向量表位于0 x0000~0 x003F地址上,其他存儲(chǔ)器的向量表都不位于這個(gè)地址。為了能讓ARM內(nèi)核通過(guò)訪(fǎng)問(wèn)0 x0000~0 x003F地址訪(fǎng)問(wèn)到其他存儲(chǔ)區(qū)域的向量表,這樣向量表必須進(jìn)行重映射。,注意:除了“用戶(hù)片內(nèi)Flash模式”外,其它模式下都無(wú)法訪(fǎng)問(wèn)片內(nèi)Flash的0 x0000~0 x003F區(qū)域。,39,來(lái)自不同區(qū)域的異常向量表,異常向量表,地址重映射,,,,復(fù)位后,首先運(yùn)行BootBlock程序,將BootBlock內(nèi)0 x7FFFE000~0 x7FFFE03F的異常向量表重映射到0 x0000~0 x003F地址以允許處理異常并在Boot裝載過(guò)程中使用中斷。,此時(shí)無(wú)需進(jìn)行Flash向量表的重映射,其向量表本身就處于0 x0000~0 x003F地址空間。,異常向量表,異常向量表,再根據(jù)MEMMAP寄存器的設(shè)置運(yùn)行片內(nèi)Flash代碼。,片內(nèi)RAM代碼。,片外存儲(chǔ)器代碼。,此時(shí)需將片內(nèi)RAM0 x40000000~0 x4000003F的向量表重映射到0 x0000~0 x003F地址空間。,此時(shí)需將外部存儲(chǔ)器0 x80000000~0 x8000003F的向量表重映射到0 x0000~0 x003F地址空間。,地址重映射,地址重映射,40,外擴(kuò)存儲(chǔ)器異常向量表實(shí)現(xiàn)示例,應(yīng)用程序的異常向量表就存放在0 x80000000起始的64個(gè)物理存儲(chǔ)單元中。但是ARM核發(fā)生異常(中斷)后是從0 x00000000~0 x0000003F地址范圍取異常向量的。所以要把0 x80000000~0 x8000003F范圍內(nèi)的存儲(chǔ)單元重新映射到0 x00000000~0 x0000003F地址范圍上。以后CPU存取0 x00000000~0 x0000003F地址就是存取0 x80000000~0 x8000003F范圍內(nèi)的存儲(chǔ)單元。,41,ARM芯片的另外一種重映射方式,為了提高異常相應(yīng)速度我們采取以下做法:(1)先把0 x00000000~0 x0000003F(FLASH)存儲(chǔ)單元內(nèi)的異常向量表復(fù)制到0 x40000000~0 x4000003F(片內(nèi)RAM的最低端64個(gè)字節(jié)的存儲(chǔ)單元)范圍內(nèi)存儲(chǔ)單元中。(2)把0 x40000000~0 x4000003F范圍內(nèi)存儲(chǔ)單元地址重新映射到0 x00000000~0 x0000003F地址范圍。這樣做了以后,當(dāng)異常發(fā)生的時(shí)候,CPU取異常向量就是從RAM區(qū)中的異常向量表中區(qū),速度快了。,42,異常向量表的重映射的實(shí)現(xiàn)機(jī)制,存儲(chǔ)器映射控制寄存器,存儲(chǔ)器映射控制寄存器(MEMMAP)是一個(gè)可讀可寫(xiě)的寄存器。,異常向量表可以重新映射到:BootBlock;片內(nèi)Flash;片內(nèi)SRAM;外部存儲(chǔ)器Bank0。,目的:為了允許運(yùn)行在不同存儲(chǔ)器空間中的代碼對(duì)中斷進(jìn)行控制,需要使用存儲(chǔ)器映射控制機(jī)制改變地址0 x0000~0 x003F的中斷向量的映射。,43,存儲(chǔ)器映射控制,系統(tǒng)引導(dǎo)與存儲(chǔ)器映射,對(duì)于LPC2200系列微處理器,當(dāng)nRESET為低時(shí),BOOT1:0腳的狀態(tài)控制著引導(dǎo)方式。,44,,MAP[1:0]設(shè)置值與各種異常地址范圍的關(guān)系,當(dāng)發(fā)生異常時(shí),對(duì)應(yīng)的向量表實(shí)際訪(fǎng)問(wèn)到0 x80000000~0 x8000003C地址。,,,,當(dāng)發(fā)生異常時(shí),對(duì)應(yīng)的向量表實(shí)際訪(fǎng)問(wèn)到0 x7FFFE000~0 x7FFFE03C地址。,當(dāng)發(fā)生異常時(shí),對(duì)應(yīng)的向量表實(shí)際訪(fǎng)問(wèn)到0 x40000000~0 x4000003C地址。,當(dāng)發(fā)生異常時(shí),對(duì)應(yīng)的向量表實(shí)際訪(fǎng)問(wèn)到0 x00000000~0 x0000003C地址。,異常向量表從片外存儲(chǔ)器中重映射。,異常向量表從BootBlock中重映射。,異常向量表從SRAM中重映射。,異常向量表來(lái)自片內(nèi)Flash。,45,5.3.5系統(tǒng)啟動(dòng)代碼介紹,概述,ARM微處理器在上電或復(fù)位后首先運(yùn)行BootBlock中的一段代碼,這段代碼稱(chēng)為“引導(dǎo)代碼”,由芯片廠(chǎng)商固化在芯片中。此后,在正式運(yùn)行用戶(hù)main函數(shù)之前,還需要運(yùn)行一段“啟動(dòng)代碼”,由用戶(hù)添加。,引導(dǎo)代碼(BootBlock),用戶(hù)main函數(shù),啟動(dòng)代碼,向量表定義;堆棧初始化;系統(tǒng)變量初始化;中斷系統(tǒng)初始化;I/O初始化;外圍初始化;地址重映射等操作。,上電/復(fù)位,,46,啟動(dòng)代碼流程圖,,,47,5.1LPC2000系列簡(jiǎn)介5.2芯片內(nèi)部結(jié)構(gòu)5.3存儲(chǔ)器結(jié)構(gòu)5.4系統(tǒng)控制模塊5.5中斷技術(shù)5.6向量中斷控制器,LPC2000系列微處理器組成與中斷技術(shù),48,5.4系統(tǒng)控制模塊,系統(tǒng)控制模塊通常包括很多功能部件,這些功能部件的影響是全局性的,它們的狀態(tài)改變時(shí)可能引起整個(gè)系統(tǒng)運(yùn)行狀態(tài)的改變,它們包括時(shí)鐘系統(tǒng)、功率控制、復(fù)位、存儲(chǔ)器映射控制。,49,5.4系統(tǒng)控制模塊功能匯總,概述,一個(gè)ARM芯片中通常有很多功能部件,有一些部件是全局性的,它們狀態(tài)的改變可能引起整個(gè)系統(tǒng)運(yùn)行狀態(tài)的改變,這些部件我們統(tǒng)一稱(chēng)之為系統(tǒng)控制模塊。,在這些系統(tǒng)控制模塊中,有些部件需要外部引腳的配合,如晶體振蕩器、外部復(fù)位輸入。,50,5.4系統(tǒng)控制模塊功能匯總,在系統(tǒng)控制模塊中,有些部件需要在進(jìn)行寄存器配置后才能正常工作,如存儲(chǔ)器映射控制、鎖相環(huán)、功率控制、VPB分頻器。,51,5.4.1時(shí)鐘系統(tǒng),概述,時(shí)鐘是計(jì)算機(jī)系統(tǒng)的脈搏,處理器核在一拍接一拍的時(shí)鐘驅(qū)動(dòng)下完成指令執(zhí)行、狀態(tài)變換等動(dòng)作。外設(shè)部件在時(shí)鐘的驅(qū)動(dòng)下進(jìn)行著各種工作,比如串口數(shù)據(jù)的收發(fā)、A/D轉(zhuǎn)換、定時(shí)器計(jì)數(shù)等。所以時(shí)鐘對(duì)于一個(gè)計(jì)算機(jī)系統(tǒng)是至關(guān)重要的,通常時(shí)鐘系統(tǒng)出現(xiàn)問(wèn)題也是最致命的,比如振蕩器不起振、振蕩不穩(wěn)、停振等。,52,5.4.1時(shí)鐘系統(tǒng),時(shí)鐘系統(tǒng)結(jié)構(gòu),LPC2000系列微控制器的時(shí)鐘系統(tǒng)包括四個(gè)部分:晶體振蕩器、喚醒定時(shí)器、鎖相環(huán)(PLL)和VPB分頻器。,外接晶體或外接時(shí)鐘源,產(chǎn)生穩(wěn)定的時(shí)鐘信號(hào),將Fosc提升到合適的頻率,1,3,4,2,53,5.4.1時(shí)鐘部件-晶體振蕩器,1.晶體振蕩器,LPC2000系列微控制器的晶體振蕩器可以使用外部時(shí)鐘源(從屬模式),也可以使用外接晶體和片內(nèi)振蕩電路(振蕩模式)產(chǎn)生時(shí)鐘。,54,時(shí)鐘部件-晶體振蕩器,從屬模式,使用從屬模式時(shí),時(shí)鐘信號(hào)通過(guò)X1引腳從外部輸入,輸入頻率范圍:1~50(MHz),其幅度范圍為:200mV~1.8V。,55,時(shí)鐘部件-晶體振蕩器,振蕩模式,使用振蕩模式時(shí),時(shí)鐘信號(hào)由內(nèi)部晶體振蕩器和外部連接的晶體振蕩產(chǎn)生,振蕩頻率范圍:1~30(MHz)。,56,時(shí)鐘部件-晶體振蕩器,注意:如果使用了ISP下載功能或者連接PLL提高頻率,則輸入的時(shí)鐘頻率范圍必須在10~25(MHz)之間。,57,,5.4.1時(shí)鐘部件-喚醒定時(shí)器,2.喚醒定時(shí)器,喚醒定時(shí)器能夠確保振蕩器和芯片內(nèi)部硬件電路在處理器開(kāi)始執(zhí)行指令之前有足夠的時(shí)間初始化。工作原理如圖:,,對(duì)輸入時(shí)鐘計(jì)數(shù),計(jì)數(shù)滿(mǎn)4096個(gè)周期后,控制開(kāi)關(guān)閉合,,為CPU提供時(shí)鐘,58,5.4.1時(shí)鐘部件-喚醒定時(shí)器,當(dāng)給芯片加電或某個(gè)事件使芯片退出掉電模式后,振蕩器就開(kāi)始工作,但是需要一段時(shí)間來(lái)產(chǎn)生足夠振幅的信號(hào)驅(qū)動(dòng)時(shí)鐘邏輯。振蕩的波形大致如下:,,注:?jiǎn)拘讯〞r(shí)器就通過(guò)監(jiān)測(cè)晶振狀態(tài)來(lái)判斷是否能開(kāi)始可靠的執(zhí)行代碼。,59,5.4.1時(shí)鐘部件-喚醒定時(shí)器,喚醒定時(shí)器與時(shí)鐘的關(guān)系,喚醒定時(shí)器檢測(cè)到有效時(shí)鐘信號(hào)后,計(jì)數(shù)4096個(gè)時(shí)鐘脈沖,并在這段時(shí)間里初始化系統(tǒng)硬件。如芯片滿(mǎn)足運(yùn)行條件(Flash初始化完成、外部復(fù)位信號(hào)已撤除等),接通系統(tǒng)時(shí)鐘,處理器開(kāi)始執(zhí)行指令??傊琇PC2000系列芯片的喚醒定時(shí)器是根據(jù)晶振的情況來(lái)執(zhí)行最短時(shí)間的復(fù)位,它在處理器從掉電模式中喚醒或發(fā)生了任何復(fù)位時(shí)激活。,60,5.4.1時(shí)鐘部件-PLL(鎖相環(huán)),3.鎖相環(huán),LPC2000系列芯片內(nèi)部均具有PLL電路,振蕩器產(chǎn)生的時(shí)鐘Fosc通過(guò)PLL升頻,可以獲得更高的系統(tǒng)時(shí)鐘(Fcclk)。,輸入范圍10~25MHz,將FOSC提升到10~60MHz,61,PLL內(nèi)部結(jié)構(gòu)框圖,5.4.1時(shí)鐘部件-PLL(鎖相環(huán)),62,5.4.1時(shí)鐘部件-PLL(鎖相環(huán)),PLL的鎖定過(guò)程,CCO的輸出頻率受到“相位頻率檢測(cè)”部件的控制,輸出所需頻率的過(guò)程不是一蹴而就的,而是一個(gè)拉鋸反復(fù)的過(guò)程。,,,CCO的輸出頻率在高低起伏一段時(shí)間后漸漸穩(wěn)定在了預(yù)期的頻率值,輸出頻率穩(wěn)定后即“鎖定”成功,63,5.4.1時(shí)鐘部件-PLL(鎖相環(huán)),寄存器描述,與PLL相關(guān)的寄存器有四個(gè),其中三個(gè)為控制寄存器,還有一個(gè)是狀態(tài)寄存器。,64,寄存器描述,PLLCFG.MSEL[4:0],PLLCON.PLLE,PLLCFG.PSEL[1:0],PLLCON.PLLC,PLL控制寄存器(PLLCON):,PLLE:PLL使能,該位為1時(shí)將激活PLL并允許其鎖定到指定的頻率;,PLLC:PLL連接,當(dāng)PLLE為1,并且在PLL鎖定后,該位為1,將把PLL作為時(shí)鐘源連接到CPU,否則直接使用振蕩器時(shí)鐘。,PLL配置寄存器(PLLCFG):,MSEL[4:0]:PLL倍頻器值,在PLL頻率計(jì)算中其值為(M-1);,PSEL[1:0]:PLL分頻器值,在PLL頻率計(jì)算中其值為P。,PLL狀態(tài)寄存器(PLLSTAT):,,,,,,MSEL[4:0]、PSEL[1:0]、PLLE、PLLC:讀出反映這幾個(gè)參數(shù)的設(shè)置值,寫(xiě)入無(wú)效;,PLOCK:反映PLL的鎖定狀態(tài)。為0時(shí),PLL未鎖定;為1時(shí),PLL鎖定到指定頻率。,PLL控制位組合:,65,寄存器描述,PLL饋送寄存器(PLLFEED):,PLLFEED[7:0]:PLL饋送序列必須寫(xiě)入該寄存器才能使PLL配置和控制寄存器的更改生效。饋送序列分兩步進(jìn)行,如下所示:step1.將值0 xAA寫(xiě)入PLLFEEDstep2.將值0 x55寫(xiě)入PLLFEED,操作示例DISABLE_IRQ();//關(guān)閉中斷,防止饋送序列操作被打斷PLLFEED=0 xAA;//饋送序列第一步PLLFEED=0 x55;//饋送序列第二步ENABLE_IRQ();//饋送序列操作結(jié)束,打開(kāi)中斷注:這兩個(gè)寫(xiě)操作的順序必須正確,且必須是連續(xù)的VPB總線(xiàn)周期。,66,5.4.1時(shí)鐘部件-PLL(鎖相環(huán)),PLL和掉電模式,掉電模式會(huì)自動(dòng)關(guān)閉并斷開(kāi)PLL。從掉電模式喚醒不會(huì)自動(dòng)恢復(fù)PLL的設(shè)定,PLL的恢復(fù)必須由軟件來(lái)完成。通常,首先將PLL激活并等待鎖定,然后再將PLL連接。注:不要試圖在掉電喚醒之后簡(jiǎn)單地執(zhí)行饋送序列來(lái)重新啟動(dòng)PLL,因?yàn)檫@會(huì)在PLL鎖定建立之前同時(shí)使能并連接PLL。,67,5.4.1時(shí)鐘部件-PLL(鎖相環(huán)),PLL頻率計(jì)算,Fosc為晶體振蕩器的輸出頻率,即PLL的輸入頻率,FOSC,FCCO,FCCO/(2p),FCCO/(2pM),連接PLL之后FCCLK=FCCO/(2p),Fcco為PLL電流控制振蕩器的輸出頻率,Fcclk為PLL最終的輸出頻率(也是處理器的時(shí)鐘頻率),Fcco經(jīng)過(guò)“2P分頻”部件后得到Fcco/(2p)的頻率,Fcco/(2p)信號(hào)經(jīng)過(guò)“M分頻”部件,得到Fcco/(2pM)的頻率,PLL鎖定后相位頻率檢測(cè)的兩輸入端信號(hào)的頻率相等,68,5.4.1時(shí)鐘部件-PLL(鎖相環(huán)),PLL頻率計(jì)算,可以得出以下幾個(gè)等式:Fosc=Fcco/(2pM)?Fcco=Fosc(2pM)Fcclk=Fcco/(2p)?Fcco=Fcclk(2p)最后得出PLL的輸出頻率(當(dāng)PLL激活并連接時(shí))為:Fcclk=MFosc或Fcclk=Fcco/(2P)CCO輸出頻率為:Fcco=Fcclk2P或Fcco=FoscM2P,69,5.4.1時(shí)鐘部件-PLL(鎖相環(huán)),確定PLL設(shè)定的過(guò)程,2.選擇合適的晶振頻率,3.計(jì)算M值,4.計(jì)算P值,1.確定處理器時(shí)鐘頻率,70,PLL設(shè)置舉例,系統(tǒng)要求Fosc=10MHz,F(xiàn)cclk=60MHz。根據(jù)這些要求:確定Fcclk=60MHz;選擇Fosc=10MHz;計(jì)算M=Fcclk/Fosc=60MHz/10MHz=6。M-1=5,所以寫(xiě)入PLLCFG[4:0]=00101;計(jì)算P=Fcco/(Fcclk*2),其中Fcco為156~320MHz。當(dāng)Fcco=156MHz時(shí),P=156MHz/(2*60MHz)=1.3當(dāng)Fcco=320MHz時(shí),P=2.67P取整數(shù)2,所以寫(xiě)入PLLCFG[6:5]=01。,71,,,,,,,,,,,,PLL設(shè)置舉例,PLL配置過(guò)程:,uint8PLLSet(uint32Fcclk,uint32Fosc,uint32Fcco){uint8i;uint32plldat;i=(Fcco/Fcclk);switch(i){case2:plldat=((Fcclk/Fosc)-1)|(0<<5);break;case4:plldat=((Fcclk/Fosc)-1)|(1<<5);break;case8:plldat=((Fcclk/Fosc)-1)|(2<<5);break;case16:plldat=((Fcclk/Fosc)-1)|(3<=10ms,>=300ns,,振蕩器處于穩(wěn)定工作狀態(tài),5.4.3復(fù)位,外部復(fù)位,81,5.4.3復(fù)位,復(fù)位與電源上電次序,V18:數(shù)字1.8V供電電源V18A:模擬1.8V供電電源,V3:數(shù)字3.3V供電電源V3A:模擬3.3V供電電源,CPU內(nèi)核,片內(nèi)外設(shè),,電源管理,,,1.8V為內(nèi)核供電,因此1.8V電源必須正常上電。,82,5.4.3復(fù)位,外部復(fù)位和內(nèi)部WDT復(fù)位的區(qū)別,,,,判斷引腳:P1.20/TRACESYNCP1.26/RTCKBOOT1和BOOT0,判斷引腳:P0.14,執(zhí)行用戶(hù)程序或運(yùn)行ISP程序,,外部復(fù)位,時(shí)間,T0,T1,T2,,,WDT復(fù)位,時(shí)間,T0,執(zhí)行用戶(hù)程序或運(yùn)行ISP程序,83,Boot程序工作流程—LPC2114/2124,84,Boot程序工作流程—LPC2210/2212/2214,85,5.4.3復(fù)位,復(fù)位與BootBlock,BootBlock的功能包括:,LPC2200系列微控制器可以同時(shí)存在片內(nèi)存儲(chǔ)器和片外存儲(chǔ)器,BootBlock通過(guò)芯片上的BOOT0和BOOT1引腳來(lái)判斷程序的運(yùn)行。,注:LPC2100系列微控制器只有片內(nèi)Flash,它們無(wú)需判斷。,86,5.4.3復(fù)位,復(fù)位與BootBlock,BootBlock的功能包括:,BootBlock在將芯片的控制權(quán)交給用戶(hù)程序之前,要先判斷用戶(hù)程序是否有效,否則將不運(yùn)行用戶(hù)程序,這樣可以避免在現(xiàn)場(chǎng)設(shè)備中的芯片因?yàn)榇a損壞而導(dǎo)致程序亂飛引起事故的情況發(fā)生。,87,CODE32AREAvectors,CODE,READONLYENTRYResetLDRPC,ResetAddrLDRPC,UndefinedAddr...DCD0 xb9205f80LDRPC,[PC,#-0 xff0]LDRPC,FIQ_AddrResetAddrDCDResetInitUndefinedAddrDCDUndefined...NouseDCD0IRQ_AddrDCD0,異常向量表源代碼,Reset[0 xe59ff018][0 xe59ff018]...[0 xb9205f80][0 xe51ffff0][0 xe59ff018][0 x8000008c][0 x80000040]...[0 x00000000][0 x00000000],指令機(jī)器碼,獲取跳轉(zhuǎn)地址,用戶(hù)代碼有效判別方案,調(diào)整該字使累加和為0,88,5.4.3復(fù)位,復(fù)位與BootBlock,BootBlock的功能包括:,芯片可加密可以保護(hù)芯片用戶(hù)的知識(shí)產(chǎn)權(quán)不受侵害。加密后:芯片禁止JTAG接口調(diào)試;芯片限制ISP命令,只能執(zhí)行芯片整片擦除。,對(duì)芯片加密的方法:在芯片F(xiàn)lash的0 x01FC地址處寫(xiě)入數(shù)據(jù)0 x87654321即可。當(dāng)BootBlock檢測(cè)到該地址存在加密標(biāo)志字時(shí),就對(duì)芯片的JTAG和ISP操作進(jìn)行限制,達(dá)到加密的效果。,89,5.4.3復(fù)位,復(fù)位與BootBlock,BootBlock的功能包括:,LPC2000系列微控制器內(nèi)部的Flash是無(wú)法從外部直接擦寫(xiě)的,這些功能必須通過(guò)IAP代碼來(lái)實(shí)現(xiàn)。IAP可以實(shí)現(xiàn)片內(nèi)Flash的擦除、查空、將數(shù)據(jù)從RAM寫(xiě)入指定Flash空間、校驗(yàn)、讀器件ID等功能。應(yīng)用實(shí)例:數(shù)據(jù)存儲(chǔ)在線(xiàn)升級(jí),90,5.4.3復(fù)位,復(fù)位與BootBlock,BootBlock的功能包括:,ISP功能是一種非常有用的片內(nèi)Flash燒寫(xiě)方式。ISP工作時(shí),通過(guò)UART0使用約定協(xié)議與計(jì)算機(jī)上的ISP軟件進(jìn)行通信,并按用戶(hù)的操作要求,調(diào)用內(nèi)部的IAP代碼實(shí)現(xiàn)各種功能。比如把用戶(hù)代碼下載到片內(nèi)Flash中。有兩種情況可以使芯片進(jìn)入ISP狀態(tài)1、將芯片的P0.14引腳拉低后,復(fù)位芯片可以進(jìn)入ISP狀態(tài);2、在芯片內(nèi)部無(wú)有效用戶(hù)代碼時(shí),BootBlock進(jìn)入ISP狀態(tài)。,91,5.4.3復(fù)位,復(fù)位及復(fù)位芯片配置,一些微控制器自己在上電時(shí)會(huì)產(chǎn)生復(fù)位信號(hào),但大多數(shù)微控制器需要外部輸入這個(gè)信號(hào)。阻容式復(fù)位電路:,電容兩端電壓不能突變,產(chǎn)生低電平脈沖復(fù)位,電源消失提供迅速放電回路,對(duì)電容充電,電容兩端電壓穩(wěn)定為電源電壓,這個(gè)電路成本低廉,但不能保證任何情況產(chǎn)生穩(wěn)定可靠的復(fù)位信號(hào),所以一般場(chǎng)合需要使用CAT809、SP708和CAT1025等專(zhuān)門(mén)的復(fù)位芯片。,92,5.1LPC2000系列簡(jiǎn)介5.2芯片內(nèi)部結(jié)構(gòu)5.3存儲(chǔ)器結(jié)構(gòu)5.4系統(tǒng)控制模塊5.5中斷技術(shù)5.6向量中斷控制器,LPC2000系列微處理器組成與中斷技術(shù),93,5.5中斷技術(shù),5.5.1中斷概念日常生活引入:“讀書(shū)-敲門(mén)-電話(huà)”事件處理過(guò)程,,94,中斷概念,什么是中斷,計(jì)算機(jī)在執(zhí)行正常程序過(guò)程中,當(dāng)出現(xiàn)某種異常事件或某種外部請(qǐng)求時(shí),處理器就暫停執(zhí)行當(dāng)前的程序,而轉(zhuǎn)去執(zhí)行對(duì)異常事件或某種外部請(qǐng)求的處理操作。當(dāng)處理完畢后,CPU再返回到被暫停執(zhí)行的程序,繼續(xù)執(zhí)行,這個(gè)過(guò)程稱(chēng)為中斷。主程序被打斷的地方稱(chēng)其為斷點(diǎn),在計(jì)算機(jī)系統(tǒng)中,實(shí)現(xiàn)中斷處理過(guò)程打的技術(shù)就稱(chēng)為中斷技術(shù),實(shí)現(xiàn)該技術(shù)包含的軟件、硬件的總體稱(chēng)為中斷系統(tǒng)。,95,5.5.2中斷源及管理,中斷源,是指引起中斷的原因或發(fā)出中斷請(qǐng)求的來(lái)源。中斷源可分為硬件中斷源和軟件中斷源兩類(lèi)。中斷請(qǐng)求是隨機(jī)發(fā)生的,當(dāng)系統(tǒng)具有多個(gè)中斷源時(shí),有時(shí)會(huì)同時(shí)出現(xiàn)多個(gè)中斷請(qǐng)求,CPU只能按一定的次序予以響應(yīng)和處理,這個(gè)響應(yīng)的次序稱(chēng)為中斷優(yōu)先級(jí)。中斷系統(tǒng)優(yōu)先級(jí)有兩層含義:①中斷事件同時(shí)發(fā)生時(shí),CPU響應(yīng)誰(shuí);②CPU正在執(zhí)行ISR過(guò)程中,又有中斷事件,CPU如何處理。,96,不同級(jí)別的中斷請(qǐng)求處理原則,不同優(yōu)先級(jí)的多個(gè)中斷源同時(shí)發(fā)出中斷請(qǐng)求,按優(yōu)先級(jí)由高到低依次處理。低優(yōu)先級(jí)中斷正在處理,出現(xiàn)高優(yōu)先級(jí)請(qǐng)求,應(yīng)轉(zhuǎn)去處理高優(yōu)先級(jí)請(qǐng)求,服務(wù)結(jié)束后再返回原優(yōu)先級(jí)較低的中斷服務(wù)程序繼續(xù)執(zhí)行。高優(yōu)先級(jí)中斷正在處理,出現(xiàn)低優(yōu)先級(jí)請(qǐng)求,可暫不響應(yīng)。中斷處理時(shí),出現(xiàn)同級(jí)別請(qǐng)求,應(yīng)在當(dāng)前中斷處理結(jié)束以后再處理新的請(qǐng)求。,97,中斷優(yōu)先級(jí)的確定,有多個(gè)中斷源時(shí),多個(gè)中斷優(yōu)先級(jí)的確定是我們面臨的一個(gè)問(wèn)題,在一般系統(tǒng)中通常用三種方法來(lái)確定中斷源的優(yōu)先級(jí)別:軟件查詢(xún)法,增加簡(jiǎn)單硬件電路,進(jìn)入中斷后,通過(guò)軟件按優(yōu)先級(jí)進(jìn)行查詢(xún)確定,首先處理高優(yōu)先級(jí)中斷;硬件排隊(duì)電路法,通過(guò)鏈?zhǔn)接布抨?duì)電路,硬件確定優(yōu)先級(jí),高優(yōu)先級(jí)直接可以屏蔽低優(yōu)先級(jí);專(zhuān)用中斷控制電路法,在ARM嵌入式系統(tǒng)中,通過(guò)向量中段控制器確定。,98,中斷源管理,99,5.5.3中斷處理過(guò)程,中斷處理過(guò)程一般包括以下五個(gè)步驟::中斷請(qǐng)求、中斷響應(yīng)、斷點(diǎn)保護(hù)、中斷處理和中斷返回。1.中斷請(qǐng)求物理事件轉(zhuǎn)換成一個(gè)電信號(hào)作為事件請(qǐng)求處理的申請(qǐng)。中斷處理過(guò)程中,首先要有中斷請(qǐng)求(中斷申請(qǐng))。該信號(hào)可被屏蔽控制。,100,5.5.3中斷處理過(guò)程,2.中斷響應(yīng)(軟件設(shè)置,硬件自動(dòng)工作)CPU收到請(qǐng)求并進(jìn)入到ISR的一系列動(dòng)作:CPU總是在每條指令執(zhí)行的最后一個(gè)時(shí)鐘周期檢測(cè)有無(wú)中斷請(qǐng)求,若有中斷申請(qǐng)則對(duì)其進(jìn)行響應(yīng)。中斷響應(yīng)的同時(shí),中斷系統(tǒng)自動(dòng)屏蔽控制,以保證中斷邏輯的正確性。中斷響應(yīng)還要獲得相應(yīng)的中斷向量,找到對(duì)應(yīng)的ISR并運(yùn)行它。一般有兩種方式:非向量中斷方式和向量中斷方式。不同的中斷系統(tǒng),中斷響應(yīng)的具體操作差別較大,基本原理相似。,101,5.5.3中斷處理過(guò)程,3.斷點(diǎn)保護(hù)(硬件自動(dòng)工作)保護(hù)斷點(diǎn),保障ISR能返回到主程序的斷點(diǎn)處繼續(xù)運(yùn)行;斷點(diǎn)保護(hù)----主程序被打斷時(shí)的PC當(dāng)前值備份。不同的系統(tǒng)中,保護(hù)的方法不一樣:x86將PC值入堆棧,ARM將PC值保護(hù)到LR。此操作都是由硬件自動(dòng)完成。PSW----程序狀態(tài)字的保護(hù);不同的系統(tǒng)中,保護(hù)的方法不一樣:x86需要軟件方式將PSW值入堆棧,ARM中CPSR硬件自動(dòng)保護(hù)到SPSR。,102,5.5.3中斷處理過(guò)程,4.中斷處理(軟件編程)保護(hù)CPU數(shù)據(jù)現(xiàn)場(chǎng),事件業(yè)務(wù)處理,恢復(fù)CPU數(shù)據(jù)現(xiàn)場(chǎng);CPU數(shù)據(jù)現(xiàn)場(chǎng)保護(hù)----ISR運(yùn)行中用到的數(shù)據(jù)寄存器要先保護(hù)后使用,以保證返回時(shí)主程序的中間結(jié)果不被影響;一般通過(guò)入堆棧實(shí)現(xiàn),也有些場(chǎng)合通過(guò)切換CPU的寄存器組實(shí)現(xiàn);PSW----程序狀態(tài)字的保護(hù);不同的系統(tǒng)中,保護(hù)的方法不一樣;事件處理代碼完成對(duì)應(yīng)的事件服務(wù)功能;恢復(fù)CPU數(shù)據(jù)現(xiàn)場(chǎng)---將保護(hù)數(shù)據(jù)原樣恢復(fù)。,103,5.5.3中斷處理過(guò)程,5.中斷返回(軟件編程)執(zhí)行完ISR后,要返回到原先被中斷的主程序的斷點(diǎn)處繼續(xù)運(yùn)行;斷點(diǎn)保護(hù)的逆過(guò)程,使用之前保護(hù)的PC值,重置PC;不同的計(jì)算機(jī)有不同的中斷返回方法;x86使用專(zhuān)用的中斷返回指令(reti),ARM則是使用LR的值重置PC。,104,5.1LPC2000系列簡(jiǎn)介5.2芯片內(nèi)部結(jié)構(gòu)5.3存儲(chǔ)器結(jié)構(gòu)5.4系統(tǒng)控制模塊5.5中斷技術(shù)5.6向量中斷控制器,LPC2000系列微處理器組成與中斷技術(shù),105,5.6向量中斷控制器,5.6.1向量中斷分類(lèi)ARM7TDMI內(nèi)核具有兩個(gè)中斷輸入,分別為IRQ中斷和FIQ中斷。向量中斷控制器(VIC,VectoredInterruptController)負(fù)責(zé)管理芯片的中斷源,最多可以管理32個(gè)中斷輸入請(qǐng)求,16個(gè)向量IRQ中斷和1個(gè)非向量中斷。常見(jiàn)的中斷源有:WDT(看門(mén)狗)、Timer(定時(shí)計(jì)數(shù)器)、PWM(脈寬調(diào)制器)、UART(通用異步收發(fā)器)、I2C(I2C接口)、SPI(SPI接口)、RTC(實(shí)時(shí)時(shí)鐘)、A/D(模數(shù)轉(zhuǎn)換器)、EINT(外中斷)等.,106,LPC2000系列處理器各功能模塊中斷標(biāo)志以及VIC通道分配,107,5.6.2向量中斷結(jié)構(gòu),108,5.6.2向量中斷結(jié)構(gòu),ARM技術(shù)中的‘中斷’和‘異?!涸贏RM中包含有7種異常:復(fù)位異常、SWI異常(軟中斷異常)、未定義指令異常、數(shù)據(jù)中止異常、指令中止異常、IRQ異常和FIQ異常?!袛唷恰惓!膬蓚€(gè)特例。習(xí)慣上將以IRQ異常方式傳遞、響應(yīng)的中斷稱(chēng)之為“IRQ中斷”;以FIQ異常方式傳遞、響應(yīng)的中斷稱(chēng)之為“FIQ中斷”。IRQ中斷又根據(jù)中斷服務(wù)程序入口地址的定位方式,被進(jìn)一步劃分為‘向量IRQ中斷’和‘非向量IRQ中斷’。,109,5.6.2向量中斷結(jié)構(gòu),程序狀態(tài)寄存器CPSR與VIC的關(guān)系,ARM內(nèi)核通過(guò)CPSR來(lái)監(jiān)視和控制內(nèi)部的操作,CPSR中的“I”位和“F”位分別用來(lái)控制IRQ模式和FIQ模式的使能。,,,,CPU,,,,,,,,,ARM7TDMI-S,VIC,,,IRQ,FIQ,CPSR[7](I),CPSR[6](F),110,5.6.2向量中斷結(jié)構(gòu),程序狀態(tài)寄存器CPSR與VIC的關(guān)系,當(dāng)I=1時(shí),禁止IRQ中斷,當(dāng)I=0時(shí),使能IRQ中斷,,111,5.6.2向量中斷結(jié)構(gòu),程序狀態(tài)寄存器CPSR與VIC的關(guān)系,當(dāng)F=1時(shí),禁止FIQ中斷,當(dāng)F=0時(shí),使能FIQ中斷,,112,5.6.2向量中斷結(jié)構(gòu),中斷輸入請(qǐng)求可以在VIC中被設(shè)置為以下三類(lèi):FIQ中斷:具有最高優(yōu)先級(jí);向量IRQ中斷:具有中等優(yōu)先級(jí);非向量IRQ中斷:具有最低優(yōu)先級(jí);,這三類(lèi)中斷中,F(xiàn)IQ中斷優(yōu)先級(jí)最高,1個(gè)FIQ中斷時(shí)響應(yīng)最快,當(dāng)分配給FIQ中斷請(qǐng)求多于1個(gè),VIC將FIQ中斷“相或”后向ARM產(chǎn)生FIQ信號(hào),F(xiàn)IQ服務(wù)程序通過(guò)讀取狀態(tài)寄存器識(shí)別FIQ請(qǐng)求源,并分別予以處理。向量中斷IRQ(VectoredIRQ)優(yōu)先級(jí)中等,該級(jí)別可分配32個(gè)請(qǐng)求中的16個(gè),32個(gè)中斷請(qǐng)求可靈活配置,中斷通道號(hào)可靈活配置到插槽slot0~slot15中,其中配置到slot0優(yōu)先級(jí)最高,配置到slot15級(jí)別在16個(gè)向量IRQ中最低。非向量IRQ(Non-vectoredIRQ)優(yōu)先級(jí)在VIC控制中最低。VIC將所有向量和非向量IRQ“相或”后向ARM處理器產(chǎn)生IRQ信號(hào)。,113,114,,,,,5.6.3向量中斷寄存器,115,控制寄存器功能描述,5.6.3向量中斷寄存器,116,寄存器描述-參數(shù)設(shè)置寄存器,,,,,,,,117,IRQ中斷相關(guān)寄存器,5.6.3向量中斷寄存器,注意:如果將同一個(gè)中斷源分配給多個(gè)使能的向量IRQ中斷,那么該中斷源發(fā)生中斷時(shí),會(huì)使用最高優(yōu)先級(jí)(最低編號(hào))的寄存器設(shè)置。,118,產(chǎn)生中斷后的服務(wù)程序地址,5.6.3向量中斷寄存器,119,寄存器描述-狀態(tài)寄存器,,,,注意:讀取VICRawIntr寄存器將得到所有32個(gè)中斷請(qǐng)求和軟件中斷的狀態(tài),它不管中斷是否使能或分類(lèi)。,120,保護(hù)使能寄存器,5.6.3向量中斷寄存器,保護(hù)使能寄存器(VICProtection):,在某些場(chǎng)合可能需要禁止在用戶(hù)模式下訪(fǎng)問(wèn)VIC寄存器,以提高軟件的安全等級(jí)。,121,5.6.4向量中斷的處理過(guò)程,ARM的FIQ、IRQ中斷是五種異常中的兩種,ARM使用對(duì)“異?!表憫?yīng)處理的方法響應(yīng)處理FIQ、IRQ中斷。FIQ異常響應(yīng)的服務(wù)入口地址固定為:0 x0000001C;IRQ異常響應(yīng)的服務(wù)入口地址固定為:0 x00000018;IRQ中斷一般要對(duì)應(yīng)多個(gè)中斷源,IRQ_ISR入口地址處理需要特殊處理;ARM啟動(dòng)代碼的異常向量表部分:0 x00LDRPC,ResetAddr;跳轉(zhuǎn)到ResetAddr單元0 x04LDRPC,UndefinedAddr0 x08LDRPC,SWI_Addr0 x0CLDRPC,PrefetchAddr0 x10LDRPC,DataAbortAddr0 x14DCD0 xb9205f80;用戶(hù)代碼有效性檢查碼0 x18LDRPC,[PC,#-0 xff0];PC←(PC)–0 xff00 x1CLDRPC,FIQ_Addr,122,5.6.4向量中斷的處理過(guò)程,ARM啟動(dòng)代碼的異常向量表部分說(shuō)明:IRQ語(yǔ)句含義如下:0 x18LDRPC,[PC,#-0 xff0];PC←(PC)–0 xff0這條指令的地址是0 x18,執(zhí)行該指令時(shí)PC=0 x20;執(zhí)行的結(jié)果為PC=[0 x20-0 xff0]=[0 xfffff030];0 xfffff030恰是VICVectAddr寄存器的地址;結(jié)論:ARM處理器響應(yīng)IRQ異常時(shí),固定按VICVectAddr寄存器間接轉(zhuǎn)移。FIQ中斷語(yǔ)句含義,通常系統(tǒng)中僅安排一個(gè)FIQ中斷源,因此,F(xiàn)IQ異常響應(yīng)的服務(wù)入口地址就是“FIQ_ISR”入口地址:0 x1CLDRPC,FIQ_Addr,123,,FIQ中斷處理,5.6.4向量中斷的處理過(guò)程,SUBSPC,LR,#4,,124,,IRQ中斷處理,5.6.4向量中斷的處理過(guò)程,硬件處理,軟件處理,125,5.6.5IRQ中斷的設(shè)計(jì)實(shí)例,將定時(shí)器0中斷分配為向量IRQ通道0,中斷服務(wù)程序地址設(shè)置為T(mén)imer0_ISR。,C代碼:,步驟:,IRQ通道0控制寄存器VICVectCntl0,向量IRQ通道0控制寄存器位分配,位,數(shù)值,,126,,圖示IRQ中斷的發(fā)生過(guò)程,,1.正在執(zhí)行用戶(hù)程序;,①,2.外部中斷0發(fā)生中斷;,②,3.VIC硬件將中斷服務(wù)程序地址裝入VICVectAddr寄存器;,,④,4.程序跳轉(zhuǎn)至異常向量表中IRQ入口0 x0018處;,5.執(zhí)行指令跳轉(zhuǎn)至VICVectAddr寄存器中的中斷服務(wù)地址;,,⑤,⑥,6.中斷服務(wù)程序執(zhí)行完畢,返回被中斷的用戶(hù)程序繼續(xù)執(zhí)行被中斷的代碼。,,,127,,圖示IRQ中斷的發(fā)生過(guò)程,,①,②,,④,,⑤,⑥,,,IRQ_Eint0,,注意:任何IRQ中斷產(chǎn)生之后,微控制器跳轉(zhuǎn)到地址0 x18執(zhí)行代碼,該地址處的指令為:LDRPC,[PC,#-0 xff0]在執(zhí)行該指令時(shí),PC指向當(dāng)前指令后的第2條指令,即地址0 x20。該指令將內(nèi)存地址:0 x20-0 xFF0=0 xFFFFF030處的內(nèi)容存入PC,該地址正是VICVectAddr寄存器的地址。所以一條ARM指令即可實(shí)現(xiàn)程序向中斷服務(wù)程序的跳轉(zhuǎn)。,128,使用VIC的注意要點(diǎn),如果在片內(nèi)RAM中調(diào)試程序,并使用了中斷,那么必須將存儲(chǔ)器映射控制設(shè)置為內(nèi)部RAM模式;將多個(gè)中斷源設(shè)置為FIQ,將增加中斷響應(yīng)延時(shí),所以建議FIQ中斷只有一個(gè)中斷源;ADS1.2規(guī)定在定義中斷服務(wù)函數(shù)時(shí)必須加入關(guān)鍵字“__irq”,保證函數(shù)返回時(shí)會(huì)切換處理器模式;在退出中斷服務(wù)程序時(shí)要清零相應(yīng)外設(shè)的中斷標(biāo)志,以及VICVectAddr寄存器,為響應(yīng)下次中斷作好準(zhǔn)備。,129,VIC相關(guān)啟動(dòng)代碼分析,.../*初始化VIC*/VICIntEnClr=0 xffffffff;VICVectAddr=0;VICIntSelect=0;...,在LPC2100、LPC2200的啟動(dòng)代碼中包含有VIC初始化程序,默認(rèn)是禁止所有中斷。,TargetResetInit函數(shù):,InitStack...MSRCPSR_c,#0 xdfLDRSP,=StackUsrMOVPC,R0,在LPC2100、LPC2200的啟動(dòng)代碼中默認(rèn)是關(guān)閉IRQ和FIQ中斷的。如果用戶(hù)需要使用這兩個(gè)中斷,則要設(shè)置CPSR寄存器的I位或F位,這需要在特權(quán)模式下處理。最簡(jiǎn)單的方法是在啟動(dòng)代碼中設(shè)置(修改0 xdf值)。,處理器各模式堆棧設(shè)置:,130,5.6.5IRQ中斷的設(shè)計(jì)實(shí)例——VIC相關(guān)啟動(dòng)代碼分析,CODE32AREAvectors,CODE,READONLYENTRYResetLDRPC,ResetAddrLDRPC,UndefinedAddr...DCD0 xb9205f80LDRPC,[PC,#-0 xff0]LDRPC,FIQ_AddrResetAddrDCDResetInitUndefinedAddrDCDUndefined...NouseDCD0IRQ_AddrDCD0FIQ_AddrDCDFIQ_Handler,異常向量表:,一旦產(chǎn)生IRQ中斷,微控制器切換到IRQ模式,并跳轉(zhuǎn)到向量表0 x0018地址執(zhí)行指令。,一旦產(chǎn)生FIQ中斷,微控制器切換到FIQ模式,并跳轉(zhuǎn)到向量表0 x001C地址執(zhí)行指令,然后跳轉(zhuǎn)到FIQ_Handler代碼段。,,,,,131,本章小結(jié),本章首先介紹了ARM系列芯片特點(diǎn)及其內(nèi)部結(jié)構(gòu),芯片內(nèi)部由ARM7內(nèi)核、局部總線(xiàn)、先進(jìn)的高性能(AHB)總線(xiàn)和連接外設(shè)的外圍總線(xiàn)(VPB)連接各種資源。通過(guò)對(duì)存儲(chǔ)器結(jié)構(gòu)分析,介紹了ARM處理器各種資源的地址分布以及地址映射,片內(nèi)外存儲(chǔ)器資源及編程作了介紹,引入存儲(chǔ)器重映射概念,增加了系統(tǒng)的靈活性,包括引導(dǎo)塊“BootBlock”重映射和異常向量表的重映射,分析了引入重映射的目的,重映射的原理以及重映射的實(shí)現(xiàn)機(jī)制,給出了ARM微處理器在上電或復(fù)位后程序運(yùn)行流程以及啟動(dòng)代碼流程。系統(tǒng)控制模塊的功能部件影響全局,系統(tǒng)控制模塊對(duì)時(shí)鐘、鎖相環(huán)、功率控制以及復(fù)位等電路做了介紹。中斷是嵌入式處理器與外設(shè)傳輸數(shù)據(jù)很重要的一種方式,在中斷技術(shù)中講述了中斷概念、多個(gè)中斷源的管理以及一般中斷的處理過(guò)程。嵌入式處理器中斷源很多,LPC2000系列處理器通過(guò)向量中斷控制器VIC統(tǒng)一管理,通過(guò)對(duì)向量中斷控制器VIC的結(jié)構(gòu)分析,給出了向量中斷的處理過(guò)程。,132,作業(yè),2,3,4,5,7,8,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- LPC2000 系列 微處理器 組成 中斷 技術(shù)
鏈接地址:http://m.jqnhouse.com/p-11497056.html