]> rtime.felk.cvut.cz Git - pes-rpp/rpp-lib.git/blob - rpp/src/drv/gio.c
7e02f5a505eb27e302bbe4682d84ef3818259e69
[pes-rpp/rpp-lib.git] / rpp / src / drv / gio.c
1 /*
2  * gio.c
3  *
4  *  Created on: 17.7.2015
5  *      Author: michal
6  */
7
8 #include "drv/gio.h"
9
10 static gioPORT_t *gio_reg[] = {
11 #ifdef TARGET_HAS_DMM
12         [GIO_PORT_DMM]  = dmmPORT,
13 #endif
14         [GIO_PORT_GIOA] = gioPORTA,
15         [GIO_PORT_GIOB] = gioPORTB,
16         [GIO_PORT_HET1] = hetPORT1,
17         [GIO_PORT_HET2] = hetPORT2,
18 };
19
20 void gio_set(uint32_t pin_dsc, boolean_t value)
21 {
22         if (value)
23                 gio_reg[gio_port(pin_dsc)]->DSET = (1 << (pin_dsc & GIO_PIN_NUM_MASK));
24         else
25                 gio_reg[gio_port(pin_dsc)]->DCLR = (1 << (pin_dsc & GIO_PIN_NUM_MASK));
26 }
27
28 boolean_t gio_get(uint32_t pin_dsc)
29 {
30         return ((gio_reg[gio_port(pin_dsc)]->DIN) >> (pin_dsc & GIO_PIN_NUM_MASK)) & 1;
31 }
32
33 void gio_setup(uint32_t pin_dsc)
34 {
35         gioPORT_t *gioPort = gio_reg[gio_port(pin_dsc)];
36         uint32_t pin_bit = 1 << (pin_dsc & GIO_PIN_NUM_MASK);
37
38         if (pin_dsc & GIO_PIN_CONF_OD_MASK)
39                 gioPort->PDR |= pin_bit;
40         else
41                 gioPort->PDR &= ~pin_bit;
42
43         if (pin_dsc & GIO_PIN_CONF_INIT_HIGH)
44                 gioPort->DSET |= pin_bit;
45         else
46                 gioPort->DCLR |= pin_bit;
47
48         if (pin_dsc & GIO_PIN_CONF_MODE_PTYPE_MASK)
49                 gioPort->PSL |= pin_bit;
50         else
51                 gioPort->PSL &= ~pin_bit;
52
53         if (pin_dsc & GIO_PIN_CONF_MODE_PEN_MASK)
54                 gioPort->PULDIS |= pin_bit;
55         else
56                 gioPort->PULDIS &= ~pin_bit;
57
58         if (pin_dsc & GIO_PIN_CONF_SET_DIR) {
59                 if ((pin_dsc & GIO_PIN_CONF_DIR_MASK) ==
60                                 (GIO_PIN_CONF_DIR_OUT & GIO_PIN_CONF_DIR_MASK))
61                         gioPort->DIR |= pin_bit;
62                 else
63                         gioPort->DIR &= ~pin_bit;
64         }
65 }