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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM9 S3C2440—中斷和定時(shí)器的初始化配置

          ARM9 S3C2440—中斷和定時(shí)器的初始化配置

          作者: 時(shí)間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
          ARM9S3C2440的寄存器特別多,這也是它和單片機(jī)不同處之一,對ARM的編程主要也是對寄存器的操作,可是寄存器多了以后,就很容易忘記對某個(gè)寄存器的設(shè)置,如果能夠總結(jié)一下寄存器配置的步驟,使得其有章可循,那么應(yīng)用的時(shí)候就可以對號入座了。如果長時(shí)間不去使用ARM的話,再次使用的時(shí)候重新翻看煩人的芯片用戶手冊,顯得就浪費(fèi)時(shí)間了,這樣,趁著熟悉的時(shí)候記錄下這些要點(diǎn),以后稍加翻看就能喚起記憶,這也是自己寫這些博客的緣由。

          定時(shí)器初始化配置步驟主要有:

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

          1、rTCFG0和rTCFG1的設(shè)置

          首先要設(shè)置定時(shí)器的時(shí)鐘頻率,

          TimerinputclockFrequency=PCLK/{prescalervalue+1}/{dividervalue}

          TCFG0的[7:0]保存的是定時(shí)器0和定時(shí)器1的prescalervalue,[15:8]保存的是定時(shí)器2和定時(shí)器3以及定時(shí)器4的prescalervalue。

          TCFG1從低位開始每四位表示dividervalue。

          0000=1/2

          0001=1/4

          0010=1/8

          0011=1/16

          01xx=ExternalTCLK0

          比如:rTCFG0=49;//pclk/(49+1)

          rTCFG1=0x03;//16分頻=62500HZ

          2、rTCNTBx和rTCMPBx的設(shè)置

          設(shè)置TCON啟動(dòng)定時(shí)器x(x表示0-4,2440有5個(gè)16位的定時(shí)器,定時(shí)器0-3有PWM功能,有輸出引腳,定時(shí)器4沒有輸出引腳),這時(shí)TCNTBx→TCNTx,TCMPBx→TCMPx,在定時(shí)器的工作頻率下,TCNTx開始減1,其值可以讀取TCNTOx獲取。當(dāng)TCNTx=TCMPx時(shí),定時(shí)器x的輸出管腳TOUTx反轉(zhuǎn),TCNTx繼續(xù)減1計(jì)數(shù),當(dāng)TCNTx=0時(shí),其輸出管腳TOUTx再次反轉(zhuǎn),并觸發(fā)定時(shí)器x的中斷。所以作為中斷用的計(jì)時(shí)值由rTCNTBx確定,用作PWM功能時(shí),PWM的頻率由rTCNTBx確定,占空比由rTCMPBx確定,占空比等于rTCMPBx/rTCNTBx。TOUTx(x=0~3)外接蜂鳴器控制蜂鳴器的頻率或者外接LED燈控制LED燈的亮度,占空比越大,蜂鳴器頻率越大,LED燈越亮。如果不作為PWM用途時(shí),一般將rTCMPB0設(shè)置為0。

          比如:rTCNTB0=62500/2;//TCNTB0[15:0]=計(jì)數(shù)值

          rTCMPB0=0;

          3、rTCON的設(shè)置

          TCON寄存器控制著定時(shí)器的啟動(dòng)(1表示啟動(dòng))、是否自動(dòng)裝載初值(TCNTBx和TCMPBx,1表示自動(dòng)裝載)、PWM死區(qū)是否啟動(dòng)(,1表示啟用死區(qū))、TOUTx反轉(zhuǎn)啟動(dòng)(1表示允許反轉(zhuǎn))。

          如:rTCON=0x09;//,啟動(dòng)定時(shí)器,并允許重載TCNTB0、TCMPB0

          4、清IRQ或FIQ中斷,如調(diào)用ClearPending(BIT_TIMER0)函數(shù)。

          對于子中斷使用ClearSubPending(intbit)。

          BIT_TIMER0在2440addr.h中的宏定義是

          #defineBIT_TIMER0(0x1<<10)

          ClearPending函數(shù)的在頭文件2440addr.h中的定義為:

          __inlinevoidClearPending(intbit)

          {

          registeri;

          rSRCPND=bit;

          rINTPND=bit;

          i=rINTPND;

          }

          __inlinevoidClearSubPending(intbit)

          {

          registeri;

          rSUBSRCPND=bit;

          i=rINTPND;

          ClearPending和ClearSubPending是內(nèi)聯(lián)函數(shù),編譯時(shí),類似宏替換,使用函數(shù)體替換調(diào)用處的函數(shù)名而不是去調(diào)用這兩個(gè)函數(shù),用增加程序代碼大小的代價(jià)換取程序運(yùn)行的效率,因?yàn)楹瘮?shù)調(diào)用需要保護(hù)現(xiàn)場,入棧和出棧耗用CPU時(shí)間。

          SRCPND、SUBSRCPND、INTPND相應(yīng)位為1表示有相應(yīng)的中斷發(fā)生,SRCPND、SUBSRCPND可以有多位同時(shí)置1,表示有多個(gè)中斷發(fā)生,但是INTPND寄存器是經(jīng)過優(yōu)先級裁決后的,所以同一時(shí)間只能有一位為1。

          另外值得注意的是SRCPND、INTPND、SUBSRCPND三個(gè)掛起寄存器的清零不是直接寫入0,而是將對應(yīng)的位置1,這個(gè)一定要注意,當(dāng)然了,編程的時(shí)候直接調(diào)用這兩個(gè)函數(shù)就行,它已經(jīng)包含在頭文件中,但是了解這個(gè)特殊之處還是很有意思的。

          5、rEXTINTx(P301)、rEINTPEND(P306)、rEINTMASK(P305)的設(shè)置

          這三種寄存器是對外部中斷而言的,定時(shí)器是內(nèi)部中斷,定時(shí)器初始化無需對這些寄存器配置,當(dāng)用到按鍵、開關(guān)等外部中斷就要對這幾個(gè)寄存器配置。

          EXTINTx寄存器用于設(shè)置25個(gè)外部中斷的中斷觸發(fā)方式,000=低電平,001高電平,01x=下降沿,0x上升沿,11x邊沿觸發(fā)Bothedgetriggered。比如設(shè)置外部中斷11,13-15中斷觸發(fā)方式為下降沿觸發(fā)。

          rEXTINT1&=~(7<<12|7<<20|7<<24|7<<28);
          rEXTINT1|=(2<<12|2<<20|2<<24|2<<28);

          EINTPEND寄存器相應(yīng)位為1表示相應(yīng)的外部中斷發(fā)生,0表示沒有相應(yīng)中斷發(fā)生,初始化中要對該寄存器清零,防止原有中斷干擾,清零的方式和SRCPND、SUBSRCPND、INTPND三個(gè)寄存器的清零方式一樣,向相應(yīng)位寫入1,但是沒有類似ClearPending的函數(shù)調(diào)用,必須自己寫。比如外部中斷11,13-15中斷掛起寄存器清零:

          rEINTPEND|=(1<<11)|(1<<13)|(1<<14)|(1<<15);

          EINTMASK寄存器0表示允許對應(yīng)位中斷,1表示禁止對應(yīng)位中斷,默認(rèn)是禁止的,如外部中斷11,13-15中斷允許,相應(yīng)位寫入0
          rEINTMASK&=~((1<<11)|(1<<13)|(1<<14)|(1<<15));

          另外也要使用ClearPending(BIT_EINT1|BIT_EINT2|BIT_EINT8_23)清中斷掛起寄存器,注意,剛才EINTPEND是清次中斷,EXTINT8-23都遞屬于IRQ的中斷號5,所以這里清的是主IRQ中斷。

          6、rINTMOD(P386)的設(shè)置,可選

          一般可以不設(shè)置,因?yàn)槟J(rèn)為IRQ模式中斷,除非要設(shè)置成FIQ模式,INT相應(yīng)位為1,中斷源為FIQ模式,0表示IRQ模式,F(xiàn)IQ通常用于處理特別緊急的中斷。


          上一頁 1 2 下一頁

          評論


          技術(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); })();