new prescaler + debug outs
[my-code/atmel.git] / led_plex / port.asm
index aeb40f1..7109c3c 100644 (file)
 ; 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
+
+       ; port d 2 -> output (debug clk!)
+       sbi DDRD,2
+
+       ; port d 3 -> output (debug vertical!)
+       sbi DDRD,3
+
+       ; release hc595 register clear
+       sbi PORTB,3
 
        ret
 
+SET_HC595:
+
+       ; storage clock -> low
+       cbi PORTB,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