28 lines
927 B
Rust
28 lines
927 B
Rust
use core::ptr::{read_volatile, write_volatile};
|
|
|
|
const GPIO_SWITCH: *mut u32 = (0x02000010) as *mut u32;
|
|
|
|
pub fn gpio_led_on(index: u32) {
|
|
unsafe {
|
|
let bitmask = 1 << index as u32;
|
|
let bitmasked = read_volatile(GPIO_SWITCH) & (0xFFFF - bitmask) as u32;
|
|
write_volatile(GPIO_SWITCH, ((1 << index) | bitmasked) as u32);
|
|
}
|
|
}
|
|
pub fn gpio_led_off(index: u32) {
|
|
unsafe {
|
|
let bitmask = 1 << index as u32;
|
|
let bitmasked = read_volatile(GPIO_SWITCH) & (0xFFFF - bitmask) as u32;
|
|
write_volatile(GPIO_SWITCH, ((0 << index) | bitmasked) as u32);
|
|
}
|
|
}
|
|
pub fn gpio_led_toggle(index: u32) {
|
|
unsafe {
|
|
let raw = read_volatile(GPIO_SWITCH) as u32;
|
|
let bitmask = 1 << index as u32;
|
|
let bitmasked = raw & (!bitmask) as u32;
|
|
let current = raw & bitmask as u32;
|
|
write_volatile(GPIO_SWITCH, (!current & bitmask | bitmasked) as u32);
|
|
}
|
|
}
|