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 .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_COM_WITH_ADDR_PROTO
;#define MODULES_LED ;#define MODULES_LED
#define MODULES_LED_SIMPLE #define MODULES_LED_SIMPLE
#define MODULES_TWI_MASTER ;#define MODULES_TWI_MASTER
;#define MODULES_LCD ;#define MODULES_LCD
;#define LCD_MINIMAL_FONT ;#define LCD_MINIMAL_FONT
;#define MODULES_SI7021 ;#define MODULES_SI7021
#define MODULES_STATS #define MODULES_STATS
;#define MODULES_CNY70 ;#define MODULES_CNY70
;#define MODULES_REED ;#define MODULES_REED
#define MODULES_OWI_MASTER ;#define MODULES_OWI_MASTER
;#define MODULES_DS18B20 ;#define MODULES_DS18B20
#define MODULES_SK6812
; --------------------------------------------------------------------------- ; ---------------------------------------------------------------------------
; defines for modules ; defines for modules
.equ VALUE_ID_SI7021_TEMP = 0x01 .equ VALUE_ID_SI7021_TEMP = 0x01
.equ VALUE_ID_SI7021_HUM = 0x02 .equ VALUE_ID_SI7021_HUM = 0x02
.equ VALUE_ID_ADC = 0x03 .equ VALUE_ID_ADC = 0x03
.equ VALUE_ID_REED1 = 0x04 .equ VALUE_ID_REED1 = 0x04
.equ VALUE_ID_REED2 = 0x05 .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 #ifdef MODULES_DS18B20
.include "modules/ds18b20/main.asm" .include "modules/ds18b20/main.asm"
#endif #endif
#ifdef MODULES_SK6812
.include "modules/sk6812/main.asm"
#endif
; *************************************************************************** ; ***************************************************************************
@@ -252,6 +258,13 @@ timerList:
systemSetSpeed: systemSetSpeed:
.if clock == 1000000
ldi r16, (1<<CLKPCE)
ldi r17, (1<<CLKPS1) | (1<<CLKPS0)
out CLKPR, r16
out CLKPR, r17
.endif
.if clock == 8000000 .if clock == 8000000
ldi r16, (1<<CLKPCE) ldi r16, (1<<CLKPCE)
ldi r17, 0 ldi r17, 0
@@ -262,12 +275,10 @@ systemSetSpeed:
systemSetBootSpeed: systemSetBootSpeed:
.if clock == 8000000
ldi r16, (1<<CLKPCE) ldi r16, (1<<CLKPCE)
ldi r17, (1<<CLKPS1) | (1<<CLKPS0) ldi r17, (1<<CLKPS1) | (1<<CLKPS0)
out CLKPR, r16 out CLKPR, r16
out CLKPR, r17 out CLKPR, r17
.endif
ret ret
@@ -395,6 +406,20 @@ onSetValueReceived:
ret ret
#endif #endif
onSetValueReceived_l1: 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 clc
ret ret
@@ -415,3 +440,35 @@ onSetReedConf:
#endif #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