should work now, of course it does not!
[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    tmp             = r16
11 .def    uart_rxtx       = r17
12 .def    tmp_motor       = 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         ; uart init
58         rcall UART_INIT
59
60         ; motor init
61         rcall MOTOR_INIT
62
63         ; uart interrupt enable
64         rcall UART_INT_RX_INIT
65
66         ; set stackpointer
67         ldi tmp,high(RAMEND)
68         out SPH,r16 
69         ldi tmp,low(RAMEND)
70         out SPL,r16
71
72         ; global interrupt enable
73         sei 
74
75         ; debug 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         ; drive the motor
157         rcall MOTOR_STOP
158         cpi uart_rxtx,CTRL_FWD
159         brne CTRL1
160         rcall MOTOR_FWD
161         rjmp CTRL4
162         CTRL1:
163         cpi uart_rxtx,CTRL_BWD
164         brne CTRL2
165         rcall MOTOR_BWD
166         rjmp CTRL4
167         CTRL2:
168         cpi uart_rxtx,CTRL_RIGHT
169         brne CTRL3
170         rcall MOTOR_RIGHT
171         rjmp CTRL4
172         CTRL3:
173         cpi uart_rxtx,CTRL_LEFT
174         brne CTRL4
175         rcall MOTOR_LEFT
176         CTRL4:
177
178         reti
179
180 USART0_DRE:
181         reti
182
183 USART0_TXC:
184         reti
185
186 ADC:
187         reti
188
189 EE_RDY:
190         reti
191
192 ANA_COMP:
193         reti
194
195 TIM1_COMPC:
196         reti
197
198 TIM3_CAPT:
199         reti
200
201 TIM3_COMPA:
202         reti
203
204 TIM3_COMPB:
205         reti
206
207 TIM3_COMPC:
208         reti
209
210 TIM3_OVF:
211         reti
212
213 USART1_RXC:
214         reti
215
216 USART1_DRE:
217         reti
218
219 USART1_TXC:
220         reti
221
222 TWI:
223         reti
224
225 SPM_RDY:
226         reti
227