-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathassignment3.S
117 lines (94 loc) · 1.31 KB
/
assignment3.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#define csd_LED_ADDR 0x41200000
#define csd_SWITCH_ADDR 0x41210000
#define csd_SWITCH_INPUT 0x1000000
.extern csd_main
.align 8
// Our interrupt vector table
cydf_entry:
b csd_reset
b .
b .
b .
b .
b .
b cydf_irq
b .
.global main
csd_reset:
main:
mov r4, #0x10000000
loop:
bl csd_main @ r3 = iteration_num
mov r5, r3
ldr r3, =csd_LED_ADDR
mov r4, r5 @ r4 : iteration number which will be decreased by 1
mov r2, #1 @ LED0
str r2, [r3]
led0:
sub r4, #1
cmp r4, #0
bne led0
mov r4, r5
mov r2, #2 @ LED1
str r2, [r3]
led1:
sub r4, #1
cmp r4, #0
bne led1
mov r4, r5
mov r2, #4 @ LED2
str r2, [r3]
led2:
sub r4, #1
cmp r4, #0
bne led2
mov r4, r5
mov r2, #8 @ LED3
str r2, [r3]
led3:
sub r4, #1
cmp r4, #0
bne led3
mov r4, r5
mov r2, #16 @ LED4
str r2, [r3]
led4:
sub r4, #1
cmp r4, #0
bne led4
mov r4, r5
mov r2, #32 @ LED5
str r2, [r3]
led5:
sub r4, #1
cmp r4, #0
bne led5
mov r4, r5
mov r2, #64 @ LED6
str r2, [r3]
led6:
sub r4, #1
cmp r4, #0
bne led6
mov r4, r5
mov r2, #128 @ LED7
str r2, [r3]
led7:
sub r4, #1
cmp r4, #0
bne led7
@mov r4, r5
@mov r2, #256 @ LED8
@str r2, [r3]
b loop
forever:
nop
b forever
.data
.align 4
src:
dst:
.space 16 // allocate memory for 16 words
// Normal Interrupt Service Routine
cydf_irq:
b .