diff options
| author | Ian McIntyre <me@mciantyre.dev> | 2025-11-30 18:52:34 -0500 |
|---|---|---|
| committer | Ian McIntyre <me@mciantyre.dev> | 2025-11-30 19:10:51 -0500 |
| commit | 76199f21616ad86cf68f3b063c1ce23c6fc5a52f (patch) | |
| tree | 4c076d0afd649803a2bd9a5ed5cbb1f1c74fb459 /drivers/dcdc | |
First commit
Diffstat (limited to 'drivers/dcdc')
| -rw-r--r-- | drivers/dcdc/Cargo.toml | 7 | ||||
| -rw-r--r-- | drivers/dcdc/src/lib.rs | 43 |
2 files changed, 50 insertions, 0 deletions
diff --git a/drivers/dcdc/Cargo.toml b/drivers/dcdc/Cargo.toml new file mode 100644 index 0000000..5ed2fd6 --- /dev/null +++ b/drivers/dcdc/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "imxrt-drivers-dcdc" +version = "0.1.0" +edition = "2024" + +[dependencies] +ral-registers = { workspace = true } diff --git a/drivers/dcdc/src/lib.rs b/drivers/dcdc/src/lib.rs new file mode 100644 index 0000000..ab2b814 --- /dev/null +++ b/drivers/dcdc/src/lib.rs @@ -0,0 +1,43 @@ +#![no_std] + +pub type Instance = ral_registers::Instance<RegisterBlock>; + +#[repr(C)] +#[allow(non_snake_case)] +pub struct RegisterBlock { + pub REG0: u32, + pub REG1: u32, + pub REG2: u32, + pub REG3: u32, +} + +pub type DCDC = ral_registers::Instance<RegisterBlock>; + +/// Set the target value of `VDD_SOC`, in millivolts +/// +/// Values are clamped between 800mV and 1575mV, with 25mV step +/// sizes. +pub fn set_target_vdd_soc(dcdc: DCDC, millivolts: u32) { + let mv = millivolts.clamp(800, 1575); + let trg = (mv - 800) / 25; + ral_registers::modify_reg!(self, dcdc, REG3, TRG: trg); + while ral_registers::read_reg!(self, dcdc, REG0, STS_DC_OK == 0) {} +} + +/// Returns the target value of `VDD_SOC`, in millivolts. +pub fn target_vdd_soc(dcdc: DCDC) -> u32 { + let trg = ral_registers::read_reg!(self, dcdc, REG3, TRG); + trg * 25 + 800 +} + +ral_registers::register! { + pub REG3<u32> RW [ + TRG start(0) width(5) RW {} + ] +} + +ral_registers::register! { + pub REG0<u32> RW [ + STS_DC_OK start(31) width(1) RW {} + ] +} |
