avr: added routine sk6812SendPattern
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
; ***************************************************************************
|
||||
; defines
|
||||
|
||||
.equ SK6812_PATTERN_NUM = 3
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
@@ -21,6 +22,7 @@
|
||||
|
||||
sk6812DataBegin:
|
||||
sk6812NumLeds: .byte 1
|
||||
sk6812Pattern: .byte 5*SK6812_PATTERN_NUM ; 1 byte num leds, 4 bytes colour (RGBW)
|
||||
sk6812DataEnd:
|
||||
|
||||
|
||||
@@ -110,6 +112,37 @@ SK6812_SetAllColor_loop:
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine sk6812SendPattern
|
||||
;
|
||||
; Send given pattern to LEDs.
|
||||
;
|
||||
; @param R22 number of 5-byte subpatterns
|
||||
; @param X pointer to pattern (numleds, R, G, B, W)*SK6812_PATTERN_NUM
|
||||
; @clobbers R18, R19, R20, R21, R22, R23, X (R16, R17)
|
||||
|
||||
sk6812SendPattern:
|
||||
sk6812SendPattern_loop1:
|
||||
ld r23, X+ ; num leds
|
||||
tst r23
|
||||
brne sk6812SendPattern_readandset
|
||||
ret ; no leds, done
|
||||
sk6812SendPattern_readandset:
|
||||
ld r18, X+ ; R
|
||||
ld r19, X+ ; G
|
||||
ld r20, X+ ; B
|
||||
ld r21, X+ ; W
|
||||
sk6812SendPattern_loop2:
|
||||
rcall sk6812SendQuadruple ; (r16, r17)
|
||||
dec r23
|
||||
brne sk6812SendPattern_loop2
|
||||
dec r22
|
||||
brne sk6812SendPattern_loop1
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine sk6812SendQuadruple
|
||||
;
|
||||
@@ -122,13 +155,13 @@ SK6812_SetAllColor_loop:
|
||||
|
||||
sk6812SendQuadruple:
|
||||
mov r16, r19 ; G
|
||||
rcall sk6812SendByte
|
||||
rcall sk6812SendByte ; (r16, r17, r24, r25)
|
||||
mov r16, r18 ; R
|
||||
rcall sk6812SendByte
|
||||
rcall sk6812SendByte ; (r16, r17, r24, r25)
|
||||
mov r16, r20 ; B
|
||||
rcall sk6812SendByte
|
||||
rcall sk6812SendByte ; (r16, r17, r24, r25)
|
||||
mov r16, r21 ; W
|
||||
rcall sk6812SendByte
|
||||
rcall sk6812SendByte ; (r16, r17, r24, r25)
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user