First pass at CRC_V1
This commit is contained in:
		
							parent
							
								
									e527892d89
								
							
						
					
					
						commit
						e18a27eea2
					
				| @ -1,21 +1,54 @@ | |||||||
| use crate::pac::{CRC as PAC_CRC, RCC}; | use crate::pac::CRC as PAC_CRC; | ||||||
| use crate::peripherals::CRC; | use crate::peripherals::CRC; | ||||||
| use crate::rcc::sealed::RccPeripheral; | use crate::rcc::sealed::RccPeripheral; | ||||||
| 
 | 
 | ||||||
| pub struct Crc { | pub struct Crc { | ||||||
|     _peripheral: CRC |     _peripheral: CRC, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl Crc { | impl Crc { | ||||||
|  |     /// Instantiates the CRC32 peripheral and initializes it to default values.
 | ||||||
|     pub fn new(peripheral: CRC) -> Self { |     pub fn new(peripheral: CRC) -> Self { | ||||||
|  |         // Note: enable and reset come from RccPeripheral.
 | ||||||
|         // enable CRC clock in RCC.
 |         // enable CRC clock in RCC.
 | ||||||
|         CRC::enable(); |         CRC::enable(); | ||||||
|         // Reset CRC to default values.
 |         // Reset CRC to default values.
 | ||||||
|         CRC::reset(); |         CRC::reset(); | ||||||
|         Self { _peripheral: peripheral} |         let mut instance = Self { | ||||||
|  |             _peripheral: peripheral, | ||||||
|  |         }; | ||||||
|  |         instance.init(); | ||||||
|  |         instance | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn reset() { |     /// Resets the CRC unit to default value (0xFFFF_FFFF)
 | ||||||
|  |     pub fn init(&mut self) { | ||||||
|         unsafe { PAC_CRC.cr().modify(|w| w.set_reset(true)) }; |         unsafe { PAC_CRC.cr().modify(|w| w.set_reset(true)) }; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     /// Feeds a word to the peripheral and returns the current CRC value
 | ||||||
|  |     pub fn feed_word(&mut self, word: u32) -> u32 { | ||||||
|  |         // write a single byte to the device, and return the result
 | ||||||
|  |         unsafe { | ||||||
|  |             PAC_CRC.dr().write_value(word); | ||||||
|  |             PAC_CRC.dr().read() | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     /// Feed a slice of words to the peripheral and return the result.
 | ||||||
|  |     pub fn feed_words(&mut self, words: &[u32]) -> u32 { | ||||||
|  |         for word in words { | ||||||
|  |             unsafe { | ||||||
|  |                 PAC_CRC.dr().write_value(*word); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         unsafe { PAC_CRC.dr().read() } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /// Reclaims the CRC peripheral.
 | ||||||
|  |     pub fn release(self) -> CRC { | ||||||
|  |         CRC::disable(); | ||||||
|  | 
 | ||||||
|  |         self._peripheral | ||||||
|  |     } | ||||||
| } | } | ||||||
| @ -0,0 +1 @@ | |||||||
|  | 
 | ||||||
| @ -0,0 +1 @@ | |||||||
|  | 
 | ||||||
| @ -39,6 +39,8 @@ pub mod exti; | |||||||
| #[cfg(i2c)] | #[cfg(i2c)] | ||||||
| pub mod i2c; | pub mod i2c; | ||||||
| 
 | 
 | ||||||
|  | #[cfg(crc)] | ||||||
|  | pub mod crc; | ||||||
| #[cfg(pwr)] | #[cfg(pwr)] | ||||||
| pub mod pwr; | pub mod pwr; | ||||||
| #[cfg(rng)] | #[cfg(rng)] | ||||||
| @ -49,8 +51,6 @@ pub mod sdmmc; | |||||||
| pub mod spi; | pub mod spi; | ||||||
| #[cfg(usart)] | #[cfg(usart)] | ||||||
| pub mod usart; | pub mod usart; | ||||||
| #[cfg(crc)] |  | ||||||
| pub mod crc; |  | ||||||
| 
 | 
 | ||||||
| #[cfg(feature = "subghz")] | #[cfg(feature = "subghz")] | ||||||
| pub mod subghz; | pub mod subghz; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user