Răsfoiți Sursa

new file: ADRS2040U_i2c.h

yoneda 1 an în urmă
părinte
comite
85813a291a
3 a modificat fișierele cu 72 adăugiri și 0 ștergeri
  1. 34 0
      ADRS2040U_i2c.h
  2. 1 0
      CMakeLists.txt
  3. 37 0
      main.cpp

+ 34 - 0
ADRS2040U_i2c.h

@@ -0,0 +1,34 @@
+#ifndef _ADRS2040U_I2C_H
+#define _ADRS2040U_I2C_H   1
+
+#define DEBUG_PRINT(...)    if(_DEBUG){printf(__VA_ARGS__);}
+#define _DEBUG  1
+
+// ADRS2040UのSPI GPIO
+#define SPI_MOSI    4
+#define SPI_SCK     2
+#define SPI_MISO    3
+#define SPI_CS      5
+
+// ADRS2040U I2Cアドレス
+#define I2C0_SLAVE_ADDR 0x41
+
+// I2Cで使うGPIO
+#define GPIO_SDA0 0
+#define GPIO_SCK0 1
+
+
+// I2Cコマンド列挙
+enum ADRS2040_CMD {
+    ADRS2040_CMD_INVALID,
+    ADRS2040_CMD_ADC_START,
+    ADRS2040_CMD_ADC_STOP, 
+    ADRS2040_CMD_SELECT_INPUT,
+    ADRS2040_CMD_SET_RATE,
+    ADRS2040_CMD_GET_INPUT,
+    ADRS2040_CMD_GET_RATE,
+    ADRS2040_CMD_GET_COUNT,
+};
+
+
+#endif

+ 1 - 0
CMakeLists.txt

@@ -17,6 +17,7 @@ add_executable(${PROJECT_NAME}
 target_link_libraries(${PROJECT_NAME}
 	pico_stdlib
 	hardware_i2c
+	pico_i2c_slave
 	hardware_spi
 	hardware_adc
 	pico_multicore

+ 37 - 0
main.cpp

@@ -1,6 +1,7 @@
 #include <stdio.h>
 #include <pico/stdlib.h>
 #include "hardware/i2c.h"
+#include "pico/i2c_slave.h"
 #include "hardware/irq.h"
 #include "hardware/spi.h"
 #include "pico/binary_info.h"
@@ -9,6 +10,42 @@
 #include "hardware/adc.h"
 #include "hardware/clocks.h"
 
+#include "ADRS2040U_i2c.h"
+
+static void i2c_slave_handler(i2c_inst_t *i2c, i2c_slave_event_t event)
+{
+    switch(event) {
+        case I2C_SLAVE_RECEIVE:
+            break;
+        
+        case I2C_SLAVE_REQUEST:
+            break;
+
+        case I2C_SLAVE_FINISH:
+            break;
+        
+        default:
+            break;
+    }
+}
+
+
+
+void i2c_setup(void)
+{
+    i2c_init(i2c0, 100 * 1000);
+    gpio_set_function(GPIO_SDA0, GPIO_FUNC_I2C);
+    gpio_set_function(GPIO_SCK0, GPIO_FUNC_I2C);
+    // ADRS2040Uでは基板上でプルアップされているので
+    // プルアップを無効化する
+    gpio_disable_pulls(GPIO_SDA0);
+    gpio_disable_pulls(GPIO_SCK0);
+    // プルアップする場合は以下の通り
+//   gpio_pull_up(GPIO_SDA0);
+//   gpio_pull_up(GPIO_SCK0);
+
+    i2c_slave_init(i2c0, I2C0_SLAVE_ADDR, &i2c_slave_handler);
+}
 
 int main(void)
 {