1use crate::*;
2
3const sio_hw: *mut sio_hw_t = SIO_BASE as *mut sio_hw_t;
5const padsbank0_hw: *mut padsbank0_hw_t = PADS_BANK0_BASE as *mut padsbank0_hw_t;
7
8#[inline]
10pub unsafe fn gpio_pull_up(gpio: uint) {
11 gpio_set_pulls(gpio, true, false);
12}
13
14#[inline]
15pub unsafe fn gpio_is_pulled_up(gpio: uint) -> bool {
16 (*padsbank0_hw).io[gpio as usize] & PADS_BANK0_GPIO0_PUE_BITS != 0
17}
18#[inline]
19pub unsafe fn gpio_pull_down(gpio: uint) {
20 gpio_set_pulls(gpio, false, true);
21}
22#[inline]
23pub unsafe fn gpio_is_pulled_down(gpio: uint) -> bool {
24 (*padsbank0_hw).io[gpio as usize] & PADS_BANK0_GPIO0_PDE_BITS != 0
25}
26#[inline]
27pub unsafe fn gpio_disable_pulls(gpio: uint) {
28 gpio_set_pulls(gpio, false, false);
29}
30#[inline]
31pub unsafe fn gpio_get(gpio: uint) -> bool {
32 ((1 << gpio) & (*sio_hw).gpio_in) != 0
33}
34
35#[inline]
36pub unsafe fn gpio_get_all() -> uint32_t {
37 (*sio_hw).gpio_in
38}
39
40#[inline]
41pub unsafe fn gpio_set_mask(mask: uint32_t) {
42 (*sio_hw).gpio_set = mask;
43}
44
45#[inline]
46pub unsafe fn gpio_clr_mask(mask: uint32_t) {
47 (*sio_hw).gpio_clr = mask;
48}
49
50#[inline]
51pub unsafe fn gpio_xor_mask(mask: uint32_t) {
52 (*sio_hw).gpio_togl = mask;
53}
54
55#[inline]
61pub unsafe fn gpio_put_all(value: uint32_t) {
62 (*sio_hw).gpio_out = value;
63}
64
65#[inline]
66pub unsafe fn gpio_put(gpio: uint, value: bool) {
67 let mask = 1 << gpio;
68 if value {
69 gpio_set_mask(mask);
70 } else {
71 gpio_clr_mask(mask);
72 }
73}
74#[inline]
75pub unsafe fn gpio_set_dir_out_masked(mask: uint32_t) {
76 (*sio_hw).gpio_oe_set = mask;
77}
78
79#[inline]
80pub unsafe fn gpio_set_dir_in_masked(mask: uint32_t) {
81 (*sio_hw).gpio_oe_clr = mask;
82}
83
84#[inline]
85pub unsafe fn gpio_set_dir_masked(mask: uint32_t, value: uint32_t) {
86 (*sio_hw).gpio_oe_togl = ((*sio_hw).gpio_oe ^ value) & mask;
87}
88
89#[inline]
96pub unsafe fn gpio_set_dir(gpio: uint, out: u32) {
97 let mask = 1 << gpio;
98 if out != 0 {
99 gpio_set_dir_out_masked(mask);
100 } else {
101 gpio_set_dir_in_masked(mask);
102 }
103}
104
105#[inline]
106pub unsafe fn gpio_is_dir_out(gpio: uint) -> bool {
107 (*sio_hw).gpio_oe & (1 << (gpio)) != 0
108}
109
110#[inline]
111pub unsafe fn gpio_get_dir(gpio: uint) -> uint {
112 gpio_is_dir_out(gpio) as uint
113}