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

          新聞中心

          TQ2440按鍵中斷

          作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò) 收藏
          有幾點(diǎn)需要注意:

          1、需要調(diào)用MMU函數(shù),實(shí)現(xiàn)內(nèi)存的映射;

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

          2、在中斷觸發(fā)跳入中斷處理函數(shù)后,首先要清除SRCPND和INTPND相應(yīng)的位,如果用到次級(jí)中斷源,如這里用到了EINT4_7中的EINT4,就要清除EINTPEND相應(yīng)的位。一般來(lái)說(shuō),應(yīng)該先清除次級(jí)中斷源相應(yīng)的位,再清除中斷源,否則中斷源會(huì)發(fā)生多次中斷。在完成清除后再進(jìn)行具體的處理。

          #include "def.h"
          #include "option.h"
          #include "2440addr.h"
          #include "2440lib.h"
          #include "2440slib.h"
          #include "mmu.h"


          #define LED1 (1<<5) //must be "()"
          #define LED2 (1<<6)
          #define LED3 (1<<7)
          #define LED4 (1<<8)

          #define KEY1(1<<1)//GPF1
          #define KEY2(1<<4)//GPF4
          #define KEY3(1<<2)//GPF2
          #define KEY4(1<<0)//GPF0

          //void delay_ms(U32 i);
          void init_irq(void);
          void MMU_Init(void);

          int Main(void)
          {
          rGPBCON=0x15400;
          rGPBDAT=0x7ff;
          MMU_Init();//必須要有MMU,目的是為了實(shí)現(xiàn)地址映射
          init_irq();//初始化中斷寄存器
          while(1);

          }

          void delay_ms(U32 i)
          {
          int j;
          for(;i>0;i--)
          for(j=65535;j>0;j--);
          }

          void key_per(void)//按鍵處理
          {
          if(!(rGPFDAT&KEY1))
          rGPBDAT=~LED1;

          else if(!(rGPFDAT&KEY2))
          rGPBDAT=~LED2;

          else if(!(rGPFDAT&KEY3))
          rGPBDAT=~LED3;

          else if(!(rGPFDAT&KEY4))
          rGPBDAT=~LED4;

          }

          void __irq key1_3_4(void)
          {
          //當(dāng)按下鍵后,就跳到此函數(shù)里,在以下的按鍵對(duì)應(yīng)的各個(gè)分支里,在跳到key_per()前應(yīng)該調(diào)用

          //ChearPending()清除SCRPND和INTPND對(duì)應(yīng)的位
          if(rINTPND &KEY3)
          {
          ClearPending(BIT_EINT2);
          key_per();
          }
          else if(rINTPND &KEY4)
          {
          ClearPending(BIT_EINT0);
          key_per();
          }

          else if(rINTPND&KEY1)
          {
          ClearPending(BIT_EINT1);
          key_per();
          }

          }

          void __irq key2(void)

          {
          //if(rEINTPEND &KEY2)//10000
          //{
          rEINTPEND = (1<<4);//CLEARrEINTPEND
          ClearPending(BIT_EINT4_7);
          key_per();
          //}
          }

          //由于key2在電路圖上對(duì)應(yīng)的是GPF4,相應(yīng)的中斷功能是EINT4,它具體是由次級(jí)中斷寄存器中的

          //EINTMASK來(lái)使能的,在init_irq()中由于要映射中斷處理函數(shù),因此這里單獨(dú)寫(xiě)出key2,清晰程序。

          void init_irq(void)
          {
          rGPFCON&=(~((3<<0)|(3<<2)|(3<<4)|(3<<8)));
          rGPFCON|=((2<<0)|(2<<2)|(2<<4)|(2<<8));//configure GPF0、1、2、4 to EINT0、1、2、4
          //rGPFCON=0xfeea;
          rPRIORITY=0x00000000;//deafult priority configure
          rINTMOD=0x0;//IRQ
          EnableIrq(BIT_EINT0|BIT_EINT1|BIT_EINT2|BIT_EINT4_7);//enable EINT0、1、2、4_7 with INTMSK register
          //rINTMSK&=(~((1<<0)|(1<<1)|(1<<2)|(1<<4)));
          rEINTMASK&=~(1<<4);//enbale EINT4 with EINTMASK register

          //下面是將key1_3_4和key2函數(shù)的地址映射到中斷向量表,這樣,當(dāng)中斷觸發(fā)時(shí),就跳到相應(yīng)函數(shù)的地址執(zhí)

          //行該函數(shù)。如EINT0中斷被觸發(fā)時(shí),就執(zhí)行函數(shù)key1_3_4。

          pISR_EINT0= (unsigned int)key1_3_4;

          pISR_EINT1= (unsigned int)key1_3_4;
          pISR_EINT2= (unsigned int)key1_3_4;
          pISR_EINT4_7= (unsigned int)key2;

          }



          關(guān)鍵詞: TQ2440按鍵中

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