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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > S3C內(nèi)部中斷和外部中斷

          S3C內(nèi)部中斷和外部中斷

          作者: 時(shí)間:2016-11-13 來(lái)源:網(wǎng)絡(luò) 收藏
          1.中斷分兩大類(lèi):內(nèi)部中斷外部中斷。

          2.外部中斷。24個(gè)外部中斷占用GPF0-GPF7(EINT0-EINT7),GPG0-GPG15(EINT8-EINT23)。用這些腳做中斷輸入,則必須配置引腳為中斷,并且不要上拉。具體參考datesheet數(shù)據(jù)手冊(cè)。

          寄存器:EXTINT0-EXTINT2:三個(gè)寄存器設(shè)定EINT0-EINT23的觸發(fā)方式。

          EINTFLT0-EINTFLT3:控制濾波時(shí)鐘和濾波寬度。

          EINTPEND:這個(gè)是中斷掛起寄存器,清除時(shí)要寫(xiě)1,后面還有幾個(gè)是寫(xiě)1清除。當(dāng)一個(gè)外部中斷(EINT4-EINT23)發(fā)生后,那么相應(yīng)的位會(huì)被置1。為什么沒(méi)有EINT0-EINT3,呵呵,看看SRCPND就知道了,里面沒(méi)有EINT4-EINT23的位子,所以有了EINTPEND。

          EINTMASK:這個(gè)簡(jiǎn)單,是屏蔽中斷用的,也就是說(shuō)位為1時(shí),此次中斷無(wú)效。

          3.內(nèi)部中斷。內(nèi)部中斷有8個(gè)寄存器,下面逐一來(lái)看。

          寄存器:SUBSRCPND:當(dāng)一個(gè)中斷發(fā)生后,那么相應(yīng)的位會(huì)被置1,表示一個(gè)中斷發(fā)生了。

          INTSUBMSK:與上一個(gè)是一伙的,中斷屏蔽寄存器,具體屏蔽什么,自己看手冊(cè)去吧。

          INTMOD:中斷的方式。一個(gè)中斷可以是普通中斷,也可以是快中斷,在這里設(shè)置,但只能有一個(gè)快中斷。

          PRIORITY:優(yōu)先級(jí)寄存器,不說(shuō)了。

          SRCPND:當(dāng)一個(gè)中斷發(fā)生后,那么相應(yīng)的位會(huì)被置1,表示一個(gè)或一類(lèi)中斷發(fā)生了。

          INTMSK:中斷屏蔽寄存器。

          INTPND:中斷發(fā)生后,SRCPND中會(huì)有位置1,可能好幾個(gè)(因?yàn)橥瑫r(shí)可能發(fā)生幾個(gè)中斷),這些中斷會(huì)由優(yōu)先級(jí)仲裁器選出一個(gè)最緊迫的,然后吧把INTPND中相應(yīng)位置1,所以同一時(shí)間只有一位是1。也就是說(shuō)前面的寄存器置1是表示發(fā)生了,只有INTPND置1,CPU才會(huì)處理。
          INTOFFSET:用來(lái)表示INTPND中哪一位置1了,好讓你查詢(xún),普通中斷跳轉(zhuǎn)時(shí)查詢(xún)用。清除INTPND、SRCPND時(shí)自動(dòng)清除。

          4.各寄存器關(guān)系:
          5.中斷過(guò)程。

          a如果是不帶子中斷的內(nèi)部中斷:發(fā)生后SRCPND相應(yīng)位置1,如果沒(méi)有被INTMSK屏蔽,那么等待進(jìn)一步處理。

          b如果是帶子中斷的內(nèi)部中斷:發(fā)生后SUBSRCPND相應(yīng)位置1,如果沒(méi)有被INTSUBMSK屏蔽,那么SRCPND相應(yīng)位置1,等待進(jìn)一步處理,幾個(gè)SUBSRCPND可能對(duì)應(yīng)同一個(gè)SRCPND,對(duì)應(yīng)表如下:

          SRCPNDSUBSRCPND
          INT_UART0INT_RXD0,INT_TXD0,INT_ERR0
          INT_UART1INT_RXD1,INT_TXD1,INT_ERR1
          INT_UART2INT_RXD2,INT_TXD2,INT_ERR2
          INT_ADCINT_ADC_S,INT_TC
          INT_CAMINT_CAM_C,INT_CAM_P
          INT_WDT_AC97INT_WDT,INT_AC97
          c如果是外部中斷:EINT0-EINT3發(fā)生后SRCPND相應(yīng)位置1,如果沒(méi)有被INTMSK屏蔽,那么等待進(jìn)一步處理。EINT4-EINT23發(fā)生后EINTPEND相應(yīng)位置1,如果沒(méi)有被EINTMASK屏蔽,那么SRCPND相應(yīng)位EINT4-7或EINT8-23置1,如果沒(méi)有被INTMSK屏蔽,等待進(jìn)一步處理,幾個(gè)EINTPEND對(duì)應(yīng)同一個(gè)SRCPND,對(duì)應(yīng)表如下:

          SRCPNDEINTPEND

          EINT0EINT0

          EINT1EINT1

          EINT2EINT2

          EINT3EINT3

          EINT4-7EINT4-EINT4

          EINT8-23EINT8-EINT23

          三種中斷都等待進(jìn)一步處理了。接下來(lái)從SRCPND往下看,看INTMSK。如果中斷被屏蔽了,就不用說(shuō)了(注意:快中斷也能被屏蔽)。如果沒(méi)有被屏蔽,那么會(huì)進(jìn)一步到INTMOD。如果是快中斷,那么直接出來(lái),進(jìn)入FIQ(即CPU進(jìn)入快中斷模式處理)。如果是普通中斷,那么SRCPND可以有多為置1(FIQ只能有一個(gè)),這時(shí)就會(huì)經(jīng)過(guò)PRIORITY選出一個(gè)優(yōu)先級(jí)高的,然后把根據(jù)選出的中斷把INTPND相應(yīng)位置1(注意:只能選出一個(gè)),進(jìn)入IRQ,讓CPU處理。

          6.中斷的開(kāi)啟。
          a.如果是不帶子中斷的內(nèi)部中斷,只需設(shè)置INTMSK,讓它不屏蔽中斷就可以了。

          b如果是帶子中斷的內(nèi)部中斷,需設(shè)置INTSUBMSK和INTMSK,讓它門(mén)不屏蔽中斷就可以了。

          c如果是外部中斷,對(duì)于EINT8-23需要設(shè)置EINTMASK和INTMSK。對(duì)于EINT0-EINT3只需設(shè)置INTMSK。

          7.中斷的清除。

          a.如果是不帶子中斷的內(nèi)部中斷,只需清除SRCPND,注意清除需位置1。

          b如果是帶子中斷的內(nèi)部中斷,需清除SRCPND和SUBSRCPND,注意先清除SUBSRCPND,再清除SRCPND。因?yàn)?,如果你先清除SRCPND的話,然后在清除SUBSRCPND的過(guò)程中,SRCPND會(huì)以為又有中斷發(fā)生,又會(huì)置1。也就是說(shuō)一次中斷會(huì)響應(yīng)兩次。所以必須先掐斷源頭。

          c如果是外部中斷,對(duì)于EINT8-23需要清除EINTPEND和SRCPND(同樣注意順序)。對(duì)于EINT0-EINT3只需清除SRCPND。


          關(guān)鍵詞: S3C內(nèi)部中斷外部中

          評(píng)論


          技術(shù)專(zhuān)區(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); })();