diff --git a/avr/modules/sk6812/main.asm b/avr/modules/sk6812/main.asm index 1671ed1..ba1ad37 100644 --- a/avr/modules/sk6812/main.asm +++ b/avr/modules/sk6812/main.asm @@ -154,92 +154,73 @@ sk6812SendPattern_loop2: sk6812SendQuadruple: mov r16, r19 ; G - rcall sk6812SendByte2 ; (r16, r17, r24, r25) + rcall sk6812SendByte4 ; (r16, r17, r24, r25) mov r16, r18 ; R - rcall sk6812SendByte2 ; (r16, r17, r24, r25) + rcall sk6812SendByte4 ; (r16, r17, r24, r25) mov r16, r20 ; B - rcall sk6812SendByte2 ; (r16, r17, r24, r25) + rcall sk6812SendByte4 ; (r16, r17, r24, r25) mov r16, r21 ; W - rcall sk6812SendByte2 ; (r16, r17, r24, r25) + rcall sk6812SendByte4 ; (r16, r17, r24, r25) ret ; @end -#if 0 + ; --------------------------------------------------------------------------- -; @routine sk6812SendByte +; @macro M_SK6812_HANDLEBIT + +.macro M_SK6812_HANDLEBIT + lsl r16 ; +1 + brcs l_sendOne ; +1 if false, +2 if branch taken + ; send ZERO + nop ; +1 + out SK6812_PORT, r25 ; +1 HIGH + nop + nop + nop + out SK6812_PORT, r24 ; +1 + nop ; +1 + rjmp l_end ; +2 +l_sendOne: + out SK6812_PORT, r25 ; +1 HIGH + nop ; +1 + nop ; +1 + nop ; +1 + nop ; +1 + nop ; +1 + out SK6812_PORT, r24 ; +1 + nop ; +1 +l_end: +.endmacro +; @end + + + +; --------------------------------------------------------------------------- +; @routine sk6812SendByte4 ; ; reset: 80microsecs -; 0: 300ns high, 900ns low (+/- 150ns) -; 1: 600ns high, 600ns low (+/- 150ns) +; 0: 500ns high, 750ns low (+/- 150ns) +; 1: 750ns high, 500ns low (+/- 150ns) +; 8 ticks per cycle ; ; @param r16 value ; @clobbers r16, r17, r24, r25 -sk6812SendByte: - ldi r17, 8 ; +1 - ldi r24, (1<