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); } }