aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2024-12-03 22:31:31 -0700
committerJosh Rahm <joshuarahm@gmail.com>2024-12-03 22:31:31 -0700
commit47885d62b689bececb58b7bf9479a5c1ff1c9b5c (patch)
tree40ceb2acf3b9fdc0706b62c933b504229911c91a
parent326b366d3fe353493d2f14beeb94a4fd1a2ce11a (diff)
downloadch573-47885d62b689bececb58b7bf9479a5c1ff1c9b5c.tar.gz
ch573-47885d62b689bececb58b7bf9479a5c1ff1c9b5c.tar.bz2
ch573-47885d62b689bececb58b7bf9479a5c1ff1c9b5c.zip
Small fixes for the difference between RGB and GRB data formats.
-rw-r--r--fdl/ch573/spi.fdl40
-rw-r--r--include/ws2812b.h2
-rw-r--r--src/main.c5
-rw-r--r--src/ws2812b.c2
4 files changed, 16 insertions, 33 deletions
diff --git a/fdl/ch573/spi.fdl b/fdl/ch573/spi.fdl
index bdd1e24..5ce0cfb 100644
--- a/fdl/ch573/spi.fdl
+++ b/fdl/ch573/spi.fdl
@@ -8,9 +8,8 @@ package ch573.spi {
using ch573.common;
type spi_t : struct {
- assert_pos(0x0);
/** SPI0 Control Mode Register */
- reg ctrl_mod(8) : struct {
+ reg ctrl_mod(8) @0x0 : struct {
/** SPI master/slave mode select */
mode_slave : bit_t;
/** Clear FIFO/counter/interrupt flag */
@@ -48,7 +47,7 @@ package ch573.spi {
};
/** SPI0 Control Configuration Register */
- reg ctrl_cfg(8) : struct {
+ reg ctrl_cfg(8) @0x1 : struct {
/** DMA function enable bit */
dma_enable : bit_t;
reserved(1);
@@ -65,7 +64,7 @@ package ch573.spi {
};
/** SPI0 Interrupt Enable Register */
- reg inter_en(8) : struct {
+ reg inter_en(8) @0x2 : struct {
/** All byte transmission completion interrupt enable bit */
ie_cnt_end : bit_t;
/** Single byte transmission completion interrupt enable bit */
@@ -89,13 +88,11 @@ package ch573.spi {
reg slave_pre(8);
};
- assert_pos(0x04);
/** SPI0 Data Buffer Register */
- reg data_buf(8);
+ reg data_buf(8) @0x04;
- assert_pos(0x05);
/** SPI0 Status Register */
- reg status(8) : struct {
+ reg status(8) @0x05 : struct {
reserved(4);
/** Command receive completion in slave mode */
slv_cmd_act : bit_t;
@@ -107,9 +104,8 @@ package ch573.spi {
slv_select : bit_t;
};
- assert_pos(0x06);
/** SPI0 Interrupt Flag Register */
- reg int_flag(8) : struct {
+ reg int_flag(8) @0x06 : struct {
/** All byte transmission completion flag */
if_cnt_end : bit_t;
/** Single byte transmission completion flag */
@@ -127,34 +123,24 @@ package ch573.spi {
if_fst_byte : bit_t;
};
- assert_pos(0x07);
/** SPI0 FIFO Count Register */
- reg fifo_count(8);
+ reg fifo_count(8) @0x07;
- skip_to(0x0C);
/** SPI0 Total Transmission Length Register */
- reg total_count(16);
+ reg total_count (16) @0x0C;
- skip_to(0x10);
- reg fifo(8);
- reserved(16);
+ reg fifo(8) @0x10;
- assert_pos(0x13);
- reg fifo_count_1(8);
+ reg fifo_count_1(8) @0x13;
- assert_pos(0x14);
/** SPI0 DMA Buffer Current Address */
- reg dma_now(16);
- reserved(16);
+ reg dma_now(16) @0x14;
- assert_pos(0x18);
/** SPI0 DMA Buffer Start Address */
- reg dma_beg(16);
- reserved(16);
+ reg dma_beg(16) @0x18;
- assert_pos(0x1C);
/** SPI0 DMA Buffer End Address */
- reg dma_end(16);
+ reg dma_end(16) @0x1C;
};
instance spi0 at spi_base : spi_t;
diff --git a/include/ws2812b.h b/include/ws2812b.h
index e814b65..2061379 100644
--- a/include/ws2812b.h
+++ b/include/ws2812b.h
@@ -9,7 +9,7 @@
enum ws2812b_byte_order {
BYTE_ORDER_RGB = 0,
- BYTE_ORDER_GBR = 1,
+ BYTE_ORDER_GRB = 1,
};
struct ws2812b_buf {
diff --git a/src/main.c b/src/main.c
index ac5da83..2bbd0b3 100644
--- a/src/main.c
+++ b/src/main.c
@@ -210,9 +210,7 @@ int main(void)
size_t n = sizeof(buf);
struct ws2812b_buf ws_buf;
make_wsb2812b(&ws_buf, buf, n);
- ws_buf.byte_order = BYTE_ORDER_GBR;
-
- printf("Test %u", byte_scale(40, 0x80));
+ ws_buf.byte_order = BYTE_ORDER_RGB;
rgb_t color;
uint32_t time = 0;
@@ -228,7 +226,6 @@ int main(void)
time++;
GPIO_PORT.out.set(GPIO_PORT_B, ON, 7);
- // printf("WS_BUF: %p, %zu\n", ws_buf.buf, ws_buf.cur);
for (int i = 0; i < N_DMA_XFER; ++i) {
wait_for_dma();
start_dma(&ws_buf);
diff --git a/src/ws2812b.c b/src/ws2812b.c
index 3721b23..1dea9f1 100644
--- a/src/ws2812b.c
+++ b/src/ws2812b.c
@@ -32,7 +32,7 @@
inline static void complie_color_inline(
rgb_t color, struct rgb_compiled* out, enum ws2812b_byte_order byte_order)
{
- if (byte_order == BYTE_ORDER_GBR) {
+ if (byte_order == BYTE_ORDER_GRB) {
uint8_t tmp = color.r;
color.r = color.g;
color.g = tmp;