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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > GNU ARM匯編--(五)中斷匯編之嵌套中斷處理

          GNU ARM匯編--(五)中斷匯編之嵌套中斷處理

          作者: 時間:2016-11-26 來源:網(wǎng)絡(luò) 收藏
        1. ldrr0,=GPFCON
        2. ldrr1,=0x2ea@0x2
        3. strr1,[r0]
        4. ldrr0,=EXTINT0
        5. @ldrr1,=0x8f888@0x0@0x8f888@~(7|(7<<4)|(7<<8)|(7<<16))
        6. ldrr1,=0xafaaa
        7. strr1,[r0]
        8. ldrr0,=EINTPEND
        9. ldrr1,=0xf0@0b10000
        10. strr1,[r0]
        11. ldrr0,=EINTMASK
        12. ldrr1,=0x00@0b00000
        13. strr1,[r0]
        14. ldrr0,=SRCPND
        15. ldrr1,=0xff@0x1@0b11111
        16. strr1,[r0]
        17. ldrr0,=INTPND
        18. ldrr1,=0xff@0x1@0b11111
        19. strr1,[r0]
        20. ldrr0,=INTMSK
        21. ldrr1,=0xffffff00@0b00000
        22. strr1,[r0]
        23. MRSr1,cpsr
        24. BICr1,r1,#0x80
        25. MSRcpsr_c,r1
        26. blmain
        27. irq:
        28. subr14,r14,#4@2:
        29. stmdbsp!,{r0-r3,r12,r14}@2:savecontext
        30. @
        31. @BLread_RescheduleFlag@3:moreprocessing
        32. @CMPr0,#0@3:ifprocessing?
        33. @LDMNEIAsp!,{r0-r3,r12,pc}^@4:thenreturn
        34. @@@@@@@@@@@@@@@@
        35. ldrr10,=INTOFFSET@用r10保存中斷的offset
        36. ldrr10,[r10]
        37. ldrr0,=EINTPEND
        38. ldrr1,=0xf0
        39. strr1,[r0]
        40. ldrr0,=SRCPND
        41. ldrr1,=0x3f@0b11111
        42. strr1,[r0]
        43. ldrr0,=INTPND
        44. ldrr1,=0x3f@0b11111
        45. strr1,[r0]
        46. @@@@@@@@@@@@@@
        47. mrsr2,SPSR@5:copySPSR_irq
        48. movr0,sp@5:copysp_irq
        49. addsp,sp,#6*4@5:resetstack
        50. mrsr1,CPSR@6:copyCPSR
        51. bicr1,r1,#Maskmd@6:
        52. orrr1,r1,#SVC32md@6:
        53. msrCPSR_c,r1@6:changeSVCmode
        54. subsp,sp,#FRAME_SIZE-FRAME_R4@7:makestackspace
        55. stmiasp,{r4-r11}@7:saver4-r11
        56. ldmiar0,{r4-r9}@7:r4-r9IRQstack
        57. bicr1,r1,#I_Bit@8:
        58. msrCPSR_c,r1@8:enableint
        59. stmdbsp!,{r4-r7}@9:saver4-r7SVC
        60. strr2,[sp,#FRAME_PSR]@9:savePSR
        61. strr8,[sp,#FRAME_R12]@9:saver12
        62. strr9,[sp,#FRAME_PC]@9:savepc
        63. strr14,[sp,#FRAME_LR]@9:savelr
        64. @
        65. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
        66. cmpr10,#0x0
        67. bleqblink1
        68. cmpr10,#0x1
        69. bleqblink3
        70. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
        71. LDMIAsp!,{r0-r12,r14}@11:restorecontext
        72. MSRSPSR_cxsf,r14@11:restoreSPSR
        73. LDMIAsp!,{r14,pc}^@11:return
        74. delay:
        75. ldrr3,=0xffff
        76. delay1:
        77. subr3,r3,#1
        78. cmpr3,#0x0
        79. bnedelay1
        80. movpc,lr
        81. blink1:
        82. ldrr0,=GPBDAT
        83. ldrr1,=0x000
        84. strr1,[r0]
        85. ldrr3,=0xffff
        86. delay2:
        87. subr3,r3,#1
        88. cmpr3,#0x0
        89. bnedelay2
        90. ldrr0,=GPBDAT
        91. ldrr1,=0x1f0
        92. strr1,[r0]
        93. ldrr3,=0xffff
        94. delay3:
        95. subr3,r3,#1
        96. cmpr3,#0x0
        97. bnedelay3
        98. movpc,lr
        99. blink2:
        100. ldrr0,=GPBDAT
        101. ldrr1,=0x140
        102. strr1,[r0]
        103. ldrr3,=0xffff
        104. delay12:
        105. subr3,r3,#1
        106. cmpr3,#0x0
        107. bnedelay12
        108. ldrr0,=GPBDAT
        109. ldrr1,=0xa0
        110. strr1,[r0]
        111. ldrr3,=0xffff
        112. delay13:
        113. subr3,r3,#1
        114. cmpr3,#0x0
        115. bnedelay13
        116. movpc,lr
        117. blink3:
        118. ldrr0,=GPBDAT
        119. ldrr1,=0x0a0
        120. strr1,[r0]
        121. stmfdsp!,{lr}
        122. bldelay
        123. ldrr0,=GPBDAT
        124. ldrr1,=0x140
        125. strr1,[r0]
        126. bldelay
        127. ldmfdsp!,{lr}
        128. movpc,lr
        129. main:
        130. ledloop:
        131. ldrr1,=0x1c0
        132. strr1,[r2]
        133. bldelay
        134. ldrr1,=0x1a0
        135. strr1,[r2]
        136. bldelay
        137. ldrr1,=0x160
        138. strr1,[r2]
        139. bldelay
        140. ldrr1,=0x0e0
        141. strr1,[r2]
        142. bldelay
        143. bledloop
        144. undefined_instruction:
        145. nop
        146. software_interrupt:
        147. nop
        148. prefetch_abort:
        149. nop
        150. data_abort:
        151. nop
        152. not_used:
        153. nop
        154. fiq:
        155. nop

        156. 代碼比較繁瑣,有幾點值得注意:在嵌套中斷處理中,壓棧后先保存INTOFFSET的值,再清中斷(SRCPND和INTPND).因為SRCPND和INTPND清除后INTOFFSET就自動清除了,所以要先保存.在中斷服務(wù)程序中,是可以用bl跳轉(zhuǎn)到各自的中斷服務(wù)程序的,比如blne blink1和blne blink3,值得對比的blink1和blink3,他們的不同在于blink1自己用代碼做了延時,而blink3是調(diào)用bl delay做的延時,那么這個時候要注意的就是lr的push和pop操作,不然lr就被覆蓋了,程序不能正確返回了.

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

          注意了以上兩點,程序上達到了嵌套處理的效果.因為采用的是下降邊沿觸發(fā),而按鍵沒有防抖處理,有時候單按一個鍵就有嵌套中斷了.最后總結(jié)一下這種處理的優(yōu)缺點:優(yōu)點是在為一個中斷處理服務(wù)完成前允許其它中斷,以縮短中斷延遲;而缺點是不處理中斷的優(yōu)先級,因此低優(yōu)先級的中斷會阻塞高優(yōu)先級的中斷.


          上一頁 1 2 下一頁

          關(guān)鍵詞: ARM匯編中斷匯編中斷處

          評論


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