REC_CARD
[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 ; init bitcounter and overflow counter
101 ldi r20,0 ; bitcounter
102 ldi r21,0 ; register for constructing the byte
103 ldi r22,0 ; overflow counter
104 ldi r23,0 ; temp reg
105
106 ; constant 1 in r1
107 ldi r16,1
108 mov r1,r16
109
110 ; enable interrupts (global)
111 sei
112
113 ; jump to mainloop
114 rjmp MAIN
115
116 ;
117 ; main routine
118 ;
119
120 MAIN:
121
122 rjmp MAIN
123
124 ;
125 ; rec_card routines
126 ;
127
128 REC_CARD:
129
130 ; decide what to do
131 sbic PORTD,PD6
132 rjmp REC_CARD_HIGH
133 rjmp REC_CARD_LOW
134
135 REC_CARD_HIGH:
136
137 ; output high on port to cam
138 sbi PORTD,PD3
139
140 ; toggle icp sense
141 cbi TCCR1B,ICES1
142 ;in r16,TCCR1B
143 ;cbr r16,ICES1
144 ;out TCCR1B,r16
145
146 ; build the byte ;) - still wrong!
147 ori r21,1
148 lsl r21
149
150 ;
151 ; hier gehts weiter ...
152 ;
153
154 reti
155
156 REC_CARD_LOW:
157
158 ; output low on port to cam
159 ldi r16,0
160 out PORTD,r16
161
162 ; toggle int0 sense
163 in r16,MCUCR
164 cbr r16,ISC00
165 out MCUCR,r16
166
167 reti
168
169 ;
170 ; rec_cam routines
171 ;
172
173 REC_CAM:
174
175 ; int1 -> input, int0 -> output
176 ldi r16,(1<<DDD2)
177 out DDRD,r16
178
179 ; decide what to do
180 sbic PORTD,PD3
181 rjmp REC_CAM_HIGH
182 rjmp REC_CAM_LOW
183
184 REC_CAM_HIGH:
185
186 ; output high on port to card
187 ldi r16,(1<<PD2)
188 out PORTD,r16
189
190 ; toggle int1 sense
191 in r16,MCUCR
192 cbr r16,ISC10
193 out MCUCR,r16
194
195 reti
196
197 REC_CAM_LOW:
198
199 ; output low on port to card
200 ldi r16,0
201 out PORTD,r16
202
203 ; toggle int 1 sense
204 in r16,MCUCR
205 cbr r16,ISC10
206 out MCUCR,r16
207
208 reti
209
210 ;
211 ; t1_overflow routine
212 ;
213
214 T1_OVERFLOW:
215
216 add r22,r1 ; inc counter overflow register
217
218 reti
219