<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM S3C4510B系統(tǒng)中的異常中斷技術(shù)

          ARM S3C4510B系統(tǒng)中的異常中斷技術(shù)

          作者: 時(shí)間:2012-03-29 來(lái)源:網(wǎng)絡(luò) 收藏

          引言

          本文引用地址:http://www.ex-cimer.com/article/171746.htm

          隨著人們對(duì)于電子產(chǎn)品的要求越來(lái)越高,以80C51系列為代表的8位處理器開(kāi)始面臨越來(lái)越多的局限和挑戰(zhàn),人們對(duì)于高性能芯片和嵌入式功能的呼聲也越來(lái)越高。16/32 位的處理器得到了前所未有的關(guān)注和重視。32位體系系列處理器便是其中的代表。處理器是基于7體系16/32位RISC 處理器,內(nèi)部集成了8KB的CACHE/SDRAM,內(nèi)嵌EARTHNET控制器,擁有7種處理器模式和內(nèi)部多線程和外部多處理器的處理器結(jié)構(gòu)。在嵌入式中具有重要意義的系統(tǒng)中也體現(xiàn)了體系獨(dú)有的一些的特點(diǎn)。本文根據(jù)系統(tǒng)的特點(diǎn),分析了該系統(tǒng)中七種的功能及特點(diǎn)。并給出了SWI(外部中斷)和IRQ異常中斷(軟件中斷)的應(yīng)用實(shí)例代碼。

          1 S3C4510B系統(tǒng)中的異常中斷

          1.1 S3C4510B系統(tǒng)異常中斷的特點(diǎn)

          S3C4510B系統(tǒng)中控制程序執(zhí)行流程的方式通常有三種,一是正常程序執(zhí)行過(guò)程,即根據(jù)指令類型增加程序計(jì)數(shù)器PC使程序順序執(zhí)行;二是通過(guò)跳轉(zhuǎn)的方式來(lái)控制程序的執(zhí)行,可以利用跳轉(zhuǎn)的命令執(zhí)行跳轉(zhuǎn)操作,也可以通過(guò)直接修改程序計(jì)數(shù)器來(lái)達(dá)到跳轉(zhuǎn)的目的;三是異常中斷的方式,可以根據(jù)軟件的執(zhí)行情況,外部設(shè)備的異常請(qǐng)求等實(shí)現(xiàn)內(nèi)部、外部異常的處理,系統(tǒng)功能的調(diào)用和程序進(jìn)程的控制等功能。

          S3C4510B系統(tǒng)的異常中斷具有以下幾個(gè)特點(diǎn)。首先,作為ARM體系RTOS(實(shí)時(shí)操作系統(tǒng))組成部分,程序中的異常中斷必須按照ARM體系的要求進(jìn)行處理器模式的轉(zhuǎn)換。其次,如果對(duì)系統(tǒng)的優(yōu)化有需求時(shí),可以進(jìn)行32位的ARM處理指令和16位的THUMB指令的轉(zhuǎn)換。另外,S3C4510B處理器正常運(yùn)行時(shí),保存的返回地址是通過(guò)將PC存入LR寄存器完成的,由于中斷產(chǎn)生時(shí)的計(jì)數(shù)器PC的值有時(shí)已經(jīng)更新,如產(chǎn)生了外部中斷和快速中斷等;有時(shí)可能尚未更新,如軟件中斷和未定義指令中止等,故必須根據(jù)實(shí)際情況對(duì)返回地址進(jìn)行軟件修正之后才能正確返回。最后還要注意,ARM體系支持c語(yǔ)言和匯編語(yǔ)言程序的相互之間的調(diào)用,并有ATPCS 規(guī)則進(jìn)行協(xié)調(diào),所以異常中斷處理程序必需按照ATPCS規(guī)則進(jìn)行寄存器處理。

          1.2 S3C4510B系統(tǒng)中的異常中斷的類型

          S3C4510B擁有七種不同的異常中斷類型,分別適應(yīng)于不同的中斷需要。根據(jù)ARM系列處理器的特點(diǎn),各種異常中斷對(duì)應(yīng)于ARM系列的不同工作模式。其種類和對(duì)應(yīng)關(guān)系如表1所示。

          其中,復(fù)位中斷是優(yōu)先級(jí)最高的中斷。在復(fù)位引腳有效的前提下,系統(tǒng)加電或系統(tǒng)復(fù)位時(shí)都會(huì)引起復(fù)位中斷。數(shù)據(jù)訪問(wèn)中止是在數(shù)據(jù)訪問(wèn)指令的目標(biāo)地址不存在或者該地址不允許當(dāng)前指令訪問(wèn)的情況下產(chǎn)生的。指令預(yù)取中止中斷是處理器或系統(tǒng)協(xié)處理器認(rèn)為當(dāng)前指令未定義,當(dāng)系統(tǒng)預(yù)取該指令時(shí),本中斷執(zhí)行。未定義中止在處理器或系統(tǒng)協(xié)處理器認(rèn)為當(dāng)前指令未定義時(shí)產(chǎn)生,故而可以根據(jù)該異常中斷機(jī)制仿真浮點(diǎn)向量運(yùn)算。快速中斷和外部中斷都是在對(duì)應(yīng)的中斷請(qǐng)求引腳有效,且狀態(tài)寄存器中的相應(yīng)中斷禁止標(biāo)志位清零時(shí)產(chǎn)生。其中的外部中斷還可以用來(lái)進(jìn)行各系統(tǒng)進(jìn)程的切換;軟中斷由用戶定義,在程序運(yùn)行時(shí)由SWI指令調(diào)用,可用于用戶模式下的程序調(diào)用特權(quán)模式指令。在RTOS系統(tǒng)中可以通過(guò)該中斷機(jī)制實(shí)現(xiàn)系統(tǒng)功能調(diào)用。

          1.3 S3C4510B系統(tǒng)對(duì)異常中斷的響應(yīng)

          S3C4510B系統(tǒng)對(duì)異常中斷的響應(yīng)流程如下:

          (1) 保存處理器當(dāng)前狀態(tài)寄存器CPSR的值、中斷屏蔽以及各條件標(biāo)志位到將要執(zhí)行的異常中斷的SPSR中。 電子電路圖

          (2) 設(shè)置當(dāng)前程序狀態(tài)寄存器CPSR的值。其中包括:設(shè)置CPSR相應(yīng)位的值使處理器進(jìn)入特定的處理器模式;按要求屏蔽中斷,通常應(yīng)該屏蔽IRQ中斷,在FIQ中斷時(shí)屏蔽FIQ中斷。

          (3) 設(shè)置Lr寄存器。將中斷相應(yīng)模式的Lr寄存器的值設(shè)置為異常中斷的返回地址。

          (4) 處理程序計(jì)數(shù)器PC。將PC值設(shè)為相應(yīng)的中斷向量的地址,從而實(shí)現(xiàn)跳轉(zhuǎn)以執(zhí)行中斷程序。

          當(dāng)處理器執(zhí)行完以上流程之后,處理器已經(jīng)自中斷向量進(jìn)入異常中斷的處理狀態(tài)。異常中斷處理完畢之后,在異常中斷程序的末端,處理器進(jìn)入異常中斷的返回狀態(tài),其流程如下:

          (1) 恢復(fù)狀態(tài)寄存器。將保存在中斷模式中的SPSR值賦給當(dāng)前的狀態(tài)寄存器。

          (2) 將返回地址復(fù)制到程序計(jì)數(shù)器。這樣程序?qū)⒎祷氐疆惓V袛喈a(chǎn)生的下一條指令或出現(xiàn)問(wèn)題的指令處執(zhí)行。

          整個(gè)響應(yīng)與返回的過(guò)程如圖1所示。

          39.jpg

          需要注意的是,對(duì)于不同的異常中斷,其返回地址的計(jì)算方法也是不同的。IRQ和FIQ異常中斷產(chǎn)生時(shí),程序計(jì)數(shù)器PC已經(jīng)更新,而SWI中斷和未定義指令中斷是由當(dāng)前指令自身產(chǎn)生的,程序計(jì)數(shù)器PC尚未更新,所以要計(jì)算出下一條指令的地址來(lái)執(zhí)行返回操作;指令預(yù)取中止異常中斷和數(shù)據(jù)訪問(wèn)異常中斷要求返回到出現(xiàn)異常的執(zhí)行現(xiàn)場(chǎng),重新執(zhí)行操作。

          塵埃粒子計(jì)數(shù)器相關(guān)文章:塵埃粒子計(jì)數(shù)器原理

          上一頁(yè) 1 2 3 4 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();