eos_s3/cru/
clk_ctrl_pmu.rs1#[doc = "Register `CLK_CTRL_PMU` reader"]
2pub struct R(crate::R<CLK_CTRL_PMU_SPEC>);
3impl core::ops::Deref for R {
4 type Target = crate::R<CLK_CTRL_PMU_SPEC>;
5 #[inline(always)]
6 fn deref(&self) -> &Self::Target {
7 &self.0
8 }
9}
10impl From<crate::R<CLK_CTRL_PMU_SPEC>> for R {
11 #[inline(always)]
12 fn from(reader: crate::R<CLK_CTRL_PMU_SPEC>) -> Self {
13 R(reader)
14 }
15}
16#[doc = "Register `CLK_CTRL_PMU` writer"]
17pub struct W(crate::W<CLK_CTRL_PMU_SPEC>);
18impl core::ops::Deref for W {
19 type Target = crate::W<CLK_CTRL_PMU_SPEC>;
20 #[inline(always)]
21 fn deref(&self) -> &Self::Target {
22 &self.0
23 }
24}
25impl core::ops::DerefMut for W {
26 #[inline(always)]
27 fn deref_mut(&mut self) -> &mut Self::Target {
28 &mut self.0
29 }
30}
31impl From<crate::W<CLK_CTRL_PMU_SPEC>> for W {
32 #[inline(always)]
33 fn from(writer: crate::W<CLK_CTRL_PMU_SPEC>) -> Self {
34 W(writer)
35 }
36}
37#[doc = "Field `Clock_Divider_Ratio` reader - High Speed Clock Divider Ratio. Ratio is reg value + 2. default div is 64"]
38pub struct CLOCK_DIVIDER_RATIO_R(crate::FieldReader<u16, u16>);
39impl CLOCK_DIVIDER_RATIO_R {
40 #[inline(always)]
41 pub(crate) fn new(bits: u16) -> Self {
42 CLOCK_DIVIDER_RATIO_R(crate::FieldReader::new(bits))
43 }
44}
45impl core::ops::Deref for CLOCK_DIVIDER_RATIO_R {
46 type Target = crate::FieldReader<u16, u16>;
47 #[inline(always)]
48 fn deref(&self) -> &Self::Target {
49 &self.0
50 }
51}
52#[doc = "Field `Clock_Divider_Ratio` writer - High Speed Clock Divider Ratio. Ratio is reg value + 2. default div is 64"]
53pub struct CLOCK_DIVIDER_RATIO_W<'a> {
54 w: &'a mut W,
55}
56impl<'a> CLOCK_DIVIDER_RATIO_W<'a> {
57 #[doc = r"Writes raw bits to the field"]
58 #[inline(always)]
59 pub unsafe fn bits(self, value: u16) -> &'a mut W {
60 self.w.bits = (self.w.bits & !0x01ff) | (value as u32 & 0x01ff);
61 self.w
62 }
63}
64#[doc = "1'b1 Clock Divider is ON. 1'b0 Clock Divider is OFF, Output the Source Clock Directly\n\nValue on reset: 1"]
65#[derive(Clone, Copy, Debug, PartialEq)]
66pub enum ENABLE_CLOCK_DIVIDER_A {
67 #[doc = "0: Clock divider is OFF, Output Source clock directly"]
68 DISABLE = 0,
69 #[doc = "1: Clock divider is ON"]
70 ENABLE = 1,
71}
72impl From<ENABLE_CLOCK_DIVIDER_A> for bool {
73 #[inline(always)]
74 fn from(variant: ENABLE_CLOCK_DIVIDER_A) -> Self {
75 variant as u8 != 0
76 }
77}
78#[doc = "Field `Enable_Clock_Divider` reader - 1'b1 Clock Divider is ON. 1'b0 Clock Divider is OFF, Output the Source Clock Directly"]
79pub struct ENABLE_CLOCK_DIVIDER_R(
80 crate::FieldReader<bool, ENABLE_CLOCK_DIVIDER_A>,
81);
82impl ENABLE_CLOCK_DIVIDER_R {
83 #[inline(always)]
84 pub(crate) fn new(bits: bool) -> Self {
85 ENABLE_CLOCK_DIVIDER_R(crate::FieldReader::new(bits))
86 }
87 #[doc = r"Get enumerated values variant"]
88 #[inline(always)]
89 pub fn variant(&self) -> ENABLE_CLOCK_DIVIDER_A {
90 match self.bits {
91 false => ENABLE_CLOCK_DIVIDER_A::DISABLE,
92 true => ENABLE_CLOCK_DIVIDER_A::ENABLE,
93 }
94 }
95 #[doc = "Checks if the value of the field is `DISABLE`"]
96 #[inline(always)]
97 pub fn is_disable(&self) -> bool {
98 **self == ENABLE_CLOCK_DIVIDER_A::DISABLE
99 }
100 #[doc = "Checks if the value of the field is `ENABLE`"]
101 #[inline(always)]
102 pub fn is_enable(&self) -> bool {
103 **self == ENABLE_CLOCK_DIVIDER_A::ENABLE
104 }
105}
106impl core::ops::Deref for ENABLE_CLOCK_DIVIDER_R {
107 type Target = crate::FieldReader<bool, ENABLE_CLOCK_DIVIDER_A>;
108 #[inline(always)]
109 fn deref(&self) -> &Self::Target {
110 &self.0
111 }
112}
113#[doc = "Field `Enable_Clock_Divider` writer - 1'b1 Clock Divider is ON. 1'b0 Clock Divider is OFF, Output the Source Clock Directly"]
114pub struct ENABLE_CLOCK_DIVIDER_W<'a> {
115 w: &'a mut W,
116}
117impl<'a> ENABLE_CLOCK_DIVIDER_W<'a> {
118 #[doc = r"Writes `variant` to the field"]
119 #[inline(always)]
120 pub fn variant(self, variant: ENABLE_CLOCK_DIVIDER_A) -> &'a mut W {
121 self.bit(variant.into())
122 }
123 #[doc = "Clock divider is OFF, Output Source clock directly"]
124 #[inline(always)]
125 pub fn disable(self) -> &'a mut W {
126 self.variant(ENABLE_CLOCK_DIVIDER_A::DISABLE)
127 }
128 #[doc = "Clock divider is ON"]
129 #[inline(always)]
130 pub fn enable(self) -> &'a mut W {
131 self.variant(ENABLE_CLOCK_DIVIDER_A::ENABLE)
132 }
133 #[doc = r"Sets the field bit"]
134 #[inline(always)]
135 pub fn set_bit(self) -> &'a mut W {
136 self.bit(true)
137 }
138 #[doc = r"Clears the field bit"]
139 #[inline(always)]
140 pub fn clear_bit(self) -> &'a mut W {
141 self.bit(false)
142 }
143 #[doc = r"Writes raw bits to the field"]
144 #[inline(always)]
145 pub fn bit(self, value: bool) -> &'a mut W {
146 self.w.bits =
147 (self.w.bits & !(0x01 << 9)) | ((value as u32 & 0x01) << 9);
148 self.w
149 }
150}
151impl R {
152 #[doc = "Bits 0:8 - High Speed Clock Divider Ratio. Ratio is reg value + 2. default div is 64"]
153 #[inline(always)]
154 pub fn clock_divider_ratio(&self) -> CLOCK_DIVIDER_RATIO_R {
155 CLOCK_DIVIDER_RATIO_R::new((self.bits & 0x01ff) as u16)
156 }
157 #[doc = "Bit 9 - 1'b1 Clock Divider is ON. 1'b0 Clock Divider is OFF, Output the Source Clock Directly"]
158 #[inline(always)]
159 pub fn enable_clock_divider(&self) -> ENABLE_CLOCK_DIVIDER_R {
160 ENABLE_CLOCK_DIVIDER_R::new(((self.bits >> 9) & 0x01) != 0)
161 }
162}
163impl W {
164 #[doc = "Bits 0:8 - High Speed Clock Divider Ratio. Ratio is reg value + 2. default div is 64"]
165 #[inline(always)]
166 pub fn clock_divider_ratio(&mut self) -> CLOCK_DIVIDER_RATIO_W {
167 CLOCK_DIVIDER_RATIO_W { w: self }
168 }
169 #[doc = "Bit 9 - 1'b1 Clock Divider is ON. 1'b0 Clock Divider is OFF, Output the Source Clock Directly"]
170 #[inline(always)]
171 pub fn enable_clock_divider(&mut self) -> ENABLE_CLOCK_DIVIDER_W {
172 ENABLE_CLOCK_DIVIDER_W { w: self }
173 }
174 #[doc = "Writes raw bits to the register."]
175 #[inline(always)]
176 pub unsafe fn bits(&mut self, bits: u32) -> &mut Self {
177 self.0.bits(bits);
178 self
179 }
180}
181#[doc = "This Clock is used to delay the Clock gating control signals from PMU. The PMU will monitor the feedback/delayed Clock Gating Control signals to ensure the clocks are OFF before jump to next state. The Firmware needs to Configure this divider to ensure there delay time is longer enough. C23 Clock needs to be 2/3 of the lowest clock frequency of other clocks. For Example, if the Lowest clock frequency of other clocks are 5, then C23 should be lower than 3.33MHz (Or the clock frequency of other clocks should be at least 1.5 times faster than C23.)\n\nThis register you can [`read`](crate::generic::Reg::read), [`write_with_zero`](crate::generic::Reg::write_with_zero), [`reset`](crate::generic::Reg::reset), [`write`](crate::generic::Reg::write), [`modify`](crate::generic::Reg::modify). See [API](https://docs.rs/svd2rust/#read--modify--write-api).\n\nFor information about available fields see [clk_ctrl_pmu](index.html) module"]
182pub struct CLK_CTRL_PMU_SPEC;
183impl crate::RegisterSpec for CLK_CTRL_PMU_SPEC {
184 type Ux = u32;
185}
186#[doc = "`read()` method returns [clk_ctrl_pmu::R](R) reader structure"]
187impl crate::Readable for CLK_CTRL_PMU_SPEC {
188 type Reader = R;
189}
190#[doc = "`write(|w| ..)` method takes [clk_ctrl_pmu::W](W) writer structure"]
191impl crate::Writable for CLK_CTRL_PMU_SPEC {
192 type Writer = W;
193}
194#[doc = "`reset()` method sets CLK_CTRL_PMU to value 0x023e"]
195impl crate::Resettable for CLK_CTRL_PMU_SPEC {
196 #[inline(always)]
197 fn reset_value() -> Self::Ux {
198 0x023e
199 }
200}