forked from M-Labs/artiq
Firmware: EFC enables error led when going panic
This commit is contained in:
parent
a619c9f3c2
commit
b49fb841ce
|
@ -656,6 +656,24 @@ pub extern fn main() -> i32 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(soc_platform = "efc")]
|
||||||
|
fn enable_error_led() {
|
||||||
|
let mut io_expander = board_misoc::io_expander::IoExpander::new().unwrap();
|
||||||
|
|
||||||
|
// Keep LEDs enabled
|
||||||
|
io_expander.set_oe(0, 1 << 5 | 1 << 6 | 1 << 7).unwrap();
|
||||||
|
// Enable Error LED
|
||||||
|
io_expander.set(0, 7, true);
|
||||||
|
|
||||||
|
// Keep VADJ and P3V3_FMC enabled
|
||||||
|
io_expander.set_oe(1, 1 << 0 | 1 << 1).unwrap();
|
||||||
|
|
||||||
|
io_expander.set(1, 0, true);
|
||||||
|
io_expander.set(1, 1, true);
|
||||||
|
|
||||||
|
io_expander.service().unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern fn exception(_regs: *const u32) {
|
pub extern fn exception(_regs: *const u32) {
|
||||||
let pc = mepc::read();
|
let pc = mepc::read();
|
||||||
|
@ -695,8 +713,16 @@ pub fn panic_fmt(info: &core::panic::PanicInfo) -> ! {
|
||||||
|
|
||||||
if let Some(location) = info.location() {
|
if let Some(location) = info.location() {
|
||||||
print!("panic at {}:{}:{}", location.file(), location.line(), location.column());
|
print!("panic at {}:{}:{}", location.file(), location.line(), location.column());
|
||||||
|
#[cfg(soc_platform = "efc")]
|
||||||
|
{
|
||||||
|
if location.file() != "libboard_misoc/io_expander.rs" {
|
||||||
|
enable_error_led();
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
print!("panic at unknown location");
|
print!("panic at unknown location");
|
||||||
|
#[cfg(soc_platform = "efc")]
|
||||||
|
enable_error_led();
|
||||||
}
|
}
|
||||||
if let Some(message) = info.message() {
|
if let Some(message) = info.message() {
|
||||||
println!(": {}", message);
|
println!(": {}", message);
|
||||||
|
|
Loading…
Reference in New Issue