aboutsummaryrefslogtreecommitdiff
path: root/chips/imxrt1040/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'chips/imxrt1040/src/lib.rs')
-rw-r--r--chips/imxrt1040/src/lib.rs105
1 files changed, 105 insertions, 0 deletions
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<u8> = NonZero::new(13).unwrap();
+ pub const LPSPI_TX: NonZero<u8> = 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<imxrt_drivers_ccm_10xx::ral::ccm::RegisterBlock> = 0x400F_C000;
+ /// Access CCM\_ANALOG registers.
+ pub ccm_analog<imxrt_drivers_ccm_10xx::ral::ccm_analog::RegisterBlock> = 0x400D_8000;
+
+ pub dcdc<crate::dcdc::RegisterBlock> = 0x4008_0000;
+
+ pub gpio1<crate::gpio::RegisterBlock> = 0x401b_8000;
+ pub gpio2<crate::gpio::RegisterBlock> = 0x401b_c000;
+ pub gpio3<crate::gpio::RegisterBlock> = 0x401C_0000;
+ pub gpio4<crate::gpio::RegisterBlock> = 0x401C_4000;
+ pub gpio5<crate::gpio::RegisterBlock> = 0x400C_0000;
+
+ pub iomuxc<crate::iomuxc::RegisterBlock> = 0x401F_8000;
+ pub iomuxc_gpr<crate::iomuxc_gpr::RegisterBlock> = 0x400A_C000;
+
+ pub enet<crate::enet::RegisterBlock> = 0x402D_8000;
+
+ pub flexspi1<crate::flexspi::RegisterBlock> = 0x402A_8000;
+ pub flexspi2<crate::flexspi::RegisterBlock> = 0x402A_4000;
+
+ pub pit<crate::pit::RegisterBlock> = 0x4008_4000;
+
+ pub lpspi1<crate::lpspi::RegisterBlock> = 0x4039_4000;
+ pub lpspi2<crate::lpspi::RegisterBlock> = 0x4039_8000;
+ pub lpspi3<crate::lpspi::RegisterBlock> = 0x403A_0000;
+
+ pub dma<crate::dma::controller::RegisterBlock> = 0x400E_8000;
+ pub dmamux<crate::dma::mux::RegisterBlock> = 0x400E_C000;
+
+ pub wdog3<crate::rtwdog::RegisterBlock> = 0x400B_C000;
+ }
+ }
+}