bcc6c1c87b1ced5d2b0adff680ac0d58cbe830fe
[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 reti
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,1
108
109         ; storage pointer
110         ldi ZL,low(STORAGE)
111         ldi ZH,high(STORAGE)
112
113         ; counter
114         ldi tmp1,0
115         out TCNT1H,tmp1
116         out TCNT1L,tmp1
117
118         ; signal ready output
119         ldi uart_rxtx,0x72
120         rcall UART_TX
121
122         ; external interrupt enable
123         rcall INT0_IR_CONF
124         rcall INT0_IR_ENABLE
125
126         ; global interrupt enable
127         sei 
128
129 MAIN:
130
131 SAMPLE:
132
133         ; sample as long as there is storage capacity
134         sbrc state,0
135         rjmp SAMPLE
136
137         ; external interrupt enable
138         rcall INT0_IR_DISABLE
139
140         ; signal finish
141         ldi uart_rxtx,0x66
142         rcall UART_TX
143
144 IDLE:
145
146         ; wait for commands via uart
147         rcall UART_RX
148
149         ; decode instruction
150         cpi uart_rxtx,0x52
151         breq RESET
152         cpi uart_rxtx,0x54
153         breq TRANSFER
154
155         rjmp IDLE
156
157 TRANSFER:
158
159         ; reset storage pointer
160         ldi ZL,low(STORAGE)
161         ldi ZH,high(STORAGE)
162         ldi count,0
163
164 TRANSFER_LOOP:
165
166         ; transmit storage
167         ld uart_rxtx,Z+
168         rcall UART_TX
169
170         ; count sent data
171         add count,one
172
173         ; check amount of sent data
174         cpi count,110
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         ; write timer value into sram
194         in tmp1,TCNT1L
195         in tmp2,TCNT1H
196         st Z+,tmp2
197         st Z+,tmp1
198
199         ; inc counter
200         add count,one
201
202         ; check for left capacity
203         cpi count,55
204         brne EXIT_IR
205
206         ; exit sampling
207         ldi state,0
208
209 EXIT_IR:
210
211         ; debug output
212         ; sbi PORTD,3
213
214         reti
215
216
217 ;
218 ; sram
219 ;
220
221 .dseg
222
223 STORAGE: .byte 110
224