clean up + uart tx fix
[my-code/atmel.git] / hdw-tank / main.asm
1 ; main file of hdw-tank project
2 ;
3 ; author: hackbard@hackdaworld.org
4 ;
5
6 ; device specific definition file
7 .include "../include/m128def.inc"
8
9 ; defines
10 .def    tmp1            = r16
11 .def    tmp2            = r17
12 .def    uart_rxtx       = r18
13
14 ; interrupts
15 jmp RESET 
16 jmp EXT_INT0 
17 jmp EXT_INT1 
18 jmp EXT_INT2 
19 jmp EXT_INT3 
20 jmp EXT_INT4 
21 jmp EXT_INT5 
22 jmp EXT_INT6 
23 jmp EXT_INT7 
24 jmp TIM2_COMP 
25 jmp TIM2_OVF 
26 jmp TIM1_CAPT 
27 jmp TIM1_COMPA
28 jmp TIM1_COMPB
29 jmp TIM1_OVF 
30 jmp TIM0_COMP 
31 jmp TIM0_OVF 
32 jmp SPI_STC 
33 jmp USART0_RXC
34 jmp USART0_DRE
35 jmp USART0_TXC
36 jmp ADC 
37 jmp EE_RDY 
38 jmp ANA_COMP 
39 jmp TIM1_COMPC
40 jmp TIM3_CAPT 
41 jmp TIM3_COMPA
42 jmp TIM3_COMPB
43 jmp TIM3_COMPC
44 jmp TIM3_OVF 
45 jmp USART1_RXC
46 jmp USART1_DRE
47 jmp USART1_TXC
48 jmp TWI 
49 jmp SPM_RDY 
50
51 ; include control defines
52 .include "ctrl.def"
53
54 RESET:
55 INIT:
56
57         ; motor init
58         rcall MOTOR_INIT
59
60         ; uart init
61         rcall UART_INIT
62
63         ; uart interrupt enable
64         rcall UART_INT_RX_INIT
65
66         ; set stackpointer
67         ldi tmp1,high(RAMEND)
68         out SPH,tmp1
69         ldi tmp1,low(RAMEND)
70         out SPL,tmp1
71
72         ; global interrupt enable
73         ;sei 
74
75         ; signal ready output
76         ldi uart_rxtx,0x23
77         rcall UART_TX
78
79 MAIN:
80
81         ; loop forever
82         rjmp MAIN
83
84
85 ; include subroutines
86 .include "motor.asm"
87 .include "uart.asm"
88
89
90 ;
91 ; interrupt routines
92 ;
93
94 EXT_INT0:
95         reti
96
97 EXT_INT1:
98         reti
99
100 EXT_INT2:
101         reti
102
103 EXT_INT3:
104         reti
105
106 EXT_INT4:
107         reti
108
109 EXT_INT5:
110         reti
111
112 EXT_INT6:
113         reti
114
115 EXT_INT7:
116         reti
117
118 TIM2_COMP:
119         reti
120
121 TIM2_OVF:
122         reti
123
124 TIM1_CAPT:
125         reti
126
127 TIM1_COMPA:
128         reti
129
130 TIM1_COMPB:
131         reti
132
133 TIM1_OVF:
134         reti
135
136 TIM0_COMP:
137         reti
138
139 TIM0_OVF:
140         reti
141
142 SPI_STC:
143         reti
144
145 USART0_RXC:
146
147         ; read received byte and drive the motor
148         ; in addition, loop it back to the host
149
150         ; receive routine (byte stored in uart_rxtx)
151         rcall UART_RX
152
153         ; loop back the received byte
154         rcall UART_TX
155
156         ;
157         ; drive the motor
158         ;
159
160         ; stop it first
161         rcall MOTOR_STOP
162
163         ; fwd
164         cpi uart_rxtx,CTRL_FWD
165         brne CTRL1
166         rcall MOTOR_FWD
167         rjmp CTRL4
168
169         ; bwd
170         CTRL1:
171         cpi uart_rxtx,CTRL_BWD
172         brne CTRL2
173         rcall MOTOR_BWD
174         rjmp CTRL4
175
176         ; right
177         CTRL2:
178         cpi uart_rxtx,CTRL_RIGHT
179         brne CTRL3
180         rcall MOTOR_RIGHT
181         rjmp CTRL4
182
183         ; left
184         CTRL3:
185         cpi uart_rxtx,CTRL_LEFT
186         brne CTRL4
187         rcall MOTOR_LEFT
188         CTRL4:
189
190         ; return
191         reti
192
193 USART0_DRE:
194         reti
195
196 USART0_TXC:
197         reti
198
199 ADC:
200         reti
201
202 EE_RDY:
203         reti
204
205 ANA_COMP:
206         reti
207
208 TIM1_COMPC:
209         reti
210
211 TIM3_CAPT:
212         reti
213
214 TIM3_COMPA:
215         reti
216
217 TIM3_COMPB:
218         reti
219
220 TIM3_COMPC:
221         reti
222
223 TIM3_OVF:
224         reti
225
226 USART1_RXC:
227         reti
228
229 USART1_DRE:
230         reti
231
232 USART1_TXC:
233         reti
234
235 TWI:
236         reti
237
238 SPM_RDY:
239         reti
240