more control
[my-code/atmel.git] / monolyzer / main.asm
1 ; main file of the monolyzer project
2 ;
3 ; author: hackbard@hackdaworld.org
4 ;
5
6 ; device specific definition file
7 .include "../include/tn2313def.inc"
8
9 ; defines
10 .def    zero            = r1
11 .def    one             = r2
12 .def    tmp1            = r16
13 .def    tmp2            = r17
14 .def    uart_rxtx       = r18
15 .def    count           = r19
16 .def    state           = r20
17
18 ;
19 ; interrupts
20 ;
21
22 ; RESET
23 rjmp INIT
24
25 ; INT0
26 rjmp INT0_IR
27
28 ; INT1
29 reti
30
31 ; T1 CAPT1
32 reti
33
34 ; T1 COMP A
35 reti
36
37 ; T1 OVF1
38 rjmp T1_OVF_IR
39
40 ; T0 OVF0
41 reti
42
43 ; UART RX
44 reti
45
46 ; UART UDRE
47 reti
48
49 ; UART TX
50 reti
51
52 ; ANA COMP
53 reti
54
55 ; PCINT
56 reti
57
58 ; T1 COMP B
59 reti
60
61 ; T0 COMP A
62 reti
63
64 ; T0 COMP B
65 reti
66
67 ; USI START
68 reti
69
70 ; USI OVF
71 reti
72
73 ; EE READY
74 reti
75
76 ; WDT OVF
77 reti
78
79 ;
80 ; init and main code
81 ;
82
83 RESET:
84 INIT:
85
86         ; gio port init
87         rcall PORT_INIT
88
89         ; timer1 init
90         rcall TIMER1_INIT
91
92         ; uart init
93         rcall UART_INIT
94
95         ; zero and one initialization
96         ldi tmp1,0
97         mov zero,tmp1
98         ldi tmp1,1
99         mov one,tmp1
100
101         ; set stackpointer
102         ldi tmp1,low(RAMEND)
103         out SPL,tmp1
104
105         ; more init
106         ldi count,0
107         ldi state,0
108
109         ; storage pointer
110         ldi ZL,low(STORAGE)
111         ldi ZH,high(STORAGE)
112
113         ; signal ready output
114         ldi uart_rxtx,0x72
115         rcall UART_TX
116
117         ; external interrupt enable
118         rcall INT0_IR_CONF_INIT
119         rcall INT0_IR_ENABLE
120
121         ; global interrupt enable
122         sei 
123
124 MAIN:
125
126 SAMPLE:
127
128         ; sample as long as there is storage capacity
129         sbrs state,0
130         rjmp SAMPLE
131
132         ; disable interrupts
133         rcall INT0_IR_DISABLE
134         rcall TIMER1_INT_DISABLE
135
136         ; signal finish
137         ldi uart_rxtx,0x66
138         rcall UART_TX
139
140 IDLE:
141
142         ; wait for commands via uart
143         rcall UART_RX
144
145         ; decode instruction
146         cpi uart_rxtx,0x52
147         breq RESET
148         cpi uart_rxtx,0x54
149         breq TRANSFER
150
151         rjmp IDLE
152
153 TRANSFER:
154
155         ; reset storage pointer
156         ldi ZL,low(STORAGE)
157         ldi ZH,high(STORAGE)
158         ldi tmp1,0
159
160         ; transmit number of sampled words
161         mov uart_rxtx,count
162         rcall UART_TX
163
164 TRANSFER_LOOP:
165
166         ; transmit storage
167         ld uart_rxtx,Z+
168         rcall UART_TX
169
170         ; count sent data
171         add tmp1,one
172
173         ; check amount of sent data
174         cp tmp1,count
175         breq IDLE
176
177         rjmp TRANSFER_LOOP
178
179 ; include subroutines
180 .include "port.asm"
181 .include "timer.asm"
182 .include "uart.asm"
183
184 ;
185 ; interrupt routines
186 ;
187
188 INT0_IR:
189
190         ; debug output
191         ; cbi PORTD,3
192
193         ; get timer value
194         in tmp1,TCNT1L
195         in tmp2,TCNT1H
196
197         ; check for initial or running state
198         cpi state,0
199         brne INT0_RUN
200
201         ; configure interrupt for running state
202         rcall INT0_IR_CONF_RUN
203         ldi state,1
204
205         ; reset timer and start ovf interrupt
206         ldi tmp1,0
207         out TCNT1H,tmp1
208         out TCNT1L,tmp1
209         rcall TIMER1_INT_ENABLE
210
211         rjmp EXIT_IR
212
213 INT0_RUN:
214
215         ; write timer value into sram
216         st Z+,tmp2
217         st Z+,tmp1
218
219         ; inc counter
220         add count,one
221
222         ; check for left capacity
223         cpi count,55
224         brne EXIT_IR
225
226         ; exit sampling
227         ldi state,0
228
229 EXIT_IR:
230
231         ; debug output
232         ; sbi PORTD,3
233
234         reti
235
236 T1_OVF_IR:
237
238         ; exit sampling
239         ldi state,0
240
241         reti
242
243
244 ;
245 ; sram
246 ;
247
248 .dseg
249
250 STORAGE: .byte 110
251