1
// CSR_GPIO_OEN_USER   0x803
2
// CSR_GPIO_IN_USER    0x804
3
// CSR_GPIO_OUT_USER   0x805
4

            
5
#[inline(always)]
6
pub(super) fn set_output_enabled(mask: u32, en: bool) {
7
1
    riscv::read_csr!(0x803);
8
1
    riscv::write_csr!(0x803);
9

            
10
    unsafe {
11
        let bits = _read();
12
        if en {
13
1
            _write(bits | mask as usize)
14
        } else {
15
            _write(bits & !mask as usize)
16
        }
17
    }
18
}
19

            
20
#[inline(always)]
21
pub(super) fn read_in() -> u32 {
22
1
    riscv::read_csr!(0x804);
23
    unsafe { _read() as u32 }
24
}
25

            
26
#[inline(always)]
27
pub(super) fn read_out() -> u32 {
28
1
    riscv::read_csr!(0x805);
29
    unsafe { _read() as u32 }
30
}
31

            
32
#[inline(always)]
33
pub(super) fn write(mask: u32, value: u32) {
34
1
    riscv::set!(0x805);
35
1
    riscv::clear!(0x805);
36
    unsafe {
37
        _set((mask & value) as usize);
38
        _clear((mask & !value) as usize);
39
    }
40
}