]> rtime.felk.cvut.cz Git - fpga/rpi-motor-control-pxmc.git/blob - src/app/rpi-pmsm-test1/rpi_gpio.h
Raspberry Pi 3-phase motor control educational system based on PXMC.
[fpga/rpi-motor-control-pxmc.git] / src / app / rpi-pmsm-test1 / rpi_gpio.h
1 #ifndef _RPI_GPIO_H
2 #define _RPI_GPIO_H
3
4 typedef struct rpi_registers_mapping_t {
5     int mapping_initialized;
6     int mem_fd;
7     void *gpio_map;
8     void *pwm_map;
9     void *clk_map;
10     volatile unsigned *gpio_base;
11     volatile unsigned *pwm_base;
12     volatile unsigned *clk_base;
13 } rpi_registers_mapping_t;
14
15 extern rpi_registers_mapping_t rpi_registers_mapping;
16
17 #define GPIO_SET (*(rpi_registers_mapping.gpio_base+7))
18 #define GPIO_CLR (*(rpi_registers_mapping.gpio_base+10))
19 #define GPIO_INP (*(rpi_registers_mapping.gpio_base+13))
20
21 static inline int rpi_gpio_get_value(unsigned gpio)
22 {
23     return GPIO_INP & (1 << gpio)? 1: 0;
24 }
25
26 /* Set gpio pin output set to specifies level */
27 static inline void rpi_gpio_set_value(unsigned gpio, int value)
28 {
29     if (value)
30        GPIO_SET = 1 << gpio;
31     else
32        GPIO_CLR = 1 << gpio;
33 }
34
35 /* Configure gpio_base pin for input */
36 int rpi_gpio_direction_input(unsigned gpio);
37
38 /* Configure gpio_base pin for output */
39 int rpi_gpio_direction_output(unsigned gpio, int value);
40
41 /* Configure gpio_base pin for alternate function */
42 int rpi_gpio_alt_fnc(unsigned gpio, int alt_fnc);
43
44 int rpi_peripheral_registers_map(void);
45
46 #endif /*_RPI_BIDIRPWM_H*/