new prescaler + debug outs
[my-code/atmel.git] / led_plex / port.asm
index 715a402..7109c3c 100644 (file)
@@ -6,16 +6,192 @@ PORT_INIT:
        ldi tmp1,0x0f
        out DDRB,tmp1
 
-       ; g, rck, sck -> low / scl -> high
-       cbi PORTB,(1<<0)|(1<<1)|(1<<2)
-       sbi PORTB,(1<<3)
+       ; 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
-       ldi tmp1,(1<<6)
-       out DDRD,tmp1
+       sbi DDRD,6
 
        ; ser -> low
-       cbi PORTD,(1<<6)
+       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