在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > GNU ARM匯編--(四)中斷匯編之非嵌套中斷處理

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

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

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

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

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

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

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

            1、把cpsr保存到相應(yīng)模式下的spsr

            2、把pc保存到相應(yīng)模式下的lr

            3、設(shè)置cpsr為相應(yīng)異常模式

            4、設(shè)置pc為相應(yīng)異常處理程序的入口地址

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

            1、從spsr_mode中恢復(fù)內(nèi)容到cpsr中

            2、從lr_mode中恢復(fù)內(nèi)容到pc中,返回到異常中斷的指令的下一條政令處執(zhí)行.

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

            對于最簡單的非嵌套中斷處理的處理流程如下:

            下面給出匯編代碼:

            [cpp]view plaincopy
            1. /*
            2. simpleinterruption
            3. copyleft@[email protected]
            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)入系統(tǒng)模式
            52. ldrsp,=4096@設(shè)置系統(tǒng)模式的棧指針
            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. 上一頁 1 2 下一頁

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

            評論


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

            關(guān)閉