LED access function
This commit is contained in:
parent
492b1e3668
commit
d458a337df
41
src/main.rs
41
src/main.rs
|
@ -11,6 +11,20 @@ use cortex_m::ctxt::Local;
|
||||||
use cortex_m::exception::Handlers as ExceptionHandlers;
|
use cortex_m::exception::Handlers as ExceptionHandlers;
|
||||||
use tm4c129x::interrupt::Handlers as InterruptHandlers;
|
use tm4c129x::interrupt::Handlers as InterruptHandlers;
|
||||||
|
|
||||||
|
const LED1: u8 = 0x10;
|
||||||
|
const LED2: u8 = 0x40;
|
||||||
|
|
||||||
|
fn set_led(nr: u8, state: bool) {
|
||||||
|
cortex_m::interrupt::free(|cs| {
|
||||||
|
let gpio_k = tm4c129x::GPIO_PORTK.borrow(cs);
|
||||||
|
if state {
|
||||||
|
gpio_k.data.modify(|r, w| w.data().bits(r.data().bits() | nr))
|
||||||
|
} else {
|
||||||
|
gpio_k.data.modify(|r, w| w.data().bits(r.data().bits() & !nr))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
hprintln!("Hello, world!");
|
hprintln!("Hello, world!");
|
||||||
|
|
||||||
|
@ -19,17 +33,18 @@ fn main() {
|
||||||
let sysctl = tm4c129x::SYSCTL.borrow(cs);
|
let sysctl = tm4c129x::SYSCTL.borrow(cs);
|
||||||
let gpio_k = tm4c129x::GPIO_PORTK.borrow(cs);
|
let gpio_k = tm4c129x::GPIO_PORTK.borrow(cs);
|
||||||
|
|
||||||
|
// Bring up GPIO port K
|
||||||
|
sysctl.rcgcgpio.modify(|_, w| w.r9().bit(true));
|
||||||
|
while !sysctl.prgpio.read().r9().bit() {}
|
||||||
|
|
||||||
|
// Set up LEDs
|
||||||
|
gpio_k.dir.write(|w| w.dir().bits(LED1|LED2));
|
||||||
|
gpio_k.den.write(|w| w.den().bits(LED1|LED2));
|
||||||
|
|
||||||
// Set up system timer
|
// Set up system timer
|
||||||
systick.set_reload(systick.get_ticks_per_10ms());
|
systick.set_reload(systick.get_ticks_per_10ms());
|
||||||
systick.enable_counter();
|
systick.enable_counter();
|
||||||
systick.enable_interrupt();
|
systick.enable_interrupt();
|
||||||
|
|
||||||
// Set up LED
|
|
||||||
sysctl.rcgcgpio.modify(|_, w| w.r9().bit(true));
|
|
||||||
while !sysctl.prgpio.read().r9().bit() {}
|
|
||||||
|
|
||||||
gpio_k.dir.write(|w| w.dir().bits(0x10));
|
|
||||||
gpio_k.den.write(|w| w.den().bits(0x10));
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,14 +55,14 @@ extern fn sys_tick(ctxt: SysTick) {
|
||||||
let elapsed = ELAPSED.borrow(&ctxt);
|
let elapsed = ELAPSED.borrow(&ctxt);
|
||||||
|
|
||||||
elapsed.set(elapsed.get() + 1);
|
elapsed.set(elapsed.get() + 1);
|
||||||
|
|
||||||
cortex_m::interrupt::free(|cs| {
|
|
||||||
let gpio_k = tm4c129x::GPIO_PORTK.borrow(cs);
|
|
||||||
|
|
||||||
if elapsed.get() % 100 == 0 {
|
if elapsed.get() % 100 == 0 {
|
||||||
gpio_k.data.modify(|r, w| w.data().bits(r.data().bits() ^ 0x10));
|
set_led(LED1, true);
|
||||||
|
set_led(LED2, false);
|
||||||
|
}
|
||||||
|
if elapsed.get() % 100 == 50 {
|
||||||
|
set_led(LED1, false);
|
||||||
|
set_led(LED2, true);
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[used]
|
#[used]
|
||||||
|
|
Loading…
Reference in New Issue