diff options
| author | Dario Nieuwenhuis <[email protected]> | 2022-08-30 19:15:44 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-08-30 19:15:44 +0200 |
| commit | e4d4166da24937b5aa64bd34c3179e77ffa4e6a0 (patch) | |
| tree | af8971d29cced692ce77f6acc6db807df2c2198f /embassy-rp/src/lib.rs | |
| parent | 7542505cf903930520773f5b6b5ff239b78a8f9c (diff) | |
| parent | a730e2cd0f4f282a78cc5d9897c584ec4f5a44a3 (diff) | |
Merge pull request #927 from embassy-rs/rp-usb
rp: add usb device support.
Diffstat (limited to 'embassy-rp/src/lib.rs')
| -rw-r--r-- | embassy-rp/src/lib.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/embassy-rp/src/lib.rs b/embassy-rp/src/lib.rs index 6db77b8cd..aebbbf567 100644 --- a/embassy-rp/src/lib.rs +++ b/embassy-rp/src/lib.rs | |||
| @@ -10,6 +10,8 @@ pub mod interrupt; | |||
| 10 | pub mod spi; | 10 | pub mod spi; |
| 11 | pub mod timer; | 11 | pub mod timer; |
| 12 | pub mod uart; | 12 | pub mod uart; |
| 13 | #[cfg(feature = "nightly")] | ||
| 14 | pub mod usb; | ||
| 13 | 15 | ||
| 14 | mod clocks; | 16 | mod clocks; |
| 15 | mod reset; | 17 | mod reset; |
| @@ -80,6 +82,8 @@ embassy_hal_common::peripherals! { | |||
| 80 | DMA_CH9, | 82 | DMA_CH9, |
| 81 | DMA_CH10, | 83 | DMA_CH10, |
| 82 | DMA_CH11, | 84 | DMA_CH11, |
| 85 | |||
| 86 | USB, | ||
| 83 | } | 87 | } |
| 84 | 88 | ||
| 85 | #[link_section = ".boot2"] | 89 | #[link_section = ".boot2"] |
| @@ -110,3 +114,36 @@ pub fn init(_config: config::Config) -> Peripherals { | |||
| 110 | 114 | ||
| 111 | peripherals | 115 | peripherals |
| 112 | } | 116 | } |
| 117 | |||
| 118 | /// Extension trait for PAC regs, adding atomic xor/bitset/bitclear writes. | ||
| 119 | trait RegExt<T: Copy> { | ||
| 120 | unsafe fn write_xor<R>(&self, f: impl FnOnce(&mut T) -> R) -> R; | ||
| 121 | unsafe fn write_set<R>(&self, f: impl FnOnce(&mut T) -> R) -> R; | ||
| 122 | unsafe fn write_clear<R>(&self, f: impl FnOnce(&mut T) -> R) -> R; | ||
| 123 | } | ||
| 124 | |||
| 125 | impl<T: Default + Copy, A: pac::common::Write> RegExt<T> for pac::common::Reg<T, A> { | ||
| 126 | unsafe fn write_xor<R>(&self, f: impl FnOnce(&mut T) -> R) -> R { | ||
| 127 | let mut val = Default::default(); | ||
| 128 | let res = f(&mut val); | ||
| 129 | let ptr = (self.ptr() as *mut u8).add(0x1000) as *mut T; | ||
| 130 | ptr.write_volatile(val); | ||
| 131 | res | ||
| 132 | } | ||
| 133 | |||
| 134 | unsafe fn write_set<R>(&self, f: impl FnOnce(&mut T) -> R) -> R { | ||
| 135 | let mut val = Default::default(); | ||
| 136 | let res = f(&mut val); | ||
| 137 | let ptr = (self.ptr() as *mut u8).add(0x2000) as *mut T; | ||
| 138 | ptr.write_volatile(val); | ||
| 139 | res | ||
| 140 | } | ||
| 141 | |||
| 142 | unsafe fn write_clear<R>(&self, f: impl FnOnce(&mut T) -> R) -> R { | ||
| 143 | let mut val = Default::default(); | ||
| 144 | let res = f(&mut val); | ||
| 145 | let ptr = (self.ptr() as *mut u8).add(0x3000) as *mut T; | ||
| 146 | ptr.write_volatile(val); | ||
| 147 | res | ||
| 148 | } | ||
| 149 | } | ||
