alienwalker 11 месяцев назад
Родитель
Сommit
befd68ee9f
1 измененных файлов с 93 добавлено и 62 удалено
  1. 93 62
      luat/include/luat_pin.h

+ 93 - 62
luat/include/luat_pin.h

@@ -3,104 +3,135 @@
 #define LUAT_PIN_H
 #include "luat_mcu.h"
 
+
+typedef enum
+{
+	LUAT_PIN_UART_RX,
+	LUAT_PIN_UART_TX,
+	LUAT_PIN_UART_RTS,
+	LUAT_PIN_UART_CTS,
+	LUAT_PIN_UART_QTY,
+	LUAT_PIN_I2C_SCL = 0,
+	LUAT_PIN_I2C_SDA,
+	LUAT_PIN_I2C_QTY,
+	LUAT_PIN_SPI_MOSI = 0,
+	LUAT_PIN_SPI_MISO,
+	LUAT_PIN_SPI_CLK,
+	LUAT_PIN_SPI_CS,
+	LUAT_PIN_SPI_QTY,
+	LUAT_PIN_PWM_P = 0,
+	LUAT_PIN_PWM_N,
+	LUAT_PIN_PWM_QTY,
+	LUAT_PIN_CAN_RX = 0,
+	LUAT_PIN_CAN_TX,
+	LUAT_PIN_CAN_STB,
+	LUAT_PIN_CAN_QTY,
+	LUAT_PIN_I2S_MOSI = 0,
+	LUAT_PIN_I2S_MISO,
+	LUAT_PIN_I2S_BCLK,
+	LUAT_PIN_I2S_LRCLK,
+	LUAT_PIN_I2S_MCLK,
+	LUAT_PIN_I2S_QTY,
+	LUAT_PIN_SDIO_DATA0 = 0,
+	LUAT_PIN_SDIO_DATA1,
+	LUAT_PIN_SDIO_DATA2,
+	LUAT_PIN_SDIO_DATA3,
+	LUAT_PIN_SDIO_CMD,
+	LUAT_PIN_SDIO_CLK,
+	LUAT_PIN_SDIO_QTY,
+
+	LUAT_PIN_ONLY_ONE_QTY = 1,
+}LUAT_PIN_FUNC_E;
+
 typedef union
 {
 	struct
 	{
-		uint8_t ec_gpio_id:7;
-		uint8_t ec_gpio_is_altfun4:1;
+		uint8_t ec_gpio_id:7;			//移芯平台的GPIO号
+		uint8_t ec_gpio_is_altfun4:1;	//移芯对应GPIO功能是不是复用功能4
 	};
-	uint8_t common_gpio_id;
+	uint8_t common_gpio_id;				//以GPIO号为唯一ID的芯片的GPIO id
 }iomux_uid_u;
 
 typedef struct
 {
-	iomux_uid_u uid;
-	uint8_t altfun_id;
-}pin_iomux_info;
+	iomux_uid_u uid;	//用于硬件操作所需的唯一ID
+	uint8_t altfun_id;	//复用功能id
+}pin_iomux_info;	//pin复用信息
 
 typedef struct
 {
-	pin_iomux_info rx;
-	pin_iomux_info tx;
-	pin_iomux_info rts;
-	pin_iomux_info cts;
-}uart_iomux_info;
+	pin_iomux_info pin_list[LUAT_PIN_UART_QTY];
+}uart_pin_iomux_t;
 
 typedef struct
 {
-	pin_iomux_info scl;
-	pin_iomux_info sda;
-}i2c_iomux_info;
+	pin_iomux_info pin_list[LUAT_PIN_I2C_QTY];
+}i2c_pin_iomux_t;
 
 typedef struct
 {
-	pin_iomux_info mosi;
-	pin_iomux_info miso;
-	pin_iomux_info clk;
-	pin_iomux_info cs;
-}spi_iomux_info;
+	pin_iomux_info pin_list[LUAT_PIN_SPI_QTY];
+}spi_pin_iomux_t;
 
-typedef	struct
+typedef struct
 {
-	pin_iomux_info pwm_p;
-	pin_iomux_info pwm_n;
-}pwm_iomux_info;
+	pin_iomux_info pin_list[LUAT_PIN_PWM_QTY];
+}pwm_pin_iomux_t;
 
-typedef	struct
+typedef struct
 {
-	pin_iomux_info rx;
-	pin_iomux_info tx;
-	pin_iomux_info stb;
-}can_iomux_info;
+	pin_iomux_info pin_list[LUAT_PIN_CAN_QTY];
+}can_pin_iomux_t;
 
-typedef	struct
+typedef struct
 {
-	pin_iomux_info io;
-}gpio_iomux_info;
+	pin_iomux_info pin_list[LUAT_PIN_I2S_QTY];
+}i2s_pin_iomux_t;
 
 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;
+	pin_iomux_info pin_list[LUAT_PIN_SDIO_QTY];
+}sdio_pin_iomux_t;
 
-typedef	struct
+typedef struct
 {
-	pin_iomux_info io;
-}onewire_iomux_info;
+	pin_iomux_info pin_list[LUAT_PIN_ONLY_ONE_QTY];
+}gpio_pin_iomux_t;
 
 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;
+	pin_iomux_info pin_list[LUAT_PIN_ONLY_ONE_QTY];
+}onewire_pin_iomux_t;
 
 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);
+/**
+ * @brief 获取某种外设的全部pin复用信息
+ * @param type 外设类型,见LUAT_MCU_PERIPHERAL_E
+ * @param id 外设id,例如uart2就填2
+ * @param pin_list 输出pin复用信息表
+ * @return 0成功,其他失败
+ */
+int luat_pin_get_iomux_info(LUAT_MCU_PERIPHERAL_E type, uint8_t id, pin_iomux_info *pin_list);
+/**
+ * @brief 设置某个外设的全部pin复用信息,如果该外设只有一种复用可能性,则不必设置,会直接失败
+ * @param type 外设类型,见LUAT_MCU_PERIPHERAL_E
+ * @param id 外设id,例如uart2就填2
+ * @param pin_list 输入pin复用信息表
+ * @return 0成功,其他失败
+ */
+int luat_pin_set_iomux_info(LUAT_MCU_PERIPHERAL_E type, uint8_t id, pin_iomux_info *pin_list);
+/**
+ * @brief 从模块pin脚号返回芯片pin的唯一id
+ * @param num 模块pin脚号
+ * @return pin的唯一id,如果唯一id是0xff代表没有
+ */
+iomux_uid_u luat_pin_get_from_num(uint32_t num);
+
 void luat_pin_iomux_config(pin_iomux_info pin, uint8_t use_altfunction_pull, uint8_t driver_strength);
+
+void luat_pin_iomux_print(pin_iomux_info *pin_list, uint8_t num);
 #endif