b41f3b3af57ad4c516ddf0ac94c0996e898fb137
[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 and signal
129         cpi state,2
130         brne 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         ; check amount of sent data
167         cp tmp1,count
168         breq IDLE
169
170         ; transmit storage
171         ld uart_rxtx,Z+
172         rcall UART_TX
173         ld uart_rxtx,Z+
174         rcall UART_TX
175
176         ; count sent data
177         add tmp1,one
178
179         rjmp TRANSFER_LOOP
180
181 ; include subroutines
182 .include "port.asm"
183 .include "timer.asm"
184 .include "uart.asm"
185
186 ;
187 ; interrupt routines
188 ;
189
190 INT0_IR:
191
192         ; debug output
193         ; cbi PORTD,3
194
195         ; get timer value
196         in tmp1,TCNT1L
197         in tmp2,TCNT1H
198
199         ; check for initial or running state
200         cpi state,0
201         brne INT0_RUN
202
203         ; configure interrupt for running state
204         rcall INT0_IR_CONF_RUN
205         ldi state,1
206
207         ; reset timer and start ovf interrupt
208         ldi tmp1,0
209         out TCNT1H,tmp1
210         out TCNT1L,tmp1
211         rcall TIMER1_INT_ENABLE
212
213         rjmp EXIT_IR
214
215 INT0_RUN:
216
217         ; write timer value into sram
218         st Z+,tmp2
219         st Z+,tmp1
220
221         ; inc counter
222         add count,one
223
224         ; check for left capacity
225         cpi count,55
226         brne EXIT_IR
227
228         ; indicate end of 'c'apacity
229         ldi uart_rxtx,0x63
230         rcall UART_TX
231
232         ; exit sampling
233         ldi state,2
234
235 EXIT_IR:
236
237         ; debug output
238         ; sbi PORTD,3
239
240         reti
241
242 T1_OVF_IR:
243
244         ; indicate 'o'verflow end
245         ldi uart_rxtx,0x6f
246         rcall UART_TX
247
248         ; exit sampling
249         ldi state,2
250
251         reti
252
253
254 ;
255 ; sram
256 ;
257
258 .dseg
259
260 STORAGE: .byte 110
261