alienwalker 10 месяцев назад
Родитель
Сommit
98d6c44a99
3 измененных файлов с 103 добавлено и 3 удалено
  1. 1 1
      luat/include/luat_gpio.h
  2. 5 2
      luat/include/luat_mcu.h
  3. 97 0
      luat/include/luat_pin.h

+ 1 - 1
luat/include/luat_gpio.h

@@ -56,7 +56,7 @@ typedef struct luat_gpio_cfg
     uint8_t output_level;/**<GPIO输出高低电平选择*/
     luat_gpio_irq_cb irq_cb;/**<GPIO中断回调函数*/
     void* irq_args;/**<GPIO中断回调时用户参数*/
-    uint8_t alt_fun;/**<有些SOC的GPIO会在不同引脚上被复用,通过alt_fun来确定具体用哪个*/
+    uint8_t alt_fun;/**<有些SOC的GPIO会在不同引脚上被复用,通过alt_fun来确定具体用哪个,已废弃*/
 } luat_gpio_cfg_t;
 
 

+ 5 - 2
luat/include/luat_mcu.h

@@ -2,7 +2,7 @@
 #define LUAT_MCU_H
 #include "luat_base.h"
 
-enum
+typedef enum
 {
 	LUAT_MCU_PERIPHERAL_UART,
 	LUAT_MCU_PERIPHERAL_I2C,
@@ -15,7 +15,8 @@ enum
 	LUAT_MCU_PERIPHERAL_LCD,
 	LUAT_MCU_PERIPHERAL_CAMERA,
 	LUAT_MCU_PERIPHERAL_ONEWIRE,
-};
+	LUAT_MCU_PERIPHERAL_KEYBORAD,
+}LUAT_MCU_PERIPHERAL_E;
 
 int luat_mcu_set_clk(size_t mhz);
 int luat_mcu_get_clk(void);
@@ -30,6 +31,7 @@ int luat_mcu_us_period(void);
 uint64_t luat_mcu_tick64_ms(void);
 void luat_mcu_set_clk_source(uint8_t source_main, uint8_t source_32k, uint32_t delay);
 
+#if 0
 /**
  * @brief 用户是否设置了外设的IOMUX
  * @param type 外设类型 LUAT_MCU_PERIPHERAL_XXX
@@ -47,6 +49,7 @@ uint8_t luat_mcu_iomux_is_default(uint8_t type, uint8_t sn);
  * @return 无
  */
 void luat_mcu_iomux_ctrl(uint8_t type, uint8_t sn, int pad_index, uint8_t alt, uint8_t is_input);
+#endif
 
 void luat_mcu_set_hardfault_mode(int mode);
 /**

+ 97 - 0
luat/include/luat_pin.h

@@ -1,9 +1,106 @@
 
 #ifndef LUAT_PIN_H
 #define LUAT_PIN_H
+#include "luat_mcu.h"
+
+typedef union
+{
+	struct
+	{
+		uint8_t ec_gpio_id:7;
+		uint8_t ec_gpio_is_altfun4:1;
+	};
+	uint8_t common_gpio_id;
+}iomux_uid_u;
+
+typedef struct
+{
+	iomux_uid_u uid;
+	uint8_t altfun_id;
+}pin_iomux_info;
+
+typedef struct
+{
+	pin_iomux_info rx;
+	pin_iomux_info tx;
+	pin_iomux_info rts;
+	pin_iomux_info cts;
+}uart_iomux_info;
+
+typedef struct
+{
+	pin_iomux_info scl;
+	pin_iomux_info sda;
+}i2c_iomux_info;
+
+typedef struct
+{
+	pin_iomux_info mosi;
+	pin_iomux_info miso;
+	pin_iomux_info clk;
+	pin_iomux_info cs;
+}spi_iomux_info;
+
+typedef	struct
+{
+	pin_iomux_info pwm_p;
+	pin_iomux_info pwm_n;
+}pwm_iomux_info;
+
+typedef	struct
+{
+	pin_iomux_info rx;
+	pin_iomux_info tx;
+	pin_iomux_info stb;
+}can_iomux_info;
+
+typedef	struct
+{
+	pin_iomux_info io;
+}gpio_iomux_info;
+
+typedef struct
+{
+	pin_iomux_info mosi;
+	pin_iomux_info miso;
+	pin_iomux_info bit_clk;
+	pin_iomux_info lr_clk;
+	pin_iomux_info m_clk;
+}i2s_iomux_info;
+
+typedef	struct
+{
+	pin_iomux_info data[4];
+	pin_iomux_info cmd;
+	pin_iomux_info clk;
+}sdio_iomux_info;
+
+typedef	struct
+{
+	pin_iomux_info onewire;
+}onewire_iomux_info;
+
+typedef struct
+{
+	union
+	{
+		uart_iomux_info uart;
+		i2c_iomux_info i2c;
+		spi_iomux_info spi;
+		pwm_iomux_info pwm;
+		can_iomux_info can;
+		gpio_iomux_info gpio;
+		i2s_iomux_info i2s;
+		sdio_iomux_info sdio;
+		onewire_iomux_info onewire;
+	};
+}peripheral_iomux_info;
 
 int luat_pin_to_gpio(const char* pin_name);
 
 int luat_pin_parse(const char* pin_name, size_t* zone, size_t* index);
 
+int luat_pin_get_iomux_info(LUAT_MCU_PERIPHERAL_E type, uint8_t id, peripheral_iomux_info *pin_iomux_info);
+int luat_pin_set_iomux_info(LUAT_MCU_PERIPHERAL_E type, uint8_t id, peripheral_iomux_info *pin_iomux_info);
+void luat_pin_iomux_config(pin_iomux_info pin, uint8_t use_altfunction_pull, uint8_t driver_strength);
 #endif