Steward
分享是一種喜悅、更是一種幸福
微處理器 - NXP LPC2103 - Assembly - EINT1(Non-vectored IRQ)
參考資料:
https://www.keil.com/dd/docs/datashts/philips/user_manual_lpc2101_2102_2103.pdf
暫存器
main.s
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | . equ IODIR , 0xe0028008 . equ IOCLR , 0xe002800c . equ IOSET , 0xe0028004 . equ PINSEL0 , 0xe002c000 . equ EXTINT , 0xe01fc140 . equ VICIntEnable , 0xfffff010 . equ VICDefVectAddr , 0xfffff034 . equ VICVectAddr0 , 0xfffff100 . equ VICVectCntl0 , 0xfffff200 .text .align 2 . global _start _start : b reset _undef : b . _swi : b . _pabort : b . _dabort : b . _reserved : b . _irq : ldr pc , [ pc , #-0xff0] _fiq : b . reset : mrs r0 , cpsr bic r0 , #0x80 msr cpsr_c , r0 ldr r0 , = PINSEL0 ldr r1 , =(1 << 28) str r1 , [ r0 ] ldr r0 , = VICIntEnable ldr r1 , =(1 << 15) str r1 , [ r0 ] ldr r0 , = VICDefVectAddr ldr r1 , = irq_handler str r1 , [ r0 ] ldr r0 , = VICVectCntl0 ldr r1 , =0x0f str r1 , [ r0 ] ldr r0 , = IODIR ldr r1 , =(1 << 22) str r1 , [ r0 ] ldr r0 , = IOCLR ldr r1 , =(1 << 22) str r1 , [ r0 ] b . irq_handler : ldr r0 , = IOSET ldr r1 , =(1 << 22) str r1 , [ r0 ] ldr r0 , = EXTINT ldr r1 , =0x02 str r1 , [ r0 ] subs pc , lr , #4 . end |
P.S. ldr pc, [pc, #-0xff0] = 0x18(irq address) + 8(fetch、decode) - 0xff0 = VICVectAddr(0xfffff030)
完成