This adds an embassy hal for the Texas Instruments MSPM0 microcontroller series. So far the GPIO and time drivers have been implemented. I have tested these drivers on the following parts: - C1104 - L1306 - L2228 - G3507 - G3519 The PAC is generated at https://github.com/mspm0-rs
49 lines
1.3 KiB
Rust
49 lines
1.3 KiB
Rust
#![macro_use]
|
|
|
|
/// Amount of bits of a timer.
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
|
pub enum TimerBits {
|
|
/// 16 bits.
|
|
Bits16,
|
|
/// 32 bits.
|
|
Bits32,
|
|
}
|
|
|
|
#[allow(private_bounds)]
|
|
pub trait Timer: SealedTimer + 'static {
|
|
/// Amount of bits this timer has.
|
|
const BITS: TimerBits;
|
|
}
|
|
|
|
pub(crate) trait SealedTimer {
|
|
/// Registers for this timer.
|
|
///
|
|
/// This is a raw pointer to the register block. The actual register block layout varies depending on the
|
|
/// timer type.
|
|
fn regs() -> *mut ();
|
|
|
|
/// Enable the interrupt corresponding to this timer.
|
|
unsafe fn enable_interrupt();
|
|
}
|
|
|
|
macro_rules! impl_timer {
|
|
($name: ident, $bits: ident) => {
|
|
impl crate::timer::SealedTimer for crate::peripherals::$name {
|
|
fn regs() -> *mut () {
|
|
crate::pac::$name.as_ptr()
|
|
}
|
|
|
|
unsafe fn enable_interrupt() {
|
|
use embassy_hal_internal::interrupt::InterruptExt;
|
|
crate::interrupt::$name.unpend();
|
|
crate::interrupt::$name.enable();
|
|
}
|
|
}
|
|
|
|
impl crate::timer::Timer for crate::peripherals::$name {
|
|
const BITS: crate::timer::TimerBits = crate::timer::TimerBits::$bits;
|
|
}
|
|
};
|
|
}
|