1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
#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);
|