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
118
119
120
121
122
|
.syntax unified
.cpu cortex-m0plus
.thumb
.type SETUP, %function
.global SETUP
.type UARTTX, %function
.type UARTRX, %function
.type SENDHEX, %function
.align 4
SETUP: LDR R0, [PC, #16] // 000000 044004 UARTRX
LDR R1, [PC, #20] // 000002 044405 UARTTX
LDR R2, [PC, #20] // 000004 045005 SENDHEX
MOV R9, R0 // 000006 043201
MOV R10, R1 // 000010 043212
MOV R11, R2 // 000012 043223
LDR R7, [PC, #4] // 000014 047401 START ADDRESS
ADDS R6, R7, 1 // 000016 016176
B MAINLOOP // 000020 160010
.HWORD 0x0000 // 000022 000000
.WORD UARTRX // 000024 010243 0x200010A3
// 000026 040000
.WORD UARTTX // 000030 010225 0x20001095
// 000032 040000
.WORD SENDHEX // 000034 010264 0x200010B5
// 000036 040000
.WORD 0x20001000 // 000040 010000 START ADDRESS
// 000042 020000
MAINLOOP: MOVS R0, R7 // 000044 000070 PROMPT
BLX R11 // 000046 043730 SENDHEX
MOVS R0, 0x20 // 000050 020040 SPACE
BLX R10 // 000052 043720 UARTTX
LDRH R0, [R7] // 000054 104070
BLX R11 // 000056 043730 SENDHEX
MOVS R0, 0x0D // 000060 020015 CARRIAGE RETURN
BLX R10 // 000062 043720 UARTTX
MOVS R0, R7 // 000064 000070
BLX R11 // 000066 043730 SENDHEX
MOVS R0, 0x20 // 000070 020040 SPACE
BLX R10 // 000072 043720 UARTTX
10: BLX R9 // 000074 043710 COMMAND LOOP, UARTRX
CMP R0, 0x47 // 000076 024107 ASCII G
BNE 20f // 000100 150400
BX R6 // 000102 043460
20: CMP R0, 0x0D // 000104 024015 CARRIAGE RETURN
BNE 30f // 000106 150401
ADDS R7, 0x2 // 000110 033402
B MAINLOOP // 000112 163753
30: CMP R0, 0x30 // 000114 024060 ASCII 0
BNE MAINLOOP // 000116 150751
BLX R10 // 000120 043720 UARTTX
40: BLX R9 // 000122 043710 UARTRX
CMP R0, 0x78 // 000124 024170 ASCII x
BNE 40b // 000126 150774
BLX R10 // 000130 043720 UARTTX
MOVS R4, 0 // 000132 022000
MOVS R5, 4 // 000134 022404
50: BLX R9 // 000136 043710 HEX LOOP, UARTRX
CMP R0, 0x30 // 000140 024060 ASCII 0
BLO 50b // 000142 151774
CMP R0, 0x39 // 000144 024071 ASCII 9
BLS 60f // 000146 154406
CMP R0, 0x41 // 000150 024101 ASCII A
BLO 50b // 000152 151770
CMP R0, 0x46 // 000154 024106 ASCII F
BHI 50b // 000156 154366
BLX R10 // 000160 043720 UARTTX
SUBS R0, 0x37 // 000162 034067 ASCII A MINUS 10
B 70f // 000164 160001
60: BLX R10 // 000166 043720 UARTTX
SUBS R0, 0x30 // 000170 034060 ASCII 0
70: LSLS R4, 4 // 000172 000444
ADDS R4, R0 // 000174 014044
SUBS R5, 1 // 000176 036401
BNE 50b // 000200 150755
80: BLX R9 // 000202 043710 UARTRX
CMP R0, 0x0D // 000204 024015 CARRIAGE RETURN
BNE 80b // 000206 150774
BLX R10 // 000210 043720 UARTTX
STRH R4, [R7] // 000212 100074
ADDS R7, 0x2 // 000214 033402
MOVS R0, 0x0A // 000216 020012 NEW LINE
BLX R10 // 000220 043720 UARTTX
B MAINLOOP // 000222 163707
UARTTX: LDR R1, [PC, #24] // 000224 044406 UART0_BASE
MOVS R3, 0x20 // 000226 021440 TX FIFO FULL
1: LDR R2, [R1, 0x18]// 000230 067012 UARTFR_OFST
TST R2, R3 // 000232 041032
BNE 1b // 000234 150774
STRB R0, [R1] // 000236 070010 UARTDR_OFST
BX LR // 000240 043560
UARTRX: LDR R1, [PC, #12] // 000242 044403
MOVS R3, 0x10 // 000244 021420 RX FIFO EMPTY
1: LDR R2, [R1, 0x18]// 000246 067012 UARTFR_OFST
TST R2, R3 // 000250 041032
BNE 1b // 000252 150774
LDRB R0, [R1] // 000254 074010 UARTDR_OFST
BX LR // 000256 043560
.WORD 0x40034000 // 000260 040000
// 000262 040003
SENDHEX: PUSH {LR} // 000264 132400
LSLS R4, R0, 0x10 // 000266 002004 16 BITS
MOVS R0, 0x30 // 000270 020060 ASCII 0
BLX R10 // 000272 043720 UARTTX
MOVS R0, 0x78 // 000274 020170 ASCII x
BLX R10 // 000276 043720
MOVS R5, 0x4 // 000300 022404
0: MOVS R0, 0x1C // 000302 020034
RORS R4, R0 // 000304 040704
UXTB R0, R4 // 000306 131340
CMP R0, 0x9 // 000310 024011
BHI 1f // 000312 154001
ADDS R0, 0x30 // 000314 030060 ASCII 0
B 2f // 000316 160000
1: ADDS R0, 0x37 // 000320 030067 ASCII A MINUS 10
2: BLX R10 // 000322 043720 UARTTX
SUBS R5, 1 // 000324 036401
BNE 0b // 000326 150764
POP {PC} // 000330 136400
|