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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > at91rm9200的io口電平中斷簡(jiǎn)單理解

          at91rm9200的io口電平中斷簡(jiǎn)單理解

          作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
          對(duì)于PQFP封裝的9200的PIOA、PIOB和PIOC三組32*3=64個(gè)io口,他們的io中斷有這樣的特性PIO的中斷AT91C_AIC_SRCTYPE_EXT_HIGH_LEVEL和AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE都是電平中斷,對(duì)于PIO來(lái)說(shuō)沒(méi)有區(qū)別,在PIO中斷處理函數(shù)里邊通過(guò)檢測(cè)發(fā)生io中斷的相應(yīng)io引腳輸入值為0還是為1,來(lái)判斷是高電平中斷還是低電平中斷,PIO的PIO_IER使能的相應(yīng)io口線上輸入變化中斷--注意是變化中斷,所以對(duì)于io電平中斷也必須存在電平變化之后才能被9200捕獲到,也才能引發(fā)中斷,執(zhí)行中斷處理函數(shù),io口線上無(wú)電平變化也就無(wú)電平中斷會(huì)被觸法,這和51單片機(jī)的io電平中斷機(jī)制不同,51單片機(jī)當(dāng)啟用外部電平中斷之后,51處理器每個(gè)clk都會(huì)檢測(cè)io的電平,如果符合中斷電平,那么立即觸發(fā)電平中斷,所以對(duì)于51單片機(jī),只要io口上的電平為中斷電平值,那么就會(huì)不斷的觸法51的中斷處理程序,直到io口電平變?yōu)榉侵袛嚯娖街?1處理器才會(huì)停止觸法中斷,9200即便配置io為電平中斷,但是也需要io線上只有發(fā)上了電平變化,9200才會(huì)觸法電平變化中斷,至于這個(gè)變化中斷最終是變?yōu)榱说碗娖竭€是變?yōu)榱烁唠娖?那么需要在處理程序中讀取io值才可以進(jìn)一步判斷,不過(guò)如果存在其他irq中斷屏蔽I時(shí)間比較長(zhǎng),同時(shí)io電平中斷變化持續(xù)時(shí)間又比較短,那么很可能出現(xiàn),到執(zhí)行io電平中斷處理程序時(shí),讀取到的io口數(shù)據(jù)已經(jīng)不是引發(fā)中斷的電平值了,所以io電平中斷不是很好用,可以使用AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED雙邊沿中斷或者AT91C_AIC_SRCTYPE_EXT_POSITIVE_EDGE上升沿中斷來(lái)完成,對(duì)于io口最好使用AT91C_AIC_SRCTYPE_EXT_POSITIVE_EDGE上升沿中斷機(jī)制,這不會(huì)出現(xiàn)誤數(shù)據(jù),最壞僅僅是可能會(huì)丟掉后面的1~2個(gè)上升沿[gliethttp_20080104]

          以PIOB的PB0為例:
          #defineLEVEL_IRQ_PIN(0x01<<0)
          AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC,((unsignedint)1AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,
          AT91C_ID_PIOB,
          1,
          AT91C_AIC_SRCTYPE_EXT_POSITIVE_EDGE,
          //AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED,//雙邊沿
          //AT91C_AIC_SRCTYPE_EXT_HIGH_LEVEL,
          //AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE,//
          (void(*)(void))piob_interrupt_proc);
          {volatiledummy;dummy=AT91C_BASE_PIOB->PIO_ISR;}
          AT91F_PIO_InterruptEnable(AT91C_BASE_PIOB,LEVEL_IRQ_PIN);//使能PB0變化中斷
          {volatiledummy;dummy=AT91C_BASE_PIOB->PIO_ISR;}
          AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_PIOB);//使能PIOB控制器中斷
          以上就完成了PB0的上升沿中斷啟動(dòng),來(lái)看看中斷處理函數(shù)[ads1.2]
          void__irq piob_interrupt_proc(void)
          {
          {volatiledummy;dummy=AT91C_BASE_PIOB->PIO_ISR;}
          AT91C_BASE_AIC->AIC_EOICR=0;
          if(AT91F_PIO_GetInput(AT91C_BASE_PIOB)&LEVEL_IRQ_PIN)
          {
          //...1電平
          }else
          {
          //...0電平
          }
          }


          關(guān)鍵詞: at91rm9200io口電平中

          評(píng)論


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