summaryrefslogtreecommitdiffstatshomepage
path: root/stmhal/pin.h
diff options
context:
space:
mode:
Diffstat (limited to 'stmhal/pin.h')
-rw-r--r--stmhal/pin.h117
1 files changed, 117 insertions, 0 deletions
diff --git a/stmhal/pin.h b/stmhal/pin.h
new file mode 100644
index 0000000000..d5d769058a
--- /dev/null
+++ b/stmhal/pin.h
@@ -0,0 +1,117 @@
+enum {
+ PORT_A,
+ PORT_B,
+ PORT_C,
+ PORT_D,
+ PORT_E,
+ PORT_F,
+ PORT_G,
+ PORT_H,
+ PORT_I,
+ PORT_J,
+};
+
+enum {
+ AF_FN_TIM,
+ AF_FN_I2C,
+ AF_FN_USART,
+ AF_FN_UART = AF_FN_USART,
+ AF_FN_SPI
+};
+
+enum {
+ AF_PIN_TYPE_TIM_CH1 = 0,
+ AF_PIN_TYPE_TIM_CH2,
+ AF_PIN_TYPE_TIM_CH3,
+ AF_PIN_TYPE_TIM_CH4,
+ AF_PIN_TYPE_TIM_CH1N,
+ AF_PIN_TYPE_TIM_CH2N,
+ AF_PIN_TYPE_TIM_CH3N,
+ AF_PIN_TYPE_TIM_CH1_ETR,
+ AF_PIN_TYPE_TIM_ETR,
+ AF_PIN_TYPE_TIM_BKIN,
+
+ AF_PIN_TYPE_I2C_SDA = 0,
+ AF_PIN_TYPE_I2C_SCL,
+
+ AF_PIN_TYPE_USART_TX = 0,
+ AF_PIN_TYPE_USART_RX,
+ AF_PIN_TYPE_USART_CTS,
+ AF_PIN_TYPE_USART_RTS,
+ AF_PIN_TYPE_USART_CK,
+ AF_PIN_TYPE_UART_TX = AF_PIN_TYPE_USART_TX,
+ AF_PIN_TYPE_UART_RX = AF_PIN_TYPE_USART_RX,
+ AF_PIN_TYPE_UART_CTS = AF_PIN_TYPE_USART_CTS,
+ AF_PIN_TYPE_UART_RTS = AF_PIN_TYPE_USART_RTS,
+
+ AF_PIN_TYPE_SPI_MOSI = 0,
+ AF_PIN_TYPE_SPI_MISO,
+ AF_PIN_TYPE_SPI_SCK,
+ AF_PIN_TYPE_SPI_NSS,
+};
+
+typedef struct {
+ mp_obj_base_t base;
+ uint8_t idx;
+ uint8_t fn;
+ uint8_t unit;
+ uint8_t type;
+
+ union {
+ void *reg;
+ TIM_TypeDef *TIM;
+ I2C_TypeDef *I2C;
+ USART_TypeDef *USART;
+ USART_TypeDef *UART;
+ SPI_TypeDef *SPI;
+ };
+} pin_af_obj_t;
+
+typedef struct {
+ mp_obj_base_t base;
+ const char *name;
+ uint16_t port : 4;
+ uint16_t pin : 4;
+ uint16_t num_af : 4;
+ uint16_t pin_mask;
+ GPIO_TypeDef *gpio;
+ const pin_af_obj_t *af;
+} pin_obj_t;
+
+extern const mp_obj_type_t pin_obj_type;
+extern const mp_obj_type_t pin_af_obj_type;
+
+typedef struct {
+ const char *name;
+ const pin_obj_t *pin;
+} pin_named_pin_t;
+
+extern const pin_named_pin_t pin_board_pins[];
+extern const pin_named_pin_t pin_cpu_pins[];
+
+typedef struct {
+ mp_obj_base_t base;
+ mp_obj_t mapper;
+ mp_obj_t map_dict;
+ bool debug;
+} pin_map_obj_t;
+
+extern pin_map_obj_t pin_map_obj;
+
+typedef struct {
+ mp_obj_base_t base;
+ const char *name;
+ const pin_named_pin_t *named_pins;
+} pin_named_pins_obj_t;
+
+extern const pin_named_pins_obj_t pin_board_pins_obj;
+extern const pin_named_pins_obj_t pin_cpu_pins_obj;
+
+const pin_obj_t *pin_find_named_pin(const pin_named_pin_t *pins, const char *name);
+const pin_af_obj_t *pin_find_af(const pin_obj_t *pin, uint8_t fn, uint8_t unit, uint8_t pin_type);
+
+void pin_map_init(void);
+
+// C function for mapping python pin identifier into an ordinal pin number.
+const pin_obj_t *pin_map_user_obj(mp_obj_t user_obj);
+