#pragma once #include "ch573/gpio.h" #define GPIO_PORT_A ch573_gpio__gpio_port_a #define GPIO_PORT_B ch573_gpio__gpio_port_b #define GPIO_PORT CH573_GPIO__GPIO_PORT_T_INTF #define GPIO_I CH573_GPIO__GPIO_T_INTF #define GPIO ch573_gpio__gpio #define IS_PORT_B 0x80 typedef enum { PIN_PA4 = 4, PIN_PA5 = 5, PIN_PA8 = 8, PIN_PA9 = 9, PIN_PA10 = 10, PIN_PA11 = 11, PIN_PA12 = 12, PIN_PA13 = 13, PIN_PA14 = 14, PIN_PA15 = 15, PIN_PB0 = IS_PORT_B | 0, PIN_PB4 = IS_PORT_B | 4, PIN_PB6 = IS_PORT_B | 6, PIN_PB7 = IS_PORT_B | 7, PIN_PB10 = IS_PORT_B | 10, PIN_PB11 = IS_PORT_B | 11, PIN_PB12 = IS_PORT_B | 12, PIN_PB13 = IS_PORT_B | 13, PIN_PB14 = IS_PORT_B | 14, PIN_PB15 = IS_PORT_B | 15, PIN_PB22 = IS_PORT_B | 8, PIN_PB23 = IS_PORT_B | 9, } gpio_pin_t; typedef enum { PIN_CFG_INPUT_FLOATING, PIN_CFG_INPUT_PULL_UP, PIN_CFG_INPUT_PULL_DOWN, PIN_CFG_OUTPUT_5mA, PIN_CFG_OUTPUT_20mA, } gpio_config_t; typedef enum { AF_SPI = 8, AF_UART1 = 5, AF_UART0 = 4, AF_TMR2 = 2, AF_TMR1 = 1, AF_TMR0 = 0, } alternate_function_t; typedef enum { INT_MODE_FALLING_EDGE, INT_MODE_RISING_EDGE, INT_MODE_LEVEL_HIGH, INT_MODE_LEVEL_LOW } interrupt_mode_t; typedef void (*gpio_callback_t)(gpio_pin_t pin); #define On_Gpio(arg) \ static void __local_on_gpio__(gpio_pin_t pin); \ __attribute__((__section__( \ ".gpio_callbacks"))) static volatile gpio_callback_t __gpio__position = \ __local_on_gpio__; \ static void __local_on_gpio__(arg) /** Configure the given gpio pin for .*/ void configure_gpio(gpio_pin_t pin, gpio_config_t); /** Read the input value of the gpio. */ int read_gpio(gpio_pin_t pin); /** Sets the gpio pin. */ void set_gpio(gpio_pin_t pin, int high); /** Set or unset the peripheral to the alternate set of pins. */ void enable_alternate_funciton(alternate_function_t af, int enable); /** Enables the interrupt for a with the provided interrupt mode. */ void enable_gpio_interrupt(gpio_pin_t pin, interrupt_mode_t int_mode);