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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > S3C2440之中斷操作(MDK4.22)

          S3C2440之中斷操作(MDK4.22)

          作者: 時(shí)間:2016-11-19 來源:網(wǎng)絡(luò) 收藏
          背景知識:

          2440中斷控制器接收60個(gè)中斷源。

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

          中斷被分為多種類別,此處為32類別,正好用32位。


          圖上可以很好的表示整個(gè)中斷的流程。有些中斷源對應(yīng)一個(gè)中斷類別,比如串口中斷發(fā)送,接收最后都對應(yīng)到串口中斷。submask屏蔽子類別,未屏蔽的會(huì)引起srcpnd相應(yīng)位置位,如果mask未屏蔽的話,就會(huì)緊接著判斷優(yōu)先級,最后導(dǎo)致intpnd置位,然后產(chǎn)生了IRQ,而FIQ不需要優(yōu)先級判斷,會(huì)直接產(chǎn)生,由intmod設(shè)置。

          注意的是:進(jìn)入ISR后,清除中斷的順序很重要,首先是srcpnd接著是intpnd,如果還需要清除eintpnd的話,要最先清除。

          實(shí)驗(yàn)過程:

          編譯工具--MDK4.22

          硬件圖

          首先需要配置GPF0/1/2/4的腳為EINT0/1/2/4。

          由于用到了外部4-7中斷,需要開啟EINTMASK寄存器相應(yīng)位。設(shè)置優(yōu)先級寄存器,設(shè)置INTMSK寄存器。

          在2440A.s中已經(jīng)設(shè)置了I F位開啟,可以接收中斷了。

          在中斷初始化代碼里,需要將中斷函數(shù)的地址安裝到中斷向量表中。

          程序如下:

          MDK4.22的啟動(dòng)代碼設(shè)置


          配置了堆,棧,以及中斷向量表的地址為0x33ffff20處。配置了B口和F口,B口試LED的燈顯示,F(xiàn)口是連接按鍵的外部中斷。按一個(gè)鍵會(huì)亮一個(gè)LED。

          int.c代碼

          view plain
          1. #include"S3C2440.h"
          2. #include"int.h"
          3. voidinit_irq(void)
          4. {
          5. pHandleEINT0=EINT0_Handle;
          6. pHandleEINT1=EINT1_Handle;
          7. pHandleEINT2=EINT2_Handle;
          8. pHandleEINT4_7=EINT4_7_Handle;
          9. rEINTMASK&=(~(1<<4));
          10. rPRIORITY=(rPRIORITY&(~(0x01)))|(0x01<<7);
          11. rINTMSK&=(~(1<<0))&(~(1<<1))&(~(1<<2))&(~(1<<4));
          12. }
          13. void__irqEINT0_Handle(void)
          14. {
          15. rSRCPND=1<<0;
          16. rINTPND=1<<0;
          17. rGPBDAT|=(0x0f<<5);
          18. rGPBDAT&=~(1<<8);
          19. }
          20. void__irqEINT1_Handle(void)
          21. {
          22. rSRCPND=1<<1;
          23. rINTPND=1<<1;
          24. rGPBDAT|=(0x0f<<5);
          25. rGPBDAT&=~(1<<5);
          26. }
          27. void__irqEINT2_Handle(void)
          28. {
          29. rSRCPND=1<<2;
          30. rINTPND=1<<2;
          31. rGPBDAT|=(0x0f<<5);
          32. rGPBDAT&=~(1<<7);
          33. }
          34. void__irqEINT4_7_Handle(void)
          35. {
          36. rEINTPEND=(1<<4);
          37. rSRCPND=1<<4;
          38. rINTPND=1<<4;
          39. rGPBDAT|=(0x0f<<5);
          40. rGPBDAT&=~(1<<6);
          41. }

          主程序:

          view plain
          1. #include"S3C2440.h"
          2. #include"int.h"
          3. intmain(void)
          4. {
          5. rGPBDAT|=(0xf<<5);
          6. init_irq();
          7. while(1);
          8. }

          scatter文件如下:

          LR_ROM1 0x00000000 0x00001000 { ; load region size_region
          ER_ROM1 0x00000000 0x000001000 { ; load address = execution address
          *.o (RESET, +First)
          *(InRoot$$Sections)
          .ANY (+RO)
          }


          RW_RAM1 0x30000000 0x40000000 { ; RW data
          .ANY (+RW +ZI)
          }


          ISR 0x31000000{
          int.o(*)
          }

          HEAP 0x30000800 {
          S3C2440A.o(HEAP)
          }


          STACK 0x30000c00{
          S3C2440A.o(STACK)
          }


          }

          驗(yàn)證,可以按一個(gè)鍵亮一個(gè)鍵。

          over



          關(guān)鍵詞: S3C2440中斷操作MDK4.2

          評論


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