<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > GNU ARM匯編--(四)中斷匯編之非嵌套中斷處理

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

作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò ) 收藏

在寫(xiě)這篇blog之前,不得不感慨一句:紙上得來(lái)終覺(jué)淺,絕知此事要躬行.作為EE出身的,雖然好久好久沒(méi)用匯編寫(xiě)單片機的中斷了,但自我感覺(jué)對中斷的理解還是比較深入的,本以為在GNU ARM匯編下搞個(gè)中斷會(huì )很容易,誰(shuí)知道斷斷續續花了我幾周.完全用匯編寫(xiě)中斷和用c中的_irq寫(xiě)中斷還是有區別的,誰(shuí)用誰(shuí)知道.還是那句話(huà):深入細節是必須的,也是值得的.

本文引用地址:http://dyxdggzs.com/article/201611/321727.htm

這一篇blog的理論知識主要來(lái)源于:《ARM System Developers Guide》.

ARM的異常和相應的模式之間的對應關(guān)系見(jiàn)下表:

當一個(gè)異常導致模式的改變時(shí),內核自動(dòng)地:

1、把cpsr保存到相應模式下的spsr

2、把pc保存到相應模式下的lr

3、設置cpsr為相應異常模式

4、設置pc為相應異常處理程序的入口地址

從異常中斷處理程序返回包含下面兩個(gè)操作:

1、從spsr_mode中恢復內容到cpsr中

2、從lr_mode中恢復內容到pc中,返回到異常中斷的指令的下一條政令處執行.

上面剛提到了異常發(fā)生時(shí)內核的一些動(dòng)作,那對與IRQ或者FIQ而言,還多一項變化:禁用相關(guān)的中斷IRQ或FIQ,禁止同類(lèi)型的其他中斷被觸發(fā).

對于最簡(jiǎn)單的非嵌套中斷處理的處理流程如下:

下面給出匯編代碼:

[cpp]view plaincopy
  1. /*
  2. simpleinterruption
  3. copyleft@dndxhej@gmail.com
  4. */
  5. .equNOINT,0xc0
  6. .equWTCON,0x53000000
  7. .equGPBCON,0x56000010@led
  8. .equGPBDAT,0x56000014@led
  9. .equGPBUP,0x56000018@led
  10. .equGPFCON,0x56000050@interruptconfig
  11. .equEINTMASK,0x560000a4
  12. .equEXTINT0,0x56000088
  13. .equEXTINT1,0x5600008c
  14. .equEXTINT2,0x56000090
  15. .equINTMSK,0x4A000008
  16. .equEINTPEND,0x560000a8
  17. .equINTSUBMSK,0X4A00001C
  18. .equSRCPND,0X4A000000
  19. .equINTPND,0X4A000010
  20. .global_start
  21. _start:breset
  22. ldrpc,_undefined_instruction
  23. ldrpc,_software_interrupt
  24. ldrpc,_prefetch_abort
  25. ldrpc,_data_abort
  26. ldrpc,_not_used
  27. @birq
  28. ldrpc,_irq
  29. ldrpc,_fiq
  30. _undefined_instruction:.wordundefined_instruction
  31. _software_interrupt:.wordsoftware_interrupt
  32. _prefetch_abort:.wordprefetch_abort
  33. _data_abort:.worddata_abort
  34. _not_used:.wordnot_used
  35. _irq:.wordirq
  36. _fiq:.wordfiq
  37. .balignl16,0xdeadbeef
  38. reset:
  39. ldrr3,=WTCON
  40. movr4,#0x0
  41. strr4,[r3]@disablewatchdog
  42. ldrr0,=GPBCON
  43. ldrr1,=0x15400
  44. strr1,[r0]
  45. ldrr2,=GPBDAT
  46. ldrr1,=0x160
  47. strr1,[r2]
  48. bldelay
  49. msrcpsr_c,#0xd2@進(jìn)入中斷模式
  50. ldrsp,=3072@中斷模式的棧指針定義
  51. msrcpsr_c,#0xdf@進(jìn)入系統模式
  52. ldrsp,=4096@設置系統模式的棧指針
  53. @--------------------------------------------
  54. ldrr0,=GPBUP
  55. ldrr1,=0x03f0
  56. strr1,[r0]
  57. ldrr0,=GPFCON
  58. ldrr1,=0x2ea@0x2
  59. strr1,[r0]
  60. ldrr0,=EXTINT0
  61. ldrr1,=0x8f888@0x0@0x8f888@~(7|(7<<4)|(7<<8)|(7<<16))
  62. strr1,[r0]
  63. ldrr0,=EINTPEND
  64. ldrr1,=0xf0@0b10000
  65. strr1,[r0]
  66. ldrr0,=EINTMASK
  67. ldrr1,=0x00@0b00000
  68. strr1,[r0]
  69. ldrr0,=SRCPND
  70. ldrr1,=0xff@0x1@0b11111
  71. strr1,[r0]
  72. ldrr0,=INTPND
  73. ldrr1,=0xff@0x1@0b11111
  74. strr1,[r0]
  75. ldrr0,=INTMSK
  76. ldrr1,=0xffffff00@0b00000
  77. strr1,[r0]
  78. MRSr1,cpsr
  79. BICr1,r1,#0x80
  80. MSRcpsr_c,r1
  81. blmain
  82. irq:
  83. sublr,lr,#4
  84. stmfdsp!,{r0-r12,lr}
  85. blirq_isr
  86. ldmfdsp!,{r0-r12,pc}^
  87. irq_isr:

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

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

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>