From 76199f21616ad86cf68f3b063c1ce23c6fc5a52f Mon Sep 17 00:00:00 2001 From: Ian McIntyre Date: Sun, 30 Nov 2025 18:52:34 -0500 Subject: First commit --- chips/imxrt1040/src/lib.rs | 105 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 chips/imxrt1040/src/lib.rs (limited to 'chips/imxrt1040/src/lib.rs') diff --git a/chips/imxrt1040/src/lib.rs b/chips/imxrt1040/src/lib.rs new file mode 100644 index 0000000..56733b5 --- /dev/null +++ b/chips/imxrt1040/src/lib.rs @@ -0,0 +1,105 @@ +//! Drivers for iMXRT1040 MCUs. + +#![no_std] + +pub use ral_registers::{Instance, modify_reg, read_reg, write_reg}; + +mod rt; +pub use rt::*; + +pub mod iomuxc; + +pub mod iomuxc_gpr { + pub type RegisterBlock = imxrt_drivers_iomuxc_10xx::iomuxc_gpr::RegisterBlock<35>; + pub use imxrt_drivers_iomuxc_10xx::iomuxc_gpr::GPR; +} + +/// Clock control module. +pub mod ccm { + pub use imxrt_drivers_ccm_10xx::ahb::pll1::*; + + pub use imxrt_drivers_ccm_10xx::ccm::{ + CCM, LowPowerMode, ahb_clk, clock_gate, flexspi1_clk_axi_semc as flexspi1_clk, ipg_clk, + low_power_mode, lpi2c_clk, lpspi_clk, perclk_clk, set_low_power_mode, uart_clk, + }; + pub use imxrt_drivers_ccm_10xx::ccm_analog::{CCM_ANALOG, pll2, pll3}; + + pub use imxrt_drivers_ccm_10xx::ccm::{ + arm_divider, periph_clk2, pre_periph_clk_pll1 as pre_periph_clk, + }; + + pub use imxrt_drivers_ccm_10xx::ccm_analog::{pll1, pll6}; + + pub mod gates { + use super::clock_gate::Locator::{self, *}; + + pub const LPSPI1: Locator = Ccgr1Cg00; + pub const DMA: Locator = Ccgr5Cg03; + pub const PIT: Locator = Ccgr1Cg06; + pub const FLEXSPI1: Locator = Ccgr6Cg05; + } + pub use imxrt_drivers_ccm_10xx::ral; +} + +pub mod dma { + pub use imxrt_drivers_edma::dma::edma as controller; + pub use imxrt_drivers_edma::dmamux as mux; + pub use imxrt_drivers_edma::edma as channel; + pub use imxrt_drivers_edma::element; + + pub mod events { + use core::num::NonZero; + + pub const LPSPI_RX: NonZero = NonZero::new(13).unwrap(); + pub const LPSPI_TX: NonZero = NonZero::new(14).unwrap(); + } +} + +pub use imxrt_drivers_dcdc as dcdc; +pub use imxrt_drivers_enet as enet; +pub use imxrt_drivers_flexspi as flexspi; +pub use imxrt_drivers_gpio as gpio; +pub use imxrt_drivers_lpspi as lpspi; +pub use imxrt_drivers_pit as pit; +pub use imxrt_drivers_rtwdog as rtwdog; + +/// Peripheral instances. +pub mod instances { + ral_registers::instances! { + // Safety: The reference manual confirms there are register + // blocks at this address matching this shape. + unsafe { + /// Access CCM registers. + pub ccm = 0x400F_C000; + /// Access CCM\_ANALOG registers. + pub ccm_analog = 0x400D_8000; + + pub dcdc = 0x4008_0000; + + pub gpio1 = 0x401b_8000; + pub gpio2 = 0x401b_c000; + pub gpio3 = 0x401C_0000; + pub gpio4 = 0x401C_4000; + pub gpio5 = 0x400C_0000; + + pub iomuxc = 0x401F_8000; + pub iomuxc_gpr = 0x400A_C000; + + pub enet = 0x402D_8000; + + pub flexspi1 = 0x402A_8000; + pub flexspi2 = 0x402A_4000; + + pub pit = 0x4008_4000; + + pub lpspi1 = 0x4039_4000; + pub lpspi2 = 0x4039_8000; + pub lpspi3 = 0x403A_0000; + + pub dma = 0x400E_8000; + pub dmamux = 0x400E_C000; + + pub wdog3 = 0x400B_C000; + } + } +} -- cgit v1.2.3