basic implementation done ...
[my-code/atmel.git] / led_plex / port.asm
1 ; port functions
2
3 PORT_INIT:
4
5         ; port b 0-3 -> output
6         ldi tmp1,0x0f
7         out DDRB,tmp1
8
9         ; disable hc595 outputs
10         sbi PORTB,0
11
12         ; rck -> low
13         cbi PORTB,1
14
15         ; clear hc595 registers
16         cbi PORTB,3
17
18         ; rck -> high (store shift register data)
19         sbi PORTB,1
20
21         ; enable outputs
22         cbi PORTB,0
23
24         ; port d 6 -> output
25         sbi DDRD,6
26
27         ; ser -> low
28         cbi PORTD,6
29
30         ; port d 2 -> output (debug clk!)
31         sbi DDRD,2
32
33         ; port d 3 -> output (debug vertical!)
34         sbi DDRD,3
35
36         ; release hc595 register clear
37         sbi PORTB,3
38
39         ret
40
41 SET_HC595:
42
43         ; storage clock -> low
44         cbi PORTB,1
45
46         ; zero to everything ...
47         cbi PORTB,3 ; clear hc595 registers
48         sbi PORTB,1 ; store shift register data
49         cbi PORTB,1 ; release hc595 register clear
50         sbi PORTB,3 ; storage clock -> low
51
52         ; source driver
53
54         ; clock -> low
55         cbi PORTB,2
56         ; set ser line
57         cbi PORTD,6
58         sbrc hc595_source,0
59         sbi PORTD,6
60 .ifdef DEBUG_PORTS
61         ldi uart_rxtx,0x30
62         sbrc hc595_source,0
63         ldi uart_rxtx,0x31
64         rcall UART_TX
65 .endif
66         ; clock -> high
67         sbi PORTB,2
68
69         ; clock -> low
70         cbi PORTB,2
71         ; set ser line
72         cbi PORTD,6
73         sbrc hc595_source,1
74         sbi PORTD,6
75 .ifdef DEBUG_PORTS
76         ldi uart_rxtx,0x30
77         sbrc hc595_source,1
78         ldi uart_rxtx,0x31
79         rcall UART_TX
80 .endif
81         ; clock -> high
82         sbi PORTB,2
83
84         ; clock -> low
85         cbi PORTB,2
86         ; set ser line
87         cbi PORTD,6
88         sbrc hc595_source,2
89         sbi PORTD,6
90 .ifdef DEBUG_PORTS
91         ldi uart_rxtx,0x30
92         sbrc hc595_source,2
93         ldi uart_rxtx,0x31
94         rcall UART_TX
95 .endif
96         ; clock -> high
97         sbi PORTB,2
98
99         ; clock -> low
100         cbi PORTB,2
101         ; set ser line
102         cbi PORTD,6
103         sbrc hc595_source,3
104         sbi PORTD,6
105 .ifdef DEBUG_PORTS
106         ldi uart_rxtx,0x30
107         sbrc hc595_source,3
108         ldi uart_rxtx,0x31
109         rcall UART_TX
110 .endif
111         ; clock -> high
112         sbi PORTB,2
113
114         ; clock -> low
115         cbi PORTB,2
116         ; set ser line
117         cbi PORTD,6
118         sbrc hc595_source,4
119         sbi PORTD,6
120 .ifdef DEBUG_PORTS
121         ldi uart_rxtx,0x30
122         sbrc hc595_source,4
123         ldi uart_rxtx,0x31
124         rcall UART_TX
125 .endif
126         ; clock -> high
127         sbi PORTB,2
128
129         ; clock -> low
130         cbi PORTB,2
131         ; set ser line
132         cbi PORTD,6
133         sbrc hc595_source,5
134         sbi PORTD,6
135 .ifdef DEBUG_PORTS
136         ldi uart_rxtx,0x30
137         sbrc hc595_source,5
138         ldi uart_rxtx,0x31
139         rcall UART_TX
140 .endif
141         ; clock -> high
142         sbi PORTB,2
143
144         ; clock -> low
145         cbi PORTB,2
146         ; set ser line
147         cbi PORTD,6
148         sbrc hc595_source,6
149         sbi PORTD,6
150 .ifdef DEBUG_PORTS
151         ldi uart_rxtx,0x30
152         sbrc hc595_source,6
153         ldi uart_rxtx,0x31
154         rcall UART_TX
155 .endif
156         ; clock -> high
157         sbi PORTB,2
158
159         ; clock -> low
160         cbi PORTB,2
161         ; set ser line
162         cbi PORTD,6
163         sbrc hc595_source,7
164         sbi PORTD,6
165 .ifdef DEBUG_PORTS
166         ldi uart_rxtx,0x30
167         sbrc hc595_source,7
168         ldi uart_rxtx,0x31
169         rcall UART_TX
170 .endif
171         ; clock -> high
172         sbi PORTB,2
173
174         ; sink driver
175         
176         ; clock -> low
177         cbi PORTB,2
178         ; set ser line
179         cbi PORTD,6
180         sbrc hc595_sink,7
181         sbi PORTD,6
182 .ifdef DEBUG_PORTS
183         ldi uart_rxtx,0x30
184         sbrc hc595_sink,7
185         ldi uart_rxtx,0x31
186         rcall UART_TX
187 .endif
188         ; clock -> high
189         sbi PORTB,2
190         
191         ; clock -> low
192         cbi PORTB,2
193         ; set ser line
194         cbi PORTD,6
195         sbrc hc595_sink,6
196         sbi PORTD,6
197 .ifdef DEBUG_PORTS
198         ldi uart_rxtx,0x30
199         sbrc hc595_sink,6
200         ldi uart_rxtx,0x31
201         rcall UART_TX
202 .endif
203         ; clock -> high
204         sbi PORTB,2
205         
206         ; clock -> low
207         cbi PORTB,2
208         ; set ser line
209         cbi PORTD,6
210         sbrc hc595_sink,5
211         sbi PORTD,6
212 .ifdef DEBUG_PORTS
213         ldi uart_rxtx,0x30
214         sbrc hc595_sink,5
215         ldi uart_rxtx,0x31
216         rcall UART_TX
217 .endif
218         ; clock -> high
219         sbi PORTB,2
220         
221         ; clock -> low
222         cbi PORTB,2
223         ; set ser line
224         cbi PORTD,6
225         sbrc hc595_sink,4
226         sbi PORTD,6
227 .ifdef DEBUG_PORTS
228         ldi uart_rxtx,0x30
229         sbrc hc595_sink,4
230         ldi uart_rxtx,0x31
231         rcall UART_TX
232 .endif
233         ; clock -> high
234         sbi PORTB,2
235         
236         ; clock -> low
237         cbi PORTB,2
238         ; set ser line
239         cbi PORTD,6
240         sbrc hc595_sink,3
241         sbi PORTD,6
242 .ifdef DEBUG_PORTS
243         ldi uart_rxtx,0x30
244         sbrc hc595_sink,3
245         ldi uart_rxtx,0x31
246         rcall UART_TX
247 .endif
248         ; clock -> high
249         sbi PORTB,2
250         
251         ; clock -> low
252         cbi PORTB,2
253         ; set ser line
254         cbi PORTD,6
255         sbrc hc595_sink,2
256         sbi PORTD,6
257 .ifdef DEBUG_PORTS
258         ldi uart_rxtx,0x30
259         sbrc hc595_sink,2
260         ldi uart_rxtx,0x31
261         rcall UART_TX
262 .endif
263         ; clock -> high
264         sbi PORTB,2
265         
266         ; clock -> low
267         cbi PORTB,2
268         ; set ser line
269         cbi PORTD,6
270         sbrc hc595_sink,1
271         sbi PORTD,6
272 .ifdef DEBUG_PORTS
273         ldi uart_rxtx,0x30
274         sbrc hc595_sink,1
275         ldi uart_rxtx,0x31
276         rcall UART_TX
277 .endif
278         ; clock -> high
279         sbi PORTB,2
280         
281         ; clock -> low
282         cbi PORTB,2
283         ; set ser line
284         cbi PORTD,6
285         sbrc hc595_sink,0
286         sbi PORTD,6
287 .ifdef DEBUG_PORTS
288         ldi uart_rxtx,0x30
289         sbrc hc595_sink,0
290         ldi uart_rxtx,0x31
291         rcall UART_TX
292 .endif
293         ; clock -> high
294         sbi PORTB,2
295         
296         ; store to storage register
297         sbi PORTB,1
298
299         ret