NUC977 >> Assembly
Enhance Timer2 Controller(ETMR2)
參考資訊:
1. pdf
2. NUC970_NonOS_BSP
Timer Interrupt
ETMR_EN、MODE_SEL
Compare
Interrupt Enable
Interrupt Flag
main.s
.equ GPIOD_DIR, (0xb8003000 + 0xc0) .equ GPIOD_DATAOUT, (0xb8003000 + 0xc4) .equ CLK_PCLKEN0, (0xb0000200 + 0x18) .equ AIC_MECRH, (0xb8002000 + 0x134) .equ AIC_EOSCR, (0xb8002000 + 0x150) .equ ETMR2_CTL, (0xb8001600 + 0x00) .equ ETMR2_CMPR, (0xb8001600 + 0x08) .equ ETMR2_IER, (0xb8001600 + 0x0c) .equ ETMR2_ISR, (0xb8001600 + 0x10) .data blink: .dcb 1 .text .align 2 .global _start _start: b reset _undef: b . _swi: b . _pabort: b . _dabort: b . _reserved: b . _irq: b irq_handler _fiq: b . reset: mrs r0, cpsr bic r0, #0x80 msr cpsr_c, r0 ldr r0, =AIC_MECRH ldr r1, =(1 << 17) str r1, [r0] ldr r0, =CLK_PCLKEN0 ldr r1, [r0] ldr r2, =((1 << 3) | (1 << 6)) orr r1, r2 str r1, [r0] ldr r0, =ETMR2_CMPR ldr r1, =6000000 str r1, [r0] ldr r0, =ETMR2_CTL ldr r1, =1 str r1, [r0] ldr r0, =ETMR2_IER ldr r1, =1 str r1, [r0] ldr r0, =GPIOD_DIR ldr r1, =(1 << 6) str r1, [r0] ldr r0, =GPIOD_DATAOUT ldr r1, =(1 << 6) str r1, [r0] ldr r0, =blink ldr r1, =0x00 str r1, [r0] b . irq_handler: ldr r0, =blink ldr r1, [r0] cmp r1, #0x00 beq 1f ldr r0, =GPIOD_DATAOUT ldr r1, =(1 << 6) str r1, [r0] b 2f 1: ldr r0, =GPIOD_DATAOUT ldr r1, =~(1 << 6) str r1, [r0] 2: ldr r0, =blink ldr r1, [r0] eor r1, #0xff str r1, [r0] ldr r0, =AIC_EOSCR ldr r1, =1 str r1, [r0] ldr r0, =ETMR2_ISR ldr r1, [r0] orr r1, #1 str r1, [r0] ldr r0, =ETMR2_CTL ldr r1, =1 str r1, [r0] subs pc, lr, #4 .end
完成