==================================
VECTOR.S
由于抖动的原因,所以我这里进行了2次加法
===================================
VECTOR.S
由于抖动的原因,所以我这里进行了2次加法
===================================
b reset
b undef
b soft
b resstop
b datstop
.word 0x00
.equ SUBSRCPND,0x4a000018
.equ SRCPND, 0x4a000000
.equ INTPND, 0x4a000010
.equ EINTPND, 0x560000a8
.equ GPBCON,0x56000010
.equ GPBDAT, 0x56000014
.equ GPB5, (1<<(5*2))
.equ GPB6, (1<<(6*2))
.equ GPB7, (1<<(7*2))
.equ GPB8, (1<<(8*2))
.equ GPBVALUE, (GPB5|GPB6|GPB7|GPB8)
.equ GPB5_DATA, (0<<5)
.equ GPB6_DATA, (1<<6)
.equ GPB7_DATA, (1<<7)
.equ GPB8_DATA, (0<<8)
.equ GPB5_DATA_T, (1<<5)
.equ GPB6_DATA_T, (0<<6)
.equ GPB7_DATA_T, (0<<7)
.equ GPB8_DATA_T, (1<<8)
.equ GPB_DATA, (GPB5_DATA|GPB6_DATA|GPB7_DATA|GPB8_DATA)
.equ GPB_DATA_T, (GPB5_DATA_T|GPB6_DATA_T|GPB7_DATA_T|GPB8_DATA_T)
b irq
b firq
reset:
nop
nop
nop
undef:
nop
nop
nop
soft:
nop
nop
nop
resstop:
nop
nop
nop
datstop:
nop
nop
nop
irq:
clear_bit:
ldr sp,=0x32000000
sub lr,lr,#4
stmfd sp!,{r0-r12,r14}
ldr r0,=SUBSRCPND
ldr r1,[r0]
str r1,[r0]
ldr r0,=INTPND
ldr r1,=SRCPND
ldr r2,[r0]
str r2,[r1]
str r2,[r0]
/*******************EINTPND INIT*******************/
ldr r0,=EINTPND
ldr r1,[r0]
str r1,[r0]
feed_dog:
led:
ldr r0,=GPBCON
ldr r1,=GPBVALUE
str r1,[r0]
ldr r4,=0x31000000
ldr r0,[r4]
add r0,r0,#1
str r0,[r4]
and r0,r0,#0x00000001
cmp r0,#0
beq twocal
b recover
twocal:
ldr r4,=0x31100000
ldr r0,[r4]
add r0,r0,#1
str r0,[r4]
and r0,r0,#0x00000001
cmp r0,#1
beq led_style_two
blt led_style_one
led_style_one:
ldr r0,=GPBDAT
ldr r1,=GPB_DATA
str r1,[r0]
b recover
led_style_two:
ldr r0,=GPBDAT
ldr r1,=GPB_DATA_T
str r1,[r0]
b recover
recover:
ldmfd sp!,{r0-r12,pc}^
firq:
nop
nop
nop
================================================
key.S
================================================
/************EXTINT1 INIT**********************/
key.S
================================================
.equ INTMSK,0x4A000008
.equ GPGCON,0X56000060
.equ GPGDAT,0X56000064
.equ GPGUP ,0X56000068
.equ EXTINT1,0X5600008C
.equ EINTMSK,0x560000A4
begin:
stmfd sp!,{r0-r4,lr}
/**************INTMSK INIT**********************/
ldr r0,=INTMSK
ldr r1,[r0]
.equ INTMSK_DATA,0xffffffdf
ldr r2,=INTMSK_DATA
and r1,r1,r2
str r1,[r0]
/**************EINTMSK INIT********************/
ldr r0,=EINTMSK
ldr r1,[r0]
.equ EXTINT1_MSK,0xfffffeff
ldr r2,=EXTINT1_MSK
and r1,r1,r2
str r1,[r0]
ldr r0,=EXTINT1
ldr r1,[r0]
.equ EXTINT1_DATA,0xfffffff8
ldr r2,=EXTINT1_DATA
mov r3,#0x02
and r1,r1,r2
orr r1,r1,r3
str r1,[r0]
/*****************GPGCON INIT******************/
/*
interrupt method
*/
ldr r0,=GPGCON
.equ GPGCON_DATA,0x0000002
ldr r1,[r0]
ldr r2,=0xfffffffe
ldr r3,=GPGCON_DATA
orr r1,r1,r3
and r1,r1,r2
str r1,[r0]
/* 轮询
ldr r0,=GPGCON
ldr r1,[r0]
ldr r2,=0xfffffffc
and r1,r1,r2
str r1,[r0]
*/
/*****************GPGDAT INIT*****************/
/*read things*/
/*
check:
ldr r0,=GPGDAT
ldr r1,[r0]
and r1,#0x0001
cmp r1,#0
beq led
b off
led:
.equ GPBCON,0x56000010
.equ GPBDAT, 0x56000014
.equ GPB5, (1<<(5*2))
.equ GPB6, (1<<(6*2))
.equ GPB7, (1<<(7*2))
.equ GPB8, (1<<(8*2))
.equ GPBVALUE, (GPB5|GPB6|GPB7|GPB8)
.equ GPB5_DATA, (0<<5)
.equ GPB6_DATA, (1<<6)
.equ GPB7_DATA, (1<<7)
.equ GPB8_DATA, (0<<8)
.equ GPB_DATA, (GPB5_DATA|GPB6_DATA|GPB7_DATA|GPB8_DATA)
ldr r0,=GPBCON
ldr r1,=GPBVALUE
str r1,[r0]
ldr r0,=GPBDAT
ldr r1,=GPB_DATA
str r1,[r0]
b check
off:
.equ GPB5_DATA_1, (1<<5)
.equ GPB6_DATA_1, (0<<6)
.equ GPB7_DATA_1, (0<<7)
.equ GPB8_DATA_1, (1<<8)
.equ GPB_DATA_1, (GPB5_DATA_1|GPB6_DATA_1|GPB7_DATA_1|GPB8_DATA_1)
ldr r0,=GPBCON
ldr r1,=GPBVALUE
str r1,[r0]
ldr r0,=GPBDAT
ldr r1,=GPB_DATA_1
str r1,[r0]
b check
*/
/*****************GPGUP INIT*****************/
ldr r0,=GPGUP
ldr r1,[r0]
mov r2,#0xfe
and r1,r1,r2
str r1,[r0]
return:
ldmfd sp!,{r0-r4,pc}