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

          新聞中心

          AVR中斷詳解

          作者: 時間:2016-11-25 來源:網(wǎng)絡 收藏
          一、中斷信號往往是電信號的某種變化形式,如

          脈沖的上升沿或下降沿
          高電平或低電平
          電平變化
          二、中斷向量
          中斷請求被cpu檢測到之后,如果中斷控制系統(tǒng)允許,cpu會自動轉移,執(zhí)行一個固定的程序空間地址的指令。
          這個固定地址叫做中斷入口地址,也叫中斷向量。而這個地址是有單片機的硬件來決定的。
          一般這個地址不放置具體的程序,只放置一條跳轉指令,轉向真正的中斷服務程序。
          三、AVR不支持軟件改變中斷優(yōu)先級,即其優(yōu)先級是固定的。
          四、中斷源分為三類
          1.非屏蔽中斷,如reset中斷,無法屏蔽
          2.屏蔽中斷,大部分中斷都是可屏蔽的
          3.軟件中斷,AVR不支持,好像ARM里面有,可以作為操作系統(tǒng)的中斷調用。
          五、中斷響應條件
          響應A中斷 = 全局中斷允許標志 AND 中斷A允許標志 AND 中斷A標志
          全局中斷允許標志對于AVR就是其標志寄存器SREG的I位,SREG.7,gcc中打開和關閉的方法為sei()和cli()
          中斷允許標志,一般來說每個中斷都會有單獨的允許標志位,放置在某個相關的寄存器中,通過單獨設置那一位可以打開或關閉相應的中斷。
          中斷標志,一般說來這個標志都是硬件觸發(fā)的,就是一旦滿足那個條件,這個標志自動為1,不需要手動設置。
          六、中斷向量區(qū)大小 = 中斷源個數(shù) x 每個中斷向量所占的字數(shù)
          七、中斷標志位一般會在cpu響應中斷后自動清除,或在中斷服務程序中通過讀寫專門的寄存器而自動清除。
          當然也可以對其進行軟件清除,清除方法是對其寫1(這點比較怪)
          八、中斷標志會一直保持,如果中斷被禁止或者是cpu不能馬上響應的話。這是稱作“掛起”,一旦cpu可以響應了,則馬上按優(yōu)先級處理中斷。
          九、個別中斷不帶中斷標志,比如配置為低電平觸發(fā)的外部中斷。只要滿足條件就會向cpu一直發(fā)送中斷申請。
          這里就會出現(xiàn)這樣的問題:
          1.cpu暫時沒響應中斷,低電平?jīng)]有了,這樣就少了一次服務
          2.cpu響應了,響應完事,低電平還在,又多服務了一次
          所以設計的時候要注意
          一般這種低電平觸發(fā)中斷方式用于喚醒處于休眠模式的cpu,可參考具體方案。
          十、AVR響應中斷時會將全局中斷允許位關掉,不響應其它中斷,所以也就不允許中斷的嵌套。
          當然可以在中斷服務程序中,將其開啟,但是這樣做是非常危險的,不提倡。
          十一、中斷響應的過程如下
          1.清零全局中斷
          2.將具體被響應的中斷標志位清零
          3.中斷斷點地址壓入堆棧,同時SP減2
          4.自動將中斷向量地址壓入PC,強制執(zhí)行。
          以上均由硬件自動完成,軟件需要做的事情如下:
          1.中斷入口處指令:rjmp reset
          2.中斷服務程序
          3.返回指令 reti
          十二、
          非常要注意的是中斷只保存和恢復了斷點的PC值,對其它的寄存器均沒有保護,所以如果在中斷服務程序中要是改變了某些寄存器的值的話就容易出現(xiàn)問題。
          所以,中斷服務程序要盡量短,不做多余的操作,并且一旦對sreg有破壞的話,一定要在先將其壓入堆棧。
          十三、技巧
          在使能一個中斷允許位之前,最好將改中斷的中斷標志位清除,然后馬上使能允許位。
          這樣可以避免一些不必要的錯誤,如果之前改標志為1的話,就會產(chǎn)生一個錯誤的中斷。
          再說一次,清除標志位的方法是對其寫1

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

          GCC的中斷程序寫法,這里不說了,參考相關書籍

          AVR-MEGA16的外部中斷
          其它的cpu也大同小異
          中斷方式的設置在MCUCR和MCUCSR兩個寄存器里,找到對應的INT的兩位ISC1和ISC0,具體參考datasheet
          中斷允許在GICR寄存器里
          中斷標志位在GIFR寄存器中

          書中由一個利用外部中斷實現(xiàn)系統(tǒng)斷電保護的電路實例,還不錯,以后用到的時候可以找一下。



          關鍵詞: AVR中斷詳解電信

          評論


          技術專區(qū)

          關閉
          看屁屁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); })();