Skip to content

Commit

Permalink
attiny-hal: add watchdog support
Browse files Browse the repository at this point in the history
This has been tested on the ATtiny85, but compiles for all other parts as well
and should work.
  • Loading branch information
lopsided98 authored and Rahix committed Jul 20, 2023
1 parent 3c02df9 commit e490872
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 0 deletions.
5 changes: 5 additions & 0 deletions mcu/attiny-hal/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,11 @@ pub use port::Pins;
#[cfg(feature = "device-selected")]
pub mod simple_pwm;

#[cfg(feature = "device-selected")]
pub mod wdt;
#[cfg(feature = "device-selected")]
pub use wdt::Wdt;

#[cfg(feature = "device-selected")]
pub mod eeprom;
#[cfg(feature = "device-selected")]
Expand Down
44 changes: 44 additions & 0 deletions mcu/attiny-hal/src/wdt.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#[allow(unused_imports)]
pub use avr_hal_generic::wdt::{Timeout, WdtOps};

pub type Wdt = avr_hal_generic::wdt::Wdt<crate::Attiny, crate::pac::WDT>;

#[cfg(any(feature = "attiny85", feature = "attiny167", feature = "attiny2313"))]
avr_hal_generic::impl_wdt! {
hal: crate::Attiny,
peripheral: crate::pac::WDT,
mcusr: crate::pac::cpu::MCUSR,
wdtcsr_name: wdtcr,
timeout: |to, w| match to {
Timeout::Ms16 => w.wdpl().cycles_2k_512k(),
Timeout::Ms32 => w.wdpl().cycles_4k_1024k(),
Timeout::Ms64 => w.wdpl().cycles_8k(),
Timeout::Ms125 => w.wdpl().cycles_16k(),
Timeout::Ms250 => w.wdpl().cycles_32k(),
Timeout::Ms500 => w.wdpl().cycles_64k(),
Timeout::Ms1000 => w.wdpl().cycles_128k(),
Timeout::Ms2000 => w.wdpl().cycles_256k(),
Timeout::Ms4000 => w.wdph().set_bit().wdpl().cycles_2k_512k(),
Timeout::Ms8000 => w.wdph().set_bit().wdpl().cycles_4k_1024k(),
},
}

#[cfg(any(feature = "attiny84", feature = "attiny88"))]
avr_hal_generic::impl_wdt! {
hal: crate::Attiny,
peripheral: crate::pac::WDT,
mcusr: crate::pac::cpu::MCUSR,
wdtcsr_name: wdtcsr,
timeout: |to, w| match to {
Timeout::Ms16 => w.wdpl().cycles_2k_512k(),
Timeout::Ms32 => w.wdpl().cycles_4k_1024k(),
Timeout::Ms64 => w.wdpl().cycles_8k(),
Timeout::Ms125 => w.wdpl().cycles_16k(),
Timeout::Ms250 => w.wdpl().cycles_32k(),
Timeout::Ms500 => w.wdpl().cycles_64k(),
Timeout::Ms1000 => w.wdpl().cycles_128k(),
Timeout::Ms2000 => w.wdpl().cycles_256k(),
Timeout::Ms4000 => w.wdph().set_bit().wdpl().cycles_2k_512k(),
Timeout::Ms8000 => w.wdph().set_bit().wdpl().cycles_4k_1024k(),
},
}

0 comments on commit e490872

Please sign in to comment.