aboutsummaryrefslogtreecommitdiff
path: root/chips/imxrt1040/src/lib.rs
blob: 56733b550b14d9bf042b1172555aca95fec8793a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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;
        }
    }
}