; 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
- out PORTB,tmp1
+ ; disable hc595 outputs
+ sbi PORTB,0
+
+ ; rck -> low
+ cbi PORTB,1
+
+ ; clear hc595 registers
+ cbi PORTB,3
+
+ ; rck -> high (store shift register data)
+ sbi PORTB,1
+
+ ; enable outputs
+ cbi PORTB,0
+
+ ; port d 6 -> output
+ sbi DDRD,6
+
+ ; ser -> low
+ cbi PORTD,6
+
+ ; release hc595 register clear
+ sbi PORTB,3
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