8380e9215d7cdb6d4d04181f0ebe475d109c48e4
[my-code/atmel.git] / beginners / season_junior.asm
1 ; season - junior
2 ;
3 ; author: hackbard@hackdaworld.dyndns.org
4 ;
5
6
7 ; at90s2313
8 ; setup:
9 ; vcc card --- atmel vcc
10 ; vcc cam  --- 
11 ; rst cam  --- atmel int0 (pd2)
12 ; rst card --- atmel (pd4)
13 ; clk card -\ 
14 ;            -  atmel t1 (pd5)
15 ; clk cam  -/
16 ; gnd card --- gnd cam --- atmel gnd
17 ; i/o card --- atmel icp (pd6)
18 ; i/o cam  --- atmel int1 (pd3)
19
20 .include "../include/2313def.inc"
21
22 ; functions by now:
23 ;
24 ; stupid mode only by now. just see what cam/card do and redirect
25 ; this to card/cam.
26 ;
27 ; next implementation:
28
29 ; try to read one byte of card/cam communication and output via uart.
30 ; output time information in some way.
31 ;
32 ; future:
33 ;
34 ; buffer/parse whole strings and decide whether to send to card or not.
35
36 ;
37 ; interrupt vectors:
38 ;
39
40 ; reset
41 rjmp INIT
42
43 ; int0
44 rjmp RST_CAM
45
46 ; int1
47 rjmp REC_CAM
48
49 ; timer/counter capt 1
50 rjmp REC_CARD
51
52 ; timer/counter compare
53 reti
54
55 ; timer/counter overflow 1
56 rjmp CLK_OVERFLOW
57
58 ; timer/counter overflow 0
59 reti
60
61 ; uart rx complete
62 reti
63
64 ; uart data register empty
65 rjmp UART_OUT
66
67 ; uart tx complete
68 reti
69
70 ; analog comparator
71 reti
72
73 ;
74 ; init routine
75 ;
76
77 MAIN:
78 rjmp MAIN
79
80 INIT:
81
82 ; set stackpointer
83 ldi r16,low(RAMEND)
84 out SPL,r16
85
86 ; enable interrupts int0,int1
87 ldi r16,((1<<INT0)|(1<<INT1))
88 out GIMSK,r16
89 ; int0/1 setup
90 ldi r16,((1<<ISC01)|(1<<ISC00)|(1<<ISC10)|(1<<ISC11))
91 out MCUCR,r16
92
93 ; enable t/c overflow interrupt and icp
94 ldi r16,((1<<TOIE1)|(1<<TICIE1))
95 out TIMSK,r16
96 ; setup t/c and icp
97 ldi r16,((1<<CS12)|(1<<CS11)|(1<<CS10)|(1<<ICNC1))
98 out TCCR1B,r16
99
100 ; configure uart - interrupt enabled when i/o
101 ldi r16,3
102 out UBRR,r16
103 sbi UCR,TXEN
104
105 ; init bitcounter and overflow counter
106 ldi r20,0 ; bitcounter
107 ldi r21,0 ; register for constructing the byte
108 ldi r22,0 ; overflow counter
109 ldi r23,0 ; temp reg
110
111 ; constant 1 in r1
112 ldi r16,1
113 mov r1,r16
114
115 ; enable interrupts (global)
116 sei
117
118 ; jump to mainloop
119 rjmp MAIN
120
121 ;
122 ; main routine
123 ;
124
125 MAIN:
126
127 rjmp MAIN
128
129 ;
130 ; rec_card routines
131 ;
132
133 REC_CARD:
134
135 ; decide what to do
136 sbic PORTD,PD6
137 rjmp REC_CARD_HIGH
138 rjmp REC_CARD_LOW
139
140 REC_CARD_HIGH:
141
142 ; save counter
143 in r24,ICR1L
144 in r25,ICR1H
145
146 ; output high on port to cam
147 sbi PORTD,PD3
148
149 ; toggle icp sense
150 cbi TCCR1B,ICES1
151 ;in r16,TCCR1B
152 ;cbr r16,ICES1
153 ;out TCCR1B,r16
154
155 ; status tu submit
156 ldi r26,1
157
158 ; enable uart dre interrupt
159 sbi UCR,UDRIE
160
161 reti
162
163 REC_CARD_LOW:
164
165 ; save counter
166 in r27,ICR1L
167 in r28,ICR1H
168
169 ; output low on port to cam
170 cbi PORTD,PD3
171
172 ; toggle icp sense
173 sbi TCCR1B,ICES1
174
175 ; status to submit
176 ldi r26,0
177
178 ; enable uart dre interrupt
179 sbi UCR,UDRIE
180
181 reti
182
183 ;
184 ; rec_cam routines
185 ;
186
187 REC_CAM:
188
189 ; decide what to do
190 sbic PORTD,PD3
191 rjmp REC_CAM_HIGH
192 rjmp REC_CAM_LOW
193
194 REC_CAM_HIGH:
195
196 ; output high on port to card
197 sbi PORTD,PD6
198
199 ; toggle int1 sense
200 in r16,MCUCR
201 cbr r16,ISC10
202 out MCUCR,r16
203
204 reti
205
206 REC_CAM_LOW:
207
208 ; output low on port to card
209 cbi PORTD,PD6
210
211 ; toggle int 1 sense
212 in r16,MCUCR
213 sbr r16,ISC10
214 out MCUCR,r16
215
216 reti
217
218 ;
219 ; t1_overflow routine
220 ;
221
222 T1_OVERFLOW:
223
224 add r22,r1 ; inc counter overflow register
225
226 reti
227
228 ;
229 ; rst_cam routine
230 ;
231
232 RST_CAM:
233
234 ; decide what to do
235 sbic PORTD,PD2
236 rjmp RST_CAM_HIGH
237 rjmp RST_CAM_LOW
238
239 RST_CAM_HIGH:
240
241 ; output high on rst port to card
242 sbi PORTD,PD4
243
244 ; toggle int0 sense
245 in r16,MCUCR
246 cbr r16,ISC00
247 out MCUCR,r16
248
249 reti
250
251 RST_CAM_LOW:
252
253 ; output low on rst port to cam
254 cbi PORTD,PD4
255
256 ; toggle int0 sense
257 in r16,MCUCR
258 sbr r16,ISC00
259 out MCUCR,r16
260
261 reti
262
263 ;
264 ; uart_out routines
265 ;
266
267 UART_OUT:
268
269 ;
270 ; hier weiter ...
271 ;