basically finished monolyzer project
[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    bcount          = r19
16 .def    scount          = r20
17 .def    data            = r21
18 .def    state           = r22
19
20 ;
21 ; interrupts
22 ;
23
24 ; RESET
25 rjmp INIT
26
27 ; INT0
28 reti
29
30 ; INT1
31 reti
32
33 ; T1 CAPT1
34 reti
35
36 ; T1 COMP A
37 reti
38
39 ; T1 OVF1
40 reti
41
42 ; T0 OVF0
43 rjmp T0_OVF
44
45 ; UART RX
46 rjmp UART_RECEIVE
47
48 ; UART UDRE
49 reti
50
51 ; UART TX
52 reti
53
54 ; ANA COMP
55 reti
56
57 ; PCINT
58 reti
59
60 ; T1 COMP B
61 reti
62
63 ; T0 COMP A
64 reti
65
66 ; T0 COMP B
67 reti
68
69 ; USI START
70 reti
71
72 ; USI OVF
73 reti
74
75 ; EE READY
76 reti
77
78 ; WDT OVF
79 reti
80
81 ;
82 ; init and main code
83 ;
84
85 RESET:
86 INIT:
87
88         ; gio port init
89         rcall PORT_INIT
90
91         ; timer0 init
92         rcall TIMER0_INIT
93
94         ; uart init
95         rcall UART_INIT
96
97         ; zero and one initialization
98         ldi tmp1,0
99         mov zero,tmp1
100         ldi tmp1,1
101         mov one,tmp1
102
103         ; set stackpointer
104         ldi tmp1,low(RAMEND)
105         out SPL,tmp1
106
107         ; more init
108         ldi bcount,0
109         ldi scount,0
110         ldi data,0x00
111         ldi state,1
112
113         ; storage pointer
114         ldi ZL,low(STORAGE)
115         ldi ZH,high(STORAGE)
116
117         ; signal ready output
118         ldi uart_rxtx,0x72
119         rcall UART_TX
120
121         ; global interrupt enable
122         sei 
123
124 MAIN:
125
126 WAIT_FOR_HIGH:
127
128         ; start as soon as we get a high signal
129         in tmp1,PORTB
130         sbrs tmp1,0
131         rjmp WAIT_FOR_HIGH
132
133         ; timer0 interrupt enable
134         rcall TIMER0_INT_INIT
135         
136 SAMPLE:
137
138         ; sample as long as there is storage capacity
139         sbrs state,0
140         rjmp SAMPLE
141
142         ; timer0 interrupt disable
143         rcall TIMER0_INT_END
144
145         ; signal finish
146         ldi uart_rxtx,0x66
147         rcall UART_TX
148
149 IDLE:
150
151         ; wait for commands via uart
152         rcall UART_RX
153
154         ; decode instruction
155         cpi uart_rxtx,0x52
156         breq RESET
157         cpi uart_rxtx,0x54
158         breq TRANSFER
159
160         rjmp IDLE
161
162 TRANSFER:
163
164         ; reset storage pointer
165         ldi ZL,low(STORAGE)
166         ldi ZH,high(STORAGE)
167         ldi scount,0
168
169 TRANSFER_LOOP:
170
171         ; transmit storage
172         ld uart_rxtx,Z+
173         rcall UART_TX
174
175         ; count sent data
176         add scount,one
177
178         ; check amount of sent data
179         cpi scount,128
180         breq IDLE
181
182         rjmp TRANSFER_LOOP
183
184 ; include subroutines
185 .include "port.asm"
186 .include "timer.asm"
187 .include "uart.asm"
188
189 ;
190 ; interrupt routines
191 ;
192
193 T0_OVF:
194
195         ; debug output
196         ; cbi PORTD,3
197
198         ; read port
199         in tmp1,PORTB
200         sbrc tmp1,0
201         add data,one
202
203         ; increase and check bit counter
204         add bcount,one
205         cpi bcount,8
206         brne EXIT_T0_OVF
207         
208         ; store another byte into sram
209         st Z+,data
210         ldi bcount,0
211         add scount,one
212
213         ; check for left capacity
214         cpi scount,128
215         brne EXIT_T0_OVF
216         ldi state,0
217
218         ; debug output
219         ; sbi PORTD,3
220
221 EXIT_T0_OVF:
222
223         ; shift data bits
224         ; in any case => there is always a zero at lsb
225         lsl data
226         
227         reti
228
229 UART_RECEIVE:
230
231         reti
232
233
234 ;
235 ; sram
236 ;
237
238 .dseg
239
240 STORAGE: .byte 128
241
242