; port functions
-GIO_PORT_INIT:
+PORT_INIT:
- ; port b 0-2 -> output
- ldi tmp1,0x06
+ ; port b 0-3 -> output
+ ldi tmp1,0x0f
out DDRB,tmp1
- ; zero outputs
- ldi tmp1,0x00
+ ; g, rck, sck -> low / scl -> high
+ ldi tmp1,0x07
out PORTB,tmp1
+ sbi PORTB,3
+
+ ; port d 6 -> output
+ sbi DDRD,6
+
+ ; ser -> low
+ cbi PORTD,6
ret
+SET_HC595:
+
+ ; storage clock -> low
+ cbi PORTD,1
+
+ ; source driver
+
+ ; clock -> low
+ cbi PORTB,2
+ ; set ser line
+ cbi PORTD,6
+ sbrc hc595_source,7
+ sbi PORTD,6
+ ; clock -> high
+ sbi PORTB,2
+
+ ; clock -> low
+ cbi PORTB,2
+ ; set ser line
+ cbi PORTD,6
+ sbrc hc595_source,6
+ sbi PORTD,6
+ ; clock -> high
+ sbi PORTB,2
+
+ ; clock -> low
+ cbi PORTB,2
+ ; set ser line
+ cbi PORTD,6
+ sbrc hc595_source,5
+ sbi PORTD,6
+ ; clock -> high
+ sbi PORTB,2
+
+ ; clock -> low
+ cbi PORTB,2
+ ; set ser line
+ cbi PORTD,6
+ sbrc hc595_source,4
+ sbi PORTD,6
+ ; clock -> high
+ sbi PORTB,2
+
+ ; clock -> low
+ cbi PORTB,2
+ ; set ser line
+ cbi PORTD,6
+ sbrc hc595_source,3
+ sbi PORTD,6
+ ; clock -> high
+ sbi PORTB,2
+
+ ; clock -> low
+ cbi PORTB,2
+ ; set ser line
+ cbi PORTD,6
+ sbrc hc595_source,2
+ sbi PORTD,6
+ ; clock -> high
+ sbi PORTB,2
+
+ ; clock -> low
+ cbi PORTB,2
+ ; set ser line
+ cbi PORTD,6
+ sbrc hc595_source,1
+ sbi PORTD,6
+ ; clock -> high
+ sbi PORTB,2
+
+ ; clock -> low
+ cbi PORTB,2
+ ; set ser line
+ cbi PORTD,6
+ sbrc hc595_source,0
+ sbi PORTD,6
+ ; clock -> high
+ sbi PORTB,2
+
+ ; sink driver
+
+ ; clock -> low
+ cbi PORTB,2
+ ; set ser line
+ cbi PORTD,6
+ sbrc hc595_sink,7
+ sbi PORTD,6
+ ; clock -> high
+ sbi PORTB,2
+
+ ; clock -> low
+ cbi PORTB,2
+ ; set ser line
+ cbi PORTD,6
+ sbrc hc595_sink,6
+ sbi PORTD,6
+ ; clock -> high
+ sbi PORTB,2
+
+ ; clock -> low
+ cbi PORTB,2
+ ; set ser line
+ cbi PORTD,6
+ sbrc hc595_sink,5
+ sbi PORTD,6
+ ; clock -> high
+ sbi PORTB,2
+
+ ; clock -> low
+ cbi PORTB,2
+ ; set ser line
+ cbi PORTD,6
+ sbrc hc595_sink,4
+ sbi PORTD,6
+ ; clock -> high
+ sbi PORTB,2
+
+ ; clock -> low
+ cbi PORTB,2
+ ; set ser line
+ cbi PORTD,6
+ sbrc hc595_sink,3
+ sbi PORTD,6
+ ; clock -> high
+ sbi PORTB,2
+
+ ; clock -> low
+ cbi PORTB,2
+ ; set ser line
+ cbi PORTD,6
+ sbrc hc595_sink,2
+ sbi PORTD,6
+ ; clock -> high
+ sbi PORTB,2
+
+ ; clock -> low
+ cbi PORTB,2
+ ; set ser line
+ cbi PORTD,6
+ sbrc hc595_sink,1
+ sbi PORTD,6
+ ; clock -> high
+ sbi PORTB,2
+
+ ; clock -> low
+ cbi PORTB,2
+ ; set ser line
+ cbi PORTD,6
+ sbrc hc595_sink,0
+ sbi PORTD,6
+ ; clock -> high
+ sbi PORTB,2
+
+ ; store to storage register
+ sbi PORTB,1
+
+ ret