X-Git-Url: https://www.hackdaworld.org/gitweb/?a=blobdiff_plain;f=led_plex%2Fport.asm;h=f57bda919a0dd809fd7856ec5528a03998a16609;hb=32e3f51bc0f4248019379fe784d38c7fb770f952;hp=aeb40f1670d7d45916e36adba3c6b0362c573a7d;hpb=df18c58bb7a380fd036a88b23282eeb19a1c42a5;p=my-code%2Fatmel.git diff --git a/led_plex/port.asm b/led_plex/port.asm index aeb40f1..f57bda9 100644 --- a/led_plex/port.asm +++ b/led_plex/port.asm @@ -1,14 +1,299 @@ ; 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 + + ; zero to everything ... + cbi PORTB,3 ; clear hc595 registers + sbi PORTB,1 ; store shift register data + cbi PORTB,1 ; release hc595 register clear + sbi PORTB,3 ; storage clock -> low + + ; source driver + + ; clock -> low + cbi PORTB,2 + ; set ser line + cbi PORTD,6 + sbrc hc595_source,0 + sbi PORTD,6 +.ifdef DEBUG_PORTS + ldi uart_rxtx,0x30 + sbrc hc595_source,0 + ldi uart_rxtx,0x31 + rcall UART_TX +.endif + ; clock -> high + sbi PORTB,2 + + ; clock -> low + cbi PORTB,2 + ; set ser line + cbi PORTD,6 + sbrc hc595_source,1 + sbi PORTD,6 +.ifdef DEBUG_PORTS + ldi uart_rxtx,0x30 + sbrc hc595_source,1 + ldi uart_rxtx,0x31 + rcall UART_TX +.endif + ; clock -> high + sbi PORTB,2 + + ; clock -> low + cbi PORTB,2 + ; set ser line + cbi PORTD,6 + sbrc hc595_source,2 + sbi PORTD,6 +.ifdef DEBUG_PORTS + ldi uart_rxtx,0x30 + sbrc hc595_source,2 + ldi uart_rxtx,0x31 + rcall UART_TX +.endif + ; clock -> high + sbi PORTB,2 + + ; clock -> low + cbi PORTB,2 + ; set ser line + cbi PORTD,6 + sbrc hc595_source,3 + sbi PORTD,6 +.ifdef DEBUG_PORTS + ldi uart_rxtx,0x30 + sbrc hc595_source,3 + ldi uart_rxtx,0x31 + rcall UART_TX +.endif + ; clock -> high + sbi PORTB,2 + + ; clock -> low + cbi PORTB,2 + ; set ser line + cbi PORTD,6 + sbrc hc595_source,4 + sbi PORTD,6 +.ifdef DEBUG_PORTS + ldi uart_rxtx,0x30 + sbrc hc595_source,4 + ldi uart_rxtx,0x31 + rcall UART_TX +.endif + ; clock -> high + sbi PORTB,2 + + ; clock -> low + cbi PORTB,2 + ; set ser line + cbi PORTD,6 + sbrc hc595_source,5 + sbi PORTD,6 +.ifdef DEBUG_PORTS + ldi uart_rxtx,0x30 + sbrc hc595_source,5 + ldi uart_rxtx,0x31 + rcall UART_TX +.endif + ; clock -> high + sbi PORTB,2 + + ; clock -> low + cbi PORTB,2 + ; set ser line + cbi PORTD,6 + sbrc hc595_source,6 + sbi PORTD,6 +.ifdef DEBUG_PORTS + ldi uart_rxtx,0x30 + sbrc hc595_source,6 + ldi uart_rxtx,0x31 + rcall UART_TX +.endif + ; clock -> high + sbi PORTB,2 + + ; clock -> low + cbi PORTB,2 + ; set ser line + cbi PORTD,6 + sbrc hc595_source,7 + sbi PORTD,6 +.ifdef DEBUG_PORTS + ldi uart_rxtx,0x30 + sbrc hc595_source,7 + ldi uart_rxtx,0x31 + rcall UART_TX +.endif + ; 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 +.ifdef DEBUG_PORTS + ldi uart_rxtx,0x30 + sbrc hc595_sink,7 + ldi uart_rxtx,0x31 + rcall UART_TX +.endif + ; clock -> high + sbi PORTB,2 + + ; clock -> low + cbi PORTB,2 + ; set ser line + cbi PORTD,6 + sbrc hc595_sink,6 + sbi PORTD,6 +.ifdef DEBUG_PORTS + ldi uart_rxtx,0x30 + sbrc hc595_sink,6 + ldi uart_rxtx,0x31 + rcall UART_TX +.endif + ; clock -> high + sbi PORTB,2 + + ; clock -> low + cbi PORTB,2 + ; set ser line + cbi PORTD,6 + sbrc hc595_sink,5 + sbi PORTD,6 +.ifdef DEBUG_PORTS + ldi uart_rxtx,0x30 + sbrc hc595_sink,5 + ldi uart_rxtx,0x31 + rcall UART_TX +.endif + ; clock -> high + sbi PORTB,2 + + ; clock -> low + cbi PORTB,2 + ; set ser line + cbi PORTD,6 + sbrc hc595_sink,4 + sbi PORTD,6 +.ifdef DEBUG_PORTS + ldi uart_rxtx,0x30 + sbrc hc595_sink,4 + ldi uart_rxtx,0x31 + rcall UART_TX +.endif + ; clock -> high + sbi PORTB,2 + + ; clock -> low + cbi PORTB,2 + ; set ser line + cbi PORTD,6 + sbrc hc595_sink,3 + sbi PORTD,6 +.ifdef DEBUG_PORTS + ldi uart_rxtx,0x30 + sbrc hc595_sink,3 + ldi uart_rxtx,0x31 + rcall UART_TX +.endif + ; clock -> high + sbi PORTB,2 + + ; clock -> low + cbi PORTB,2 + ; set ser line + cbi PORTD,6 + sbrc hc595_sink,2 + sbi PORTD,6 +.ifdef DEBUG_PORTS + ldi uart_rxtx,0x30 + sbrc hc595_sink,2 + ldi uart_rxtx,0x31 + rcall UART_TX +.endif + ; clock -> high + sbi PORTB,2 + + ; clock -> low + cbi PORTB,2 + ; set ser line + cbi PORTD,6 + sbrc hc595_sink,1 + sbi PORTD,6 +.ifdef DEBUG_PORTS + ldi uart_rxtx,0x30 + sbrc hc595_sink,1 + ldi uart_rxtx,0x31 + rcall UART_TX +.endif + ; clock -> high + sbi PORTB,2 + + ; clock -> low + cbi PORTB,2 + ; set ser line + cbi PORTD,6 + sbrc hc595_sink,0 + sbi PORTD,6 +.ifdef DEBUG_PORTS + ldi uart_rxtx,0x30 + sbrc hc595_sink,0 + ldi uart_rxtx,0x31 + rcall UART_TX +.endif + ; clock -> high + sbi PORTB,2 + + ; store to storage register + sbi PORTB,1 + + ret