From f1432e3e855a9b04a2a37ccb39f89c6055149c08 Mon Sep 17 00:00:00 2001
From: Jakob <Jakob.knitter@bettermarks.com>
Date: Mon, 19 Jun 2023 11:09:56 +0200
Subject: [PATCH] refactor: easier register  access

---
 .../esp32-c3-register-interface.c             |  9 +++-----
 .../esp32-c3-register-interface.h             | 23 ++++++++++++++-----
 2 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/src/reading-writing-registers/esp32-c3-register-interface.c b/src/reading-writing-registers/esp32-c3-register-interface.c
index d5372bf..9c9e22e 100644
--- a/src/reading-writing-registers/esp32-c3-register-interface.c
+++ b/src/reading-writing-registers/esp32-c3-register-interface.c
@@ -1,14 +1,11 @@
 #include "esp32-c3-register-interface.h"
-#include <stdint.h>
 
 void readSetClear(){
-  uint32_t core_value = *C3_UART_CLK_CONF_REG(0);
+  esp32c3_uart_clk_conf_t *clockConfig = UART_CLK_CONF_REG(0);
   
   // set UART_RST_CORE
-  core_value |= 1<<23;
-  *C3_UART_CLK_CONF_REG(0) = core_value;
+  clockConfig->REST_CORE = 1;
   
   // clear UART_RST_CORE
-  core_value &= (uint32_t)~(1<<23);
-  *C3_UART_CLK_CONF_REG(0) = core_value;
+  clockConfig->REST_CORE = 0;
 }
\ No newline at end of file
diff --git a/src/reading-writing-registers/esp32-c3-register-interface.h b/src/reading-writing-registers/esp32-c3-register-interface.h
index 6fb3181..be75bca 100644
--- a/src/reading-writing-registers/esp32-c3-register-interface.h
+++ b/src/reading-writing-registers/esp32-c3-register-interface.h
@@ -1,16 +1,27 @@
 #ifndef ESP32_C3_REGISTER_INTERFACE_H
 #define ESP32_C3_REGISTER_INTERFACE_H
 
+#include <stdint.h>
+
 #define C3_UART_CONTROLLER_0_BASE ((uint32_t)0x60000000)
 #define C3_UART_CONTROLLER_1_BASE ((uint32_t)0x60010000)
 #define C3_UART_CONTROLLER_SELECT(base_select) ((uint32_t)((base_select == 1) ? C3_UART_CONTROLLER_1_BASE : C3_UART_CONTROLLER_0_BASE))
 
-#define C3_UART_CLK_CONF_REG(base_select) ((volatile uint32_t *)(C3_UART_CONTROLLER_SELECT((base_select)) + 0x0078))
-// UART_RST_CORE is on 23
-// UART_SCLK_SEL is on 20 and 21 (2 bits), selcetion is between 1 and 3
-// UART_SCLK_DIV_NUM - The integral part of the frequency divisor - 12 to 19
-// UART_SCLK_DIV_A - The numerator of the frequency divisor - 6 to 11
-// UART_SCLK_DIV_B - The denominator of the frequency divisor - 0 to 5
+typedef volatile struct {
+    uint32_t SCLK_DIV_B:    6;
+    uint32_t SCLK_DIV_A:    6;  
+    uint32_t SCLK_DIV_NUM:  8;
+    uint32_t SCLK_SEL:      2;
+    uint32_t SCLK_EN:       1; 
+    uint32_t REST_CORE:     1;
+    uint32_t TX_SCLK_EN:    1;
+    uint32_t RX_SCLK_EN:    1;
+    uint32_t TX_REST_CORE:  1;
+    uint32_t RX_REST_CORE:  1;
+    uint32_t RESERVED:      4;
+} esp32c3_uart_clk_conf_t;
+
+#define UART_CLK_CONF_REG(base_select) ((esp32c3_uart_clk_conf_t *)(C3_UART_CONTROLLER_SELECT((base_select)) + 0x0078))  // Assuming the offset of clk_conf is 0x18 from the base address
 
 void readSetClear();
 
-- 
GitLab