@@ -33,11 +33,8 @@ impl<REG: Readable> Reg<REG> {
3333 /// let flag = reader.field2().bit_is_set();
3434 /// ```
3535 #[ inline( always) ]
36- pub fn read ( & self ) -> R < REG > {
37- R {
38- bits : self . register . get ( ) ,
39- _reg : marker:: PhantomData ,
40- }
36+ pub fn read ( & self ) -> REG :: Reader {
37+ unsafe { REG :: Reader :: from_bits ( self . register . get ( ) ) }
4138 }
4239}
4340
@@ -76,14 +73,15 @@ impl<REG: Resettable + Writable> Reg<REG> {
7673 #[ inline( always) ]
7774 pub fn write < F > ( & self , f : F ) -> REG :: Ux
7875 where
79- F : FnOnce ( & mut W < REG > ) -> & mut W < REG > ,
76+ F : FnOnce ( & mut REG :: Writer ) -> & mut REG :: Writer ,
8077 {
81- let value = f ( & mut W {
82- bits : REG :: RESET_VALUE & !REG :: ONE_TO_MODIFY_FIELDS_BITMAP
83- | REG :: ZERO_TO_MODIFY_FIELDS_BITMAP ,
84- _reg : marker:: PhantomData ,
85- } )
86- . bits ;
78+ let value = unsafe {
79+ f ( & mut REG :: Writer :: from_bits (
80+ REG :: RESET_VALUE & !REG :: ONE_TO_MODIFY_FIELDS_BITMAP
81+ | REG :: ZERO_TO_MODIFY_FIELDS_BITMAP ,
82+ ) )
83+ . to_bits ( )
84+ } ;
8785 self . register . set ( value) ;
8886 value
8987 }
@@ -119,16 +117,17 @@ impl<REG: Resettable + Writable> Reg<REG> {
119117 #[ inline( always) ]
120118 pub fn from_write < F , T > ( & self , f : F ) -> T
121119 where
122- F : FnOnce ( & mut W < REG > ) -> T ,
120+ F : FnOnce ( & mut REG :: Writer ) -> T ,
123121 {
124- let mut writer = W {
125- bits : REG :: RESET_VALUE & !REG :: ONE_TO_MODIFY_FIELDS_BITMAP
126- | REG :: ZERO_TO_MODIFY_FIELDS_BITMAP ,
127- _reg : marker:: PhantomData ,
122+ let mut writer = unsafe {
123+ REG :: Writer :: from_bits (
124+ REG :: RESET_VALUE & !REG :: ONE_TO_MODIFY_FIELDS_BITMAP
125+ | REG :: ZERO_TO_MODIFY_FIELDS_BITMAP ,
126+ )
128127 } ;
129128 let result = f ( & mut writer) ;
130129
131- self . register . set ( writer. bits ) ;
130+ self . register . set ( writer. to_bits ( ) ) ;
132131
133132 result
134133 }
@@ -145,13 +144,9 @@ impl<REG: Writable> Reg<REG> {
145144 #[ inline( always) ]
146145 pub unsafe fn write_with_zero < F > ( & self , f : F ) -> REG :: Ux
147146 where
148- F : FnOnce ( & mut W < REG > ) -> & mut W < REG > ,
147+ F : FnOnce ( & mut REG :: Writer ) -> & mut REG :: Writer ,
149148 {
150- let value = f ( & mut W {
151- bits : REG :: Ux :: ZERO ,
152- _reg : marker:: PhantomData ,
153- } )
154- . bits ;
149+ let value = f ( & mut REG :: Writer :: from_bits ( REG :: Ux :: ZERO ) ) . to_bits ( ) ;
155150 self . register . set ( value) ;
156151 value
157152 }
@@ -166,16 +161,13 @@ impl<REG: Writable> Reg<REG> {
166161 #[ inline( always) ]
167162 pub unsafe fn from_write_with_zero < F , T > ( & self , f : F ) -> T
168163 where
169- F : FnOnce ( & mut W < REG > ) -> T ,
164+ F : FnOnce ( & mut REG :: Writer ) -> T ,
170165 {
171- let mut writer = W {
172- bits : REG :: Ux :: ZERO ,
173- _reg : marker:: PhantomData ,
174- } ;
166+ let mut writer = REG :: Writer :: from_bits ( REG :: Ux :: ZERO ) ;
175167
176168 let result = f ( & mut writer) ;
177169
178- self . register . set ( writer. bits ) ;
170+ self . register . set ( writer. to_bits ( ) ) ;
179171
180172 result
181173 }
@@ -210,20 +202,18 @@ impl<REG: Readable + Writable> Reg<REG> {
210202 #[ inline( always) ]
211203 pub fn modify < F > ( & self , f : F ) -> REG :: Ux
212204 where
213- for < ' w > F : FnOnce ( & R < REG > , & ' w mut W < REG > ) -> & ' w mut W < REG > ,
205+ for < ' w > F : FnOnce ( & REG :: Reader , & ' w mut REG :: Writer ) -> & ' w mut REG :: Writer ,
214206 {
215207 let bits = self . register . get ( ) ;
216- let value = f (
217- & R {
218- bits,
219- _reg : marker:: PhantomData ,
220- } ,
221- & mut W {
222- bits : bits & !REG :: ONE_TO_MODIFY_FIELDS_BITMAP | REG :: ZERO_TO_MODIFY_FIELDS_BITMAP ,
223- _reg : marker:: PhantomData ,
224- } ,
225- )
226- . bits ;
208+ let value = unsafe {
209+ f (
210+ & REG :: Reader :: from_bits ( bits) ,
211+ & mut REG :: Writer :: from_bits (
212+ bits & !REG :: ONE_TO_MODIFY_FIELDS_BITMAP | REG :: ZERO_TO_MODIFY_FIELDS_BITMAP ,
213+ ) ,
214+ )
215+ . to_bits ( )
216+ } ;
227217 self . register . set ( value) ;
228218 value
229219 }
@@ -262,32 +252,27 @@ impl<REG: Readable + Writable> Reg<REG> {
262252 #[ inline( always) ]
263253 pub fn from_modify < F , T > ( & self , f : F ) -> T
264254 where
265- for < ' w > F : FnOnce ( & R < REG > , & ' w mut W < REG > ) -> T ,
255+ for < ' w > F : FnOnce ( & REG :: Reader , & ' w mut REG :: Writer ) -> T ,
266256 {
267- let bits = self . register . get ( ) ;
257+ unsafe {
258+ let bits = self . register . get ( ) ;
268259
269- let mut writer = W {
270- bits : bits & !REG :: ONE_TO_MODIFY_FIELDS_BITMAP | REG :: ZERO_TO_MODIFY_FIELDS_BITMAP ,
271- _reg : marker:: PhantomData ,
272- } ;
260+ let mut writer = REG :: Writer :: from_bits (
261+ bits & !REG :: ONE_TO_MODIFY_FIELDS_BITMAP | REG :: ZERO_TO_MODIFY_FIELDS_BITMAP ,
262+ ) ;
273263
274- let result = f (
275- & R {
276- bits,
277- _reg : marker:: PhantomData ,
278- } ,
279- & mut writer,
280- ) ;
264+ let result = f ( & REG :: Reader :: from_bits ( bits) , & mut writer) ;
281265
282- self . register . set ( writer. bits ) ;
266+ self . register . set ( writer. to_bits ( ) ) ;
283267
284- result
268+ result
269+ }
285270 }
286271}
287272
288- impl < REG : Readable > core:: fmt:: Debug for crate :: generic :: Reg < REG >
273+ impl < REG : Readable > core:: fmt:: Debug for Reg < REG >
289274where
290- R < REG > : core:: fmt:: Debug ,
275+ REG :: Reader : core:: fmt:: Debug ,
291276{
292277 fn fmt ( & self , f : & mut core:: fmt:: Formatter < ' _ > ) -> core:: fmt:: Result {
293278 core:: fmt:: Debug :: fmt ( & self . read ( ) , f)
0 commit comments