X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=led_plex%2Fport.asm;h=7109c3c08a14e4aa1bb44bed12dcf7ed43656b23;hb=1ae3689334b273952e70ebbde465caa68fd14efd;hp=715a40280ae80e435a594a24402685748a5ea3fb;hpb=28f8496b45653e6db6fb3d3863f546a4b1a8b042;p=my-code%2Fatmel.git diff --git a/led_plex/port.asm b/led_plex/port.asm index 715a402..7109c3c 100644 --- a/led_plex/port.asm +++ b/led_plex/port.asm @@ -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