luat_pin.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #ifndef LUAT_PIN_H
  2. #define LUAT_PIN_H
  3. #include "luat_mcu.h"
  4. typedef enum
  5. {
  6. LUAT_PIN_UART_RX,
  7. LUAT_PIN_UART_TX,
  8. LUAT_PIN_UART_RTS,
  9. LUAT_PIN_UART_CTS,
  10. LUAT_PIN_UART_QTY,
  11. LUAT_PIN_I2C_SCL = 0,
  12. LUAT_PIN_I2C_SDA,
  13. LUAT_PIN_I2C_QTY,
  14. LUAT_PIN_SPI_MOSI = 0,
  15. LUAT_PIN_SPI_MISO,
  16. LUAT_PIN_SPI_CLK,
  17. LUAT_PIN_SPI_CS,
  18. LUAT_PIN_SPI_QTY,
  19. LUAT_PIN_PWM_P = 0,
  20. LUAT_PIN_PWM_N,
  21. LUAT_PIN_PWM_QTY,
  22. LUAT_PIN_CAN_RX = 0,
  23. LUAT_PIN_CAN_TX,
  24. LUAT_PIN_CAN_STB,
  25. LUAT_PIN_CAN_QTY,
  26. LUAT_PIN_I2S_MOSI = 0,
  27. LUAT_PIN_I2S_MISO,
  28. LUAT_PIN_I2S_BCLK,
  29. LUAT_PIN_I2S_LRCLK,
  30. LUAT_PIN_I2S_MCLK,
  31. LUAT_PIN_I2S_QTY,
  32. LUAT_PIN_SDIO_DATA0 = 0,
  33. LUAT_PIN_SDIO_DATA1,
  34. LUAT_PIN_SDIO_DATA2,
  35. LUAT_PIN_SDIO_DATA3,
  36. LUAT_PIN_SDIO_CMD,
  37. LUAT_PIN_SDIO_CLK,
  38. LUAT_PIN_SDIO_QTY,
  39. LUAT_PIN_ONLY_ONE_QTY = 1,
  40. }LUAT_PIN_FUNC_E;
  41. typedef union
  42. {
  43. struct
  44. {
  45. uint8_t ec_gpio_id:7; //移芯平台的GPIO号
  46. uint8_t ec_gpio_is_altfun4:1; //移芯对应GPIO功能是不是复用功能4
  47. };
  48. uint8_t common_gpio_id; //以GPIO号为唯一ID的芯片的GPIO id
  49. }iomux_uid_u;
  50. typedef struct
  51. {
  52. iomux_uid_u uid; //用于硬件操作所需的唯一ID
  53. uint8_t altfun_id; //复用功能id
  54. }pin_iomux_info; //pin复用信息
  55. typedef struct
  56. {
  57. uint16_t
  58. };
  59. typedef struct
  60. {
  61. uint16_t index;
  62. iomux_uid_u uid;
  63. };
  64. typedef struct
  65. {
  66. pin_iomux_info pin_list[LUAT_PIN_UART_QTY];
  67. }luat_uart_pin_iomux_t;
  68. typedef struct
  69. {
  70. pin_iomux_info pin_list[LUAT_PIN_I2C_QTY];
  71. }luat_i2c_pin_iomux_t;
  72. typedef struct
  73. {
  74. pin_iomux_info pin_list[LUAT_PIN_SPI_QTY];
  75. }luat_spi_pin_iomux_t;
  76. typedef struct
  77. {
  78. pin_iomux_info pin_list[LUAT_PIN_PWM_QTY];
  79. }luat_pwm_pin_iomux_t;
  80. typedef struct
  81. {
  82. pin_iomux_info pin_list[LUAT_PIN_CAN_QTY];
  83. }luat_can_pin_iomux_t;
  84. typedef struct
  85. {
  86. pin_iomux_info pin_list[LUAT_PIN_I2S_QTY];
  87. }luat_i2s_pin_iomux_t;
  88. typedef struct
  89. {
  90. pin_iomux_info pin_list[LUAT_PIN_SDIO_QTY];
  91. }luat_sdio_pin_iomux_t;
  92. int luat_pin_to_gpio(const char* pin_name);
  93. int luat_pin_parse(const char* pin_name, size_t* zone, size_t* index);
  94. /**
  95. * @brief 获取某种外设的全部pin复用信息
  96. * @param type 外设类型,见LUAT_MCU_PERIPHERAL_E
  97. * @param id 外设id,例如uart2就填2
  98. * @param pin_list 输出pin复用信息表
  99. * @return 0成功,其他失败
  100. */
  101. int luat_pin_get_iomux_info(LUAT_MCU_PERIPHERAL_E type, uint8_t id, pin_iomux_info *pin_list);
  102. /**
  103. * @brief 设置某个外设的全部pin复用信息,如果该外设只有一种复用可能性,则不必设置,会直接失败
  104. * @param type 外设类型,见LUAT_MCU_PERIPHERAL_E
  105. * @param id 外设id,例如uart2就填2
  106. * @param pin_list 输入pin复用信息表
  107. * @return 0成功,其他失败
  108. */
  109. int luat_pin_set_iomux_info(LUAT_MCU_PERIPHERAL_E type, uint8_t id, pin_iomux_info *pin_list);
  110. /**
  111. * @brief 从模块pin脚号返回芯片pin的唯一id
  112. * @param num 模块pin脚号
  113. * @return pin的唯一id,如果唯一id是0xff代表没有
  114. */
  115. iomux_uid_u luat_pin_get_from_num(uint32_t num);
  116. void luat_pin_iomux_config(pin_iomux_info pin, uint8_t use_altfunction_pull, uint8_t driver_strength);
  117. void luat_pin_iomux_print(pin_iomux_info *pin_list, uint8_t num);
  118. #endif