avr: use sk6812 in n12 device (test case).

This commit is contained in:
Martin Preuss
2024-09-18 20:23:59 +02:00
parent 9e80636acb
commit a1a64fec42
2 changed files with 86 additions and 11 deletions

View File

@@ -148,4 +148,22 @@
.equ OWI_PINNUM = PORTB2
; ---------------------------------------------------------------------------
; SK6812
.equ SK6812_DDR = DDRA
.equ SK6812_PORT = PORTA
.equ SK6812_PINNUM = PORTA5
; ---------------------------------------------------------------------------
; debug
.equ DEBUG_LED_DDR = DDRA
.equ DEBUG_LED_PORT_OUT = PORTA
.equ DEBUG_LED_PORT_IN = PINA
.equ DEBUG_LED_PINNUM = PORTA5

View File

@@ -44,28 +44,32 @@
#define MODULES_COM_WITH_ADDR_PROTO
;#define MODULES_LED
#define MODULES_LED_SIMPLE
#define MODULES_TWI_MASTER
;#define MODULES_TWI_MASTER
;#define MODULES_LCD
;#define LCD_MINIMAL_FONT
;#define MODULES_SI7021
#define MODULES_STATS
;#define MODULES_CNY70
;#define MODULES_REED
#define MODULES_OWI_MASTER
;#define MODULES_OWI_MASTER
;#define MODULES_DS18B20
#define MODULES_SK6812
; ---------------------------------------------------------------------------
; defines for modules
.equ VALUE_ID_SI7021_TEMP = 0x01
.equ VALUE_ID_SI7021_HUM = 0x02
.equ VALUE_ID_SI7021_TEMP = 0x01
.equ VALUE_ID_SI7021_HUM = 0x02
.equ VALUE_ID_ADC = 0x03
.equ VALUE_ID_REED1 = 0x04
.equ VALUE_ID_REED2 = 0x05
.equ VALUE_ID_ADC = 0x03
.equ VALUE_ID_REED1 = 0x04
.equ VALUE_ID_REED2 = 0x05
.equ VALUE_ID_REED_CONF = 0x81
.equ VALUE_ID_REED_CONF = 0x81
.equ VALUE_ID_LED_NUMLEDS = 0x82
.equ VALUE_ID_LED_RGBW_VALUE = 0x83
@@ -171,7 +175,9 @@ firmwareStart: rjmp main
#ifdef MODULES_DS18B20
.include "modules/ds18b20/main.asm"
#endif
#ifdef MODULES_SK6812
.include "modules/sk6812/main.asm"
#endif
; ***************************************************************************
@@ -252,6 +258,13 @@ timerList:
systemSetSpeed:
.if clock == 1000000
ldi r16, (1<<CLKPCE)
ldi r17, (1<<CLKPS1) | (1<<CLKPS0)
out CLKPR, r16
out CLKPR, r17
.endif
.if clock == 8000000
ldi r16, (1<<CLKPCE)
ldi r17, 0
@@ -262,12 +275,10 @@ systemSetSpeed:
systemSetBootSpeed:
.if clock == 8000000
ldi r16, (1<<CLKPCE)
ldi r17, (1<<CLKPS1) | (1<<CLKPS0)
out CLKPR, r16
out CLKPR, r17
.endif
ret
@@ -395,6 +406,20 @@ onSetValueReceived:
ret
#endif
onSetValueReceived_l1:
cpi r16, VALUE_ID_LED_RGBW_VALUE
brne onSetValueReceived_l2
#ifdef MODULES_SK6812
rjmp onSetRgbwValue
#endif
onSetValueReceived_l2:
cpi r16, VALUE_ID_LED_NUMLEDS
brne onSetValueReceived_l3
#ifdef MODULES_SK6812
rjmp onSetNumLeds
#endif
onSetValueReceived_l3:
ldi r16, CPRO_CMD_VALUE_SET_NACK
rcall CPRO_SendSetValueResponse
clc
ret
@@ -415,3 +440,35 @@ onSetReedConf:
#endif
#ifdef MODULES_SK6812
onSetRgbwValue:
; get new value
adiw xh:xl, CPRO_PACKET_VALUE_OFFS_VALUE
ld r18, X+ ; R
ld r19, X+ ; G
ld r20, X+ ; B
ld r21, X+ ; W
sbiw xh:xl, CPRO_PACKET_VALUE_OFFS_VALUE+4
rcall SK6812_SetAllColor
; send ACK
ldi r16, CPRO_CMD_VALUE_SET_ACK
rcall CPRO_SendSetValueResponse
sec
ret
onSetNumLeds:
; get new value
adiw xh:xl, CPRO_PACKET_VALUE_OFFS_VALUE
ld r16, X ; number of leds
sbiw xh:xl, CPRO_PACKET_VALUE_OFFS_VALUE
sts sk6812NumLeds, r16
; send ACK
ldi r16, CPRO_CMD_VALUE_SET_ACK
rcall CPRO_SendSetValueResponse
sec
ret
#endif