在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

            作者: 時(shí)間:2016-11-26 來(lái)源:網(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. 代碼比較繁瑣,有幾點(diǎn)值得注意:在嵌套中斷處理中,壓棧后先保存INTOFFSET的值,再清中斷(SRCPND和INTPND).因?yàn)镾RCPND和INTPND清除后INTOFFSET就自動(dòng)清除了,所以要先保存.在中斷服務(wù)程序中,是可以用bl跳轉(zhuǎn)到各自的中斷服務(wù)程序的,比如blne blink1和blne blink3,值得對(duì)比的blink1和blink3,他們的不同在于blink1自己用代碼做了延時(shí),而blink3是調(diào)用bl delay做的延時(shí),那么這個(gè)時(shí)候要注意的就是lr的push和pop操作,不然lr就被覆蓋了,程序不能正確返回了.

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

            注意了以上兩點(diǎn),程序上達(dá)到了嵌套處理的效果.因?yàn)椴捎玫氖窍陆颠呇赜|發(fā),而按鍵沒(méi)有防抖處理,有時(shí)候單按一個(gè)鍵就有嵌套中斷了.最后總結(jié)一下這種處理的優(yōu)缺點(diǎn):優(yōu)點(diǎn)是在為一個(gè)中斷處理服務(wù)完成前允許其它中斷,以縮短中斷延遲;而缺點(diǎn)是不處理中斷的優(yōu)先級(jí),因此低優(yōu)先級(jí)的中斷會(huì)阻塞高優(yōu)先級(jí)的中斷.


            上一頁(yè) 1 2 下一頁(yè)

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

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉