Skip to content

Commit

Permalink
fix!: addresses pygamer BSP issues discussed in PR #777
Browse files Browse the repository at this point in the history
* Changes the `DisplayError` to an enum with variants to provide more detail about why the display driver initialization failed.
* Exposes the `dma` and `max-channels` HAL features in the BSP for convenience.
* Adds a `cortex_m::asm::wfi()` call inside the terminal infinite loop in the examples to address the `empty_loop` clippy lint.
  • Loading branch information
kyp44 committed Nov 11, 2024
1 parent 7195ddf commit 8bd22af
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 9 deletions.
2 changes: 2 additions & 0 deletions boards/pygamer/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ usbd-serial = "0.2"
[features]
# ask the HAL to enable atsamd51j support
default = ["rt", "atsamd-hal/samd51j"]
dma = ["atsamd-hal/dma"]
max-channels = ["dma", "atsamd-hal/max-channels"]
panic_led = []
rt = ["cortex-m-rt", "atsamd-hal/samd51j-rt"]
usb = ["atsamd-hal/usb", "usb-device"]
Expand Down
4 changes: 3 additions & 1 deletion boards/pygamer/examples/clock_out.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,7 @@ fn main() -> ! {
.configure_gclk_divider_and_source(Gclk2, 40, Dpll0, false)
.unwrap();
let _clock_out_pin: GclkOut = pins.d5.into();
loop {}
loop {
cortex_m::asm::wfi();
}
}
4 changes: 3 additions & 1 deletion boards/pygamer/examples/ferris_img.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,5 +59,7 @@ fn main() -> ! {
let ferris = Image::new(&raw_image, Point::new(32, 32));

ferris.draw(&mut display).unwrap();
loop {}
loop {
cortex_m::asm::wfi();
}
}
4 changes: 3 additions & 1 deletion boards/pygamer/examples/qspi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,9 @@ fn main() -> ! {
flash.read_memory(0, &mut read_buf);
assert_eq!(read_buf, write_buf);

loop {}
loop {
cortex_m::asm::wfi();
}
}

/// Wait for the write-in-progress and suspended write/erase.
Expand Down
23 changes: 17 additions & 6 deletions boards/pygamer/src/pins.rs
Original file line number Diff line number Diff line change
Expand Up @@ -582,13 +582,22 @@ pub struct Display {
pub tft_backlight: TftBacklightReset,
}

/// This empty error occurs if there is an issue setting up the on-board
/// display.
/// Error that can occur when initializing the display.
#[derive(Debug)]
pub struct DisplayError;
pub enum DisplayError {
/// Could not configure the SERCOM4 clock.
SercomClock,
/// Could not configure the SPI port to drive the display.
Spi,
/// Could not setup the ST7735 display driver.
Driver,
/// Could not configure the TC2/TC3 clock for PWM control of the backlight.
Tc2Tc3Clock,
}
impl From<()> for DisplayError {
#[inline]
fn from(_value: ()) -> Self {
DisplayError
Self::Driver
}
}

Expand All @@ -615,7 +624,9 @@ impl Display {
delay: &mut hal::delay::Delay,
) -> Result<(DisplayDriver, Pwm2<PA01>), DisplayError> {
let gclk0 = clocks.gclk0();
let clock = &clocks.sercom4_core(&gclk0).ok_or(DisplayError)?;
let clock = &clocks
.sercom4_core(&gclk0)
.ok_or(DisplayError::SercomClock)?;
let pads = spi::Pads::default()
.sclk(self.tft_sclk)
.data_out(self.tft_mosi);
Expand All @@ -629,7 +640,7 @@ impl Display {
.into_panic_on_read(),
tft_cs,
)
.map_err(|_| DisplayError)?;
.map_err(|_| DisplayError::Spi)?;
let mut display = st7735_lcd::ST7735::new(
tft_spi,
self.tft_dc.into(),
Expand Down

0 comments on commit 8bd22af

Please sign in to comment.