Skip to content

Commit 85a1854

Browse files
committed
split peri_address
1 parent 2ad56a7 commit 85a1854

File tree

5 files changed

+45
-13
lines changed

5 files changed

+45
-13
lines changed

src/i2c.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,16 @@ pub trait Instance:
108108
{
109109
#[doc(hidden)]
110110
fn ptr() -> *const i2c1::RegisterBlock;
111+
#[doc(hidden)]
112+
#[inline(always)]
113+
fn tx_peri_address() -> u32 {
114+
unsafe { (*Self::ptr()).dr().as_ptr() as u32 }
115+
}
116+
#[doc(hidden)]
117+
#[inline(always)]
118+
fn rx_peri_address() -> u32 {
119+
unsafe { (*Self::ptr()).dr().as_ptr() as u32 }
120+
}
111121
}
112122

113123
// Implemented by all I2C instances

src/i2c/dma.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -902,7 +902,7 @@ pub struct Rx<I2C> {
902902
unsafe impl<I2C: Instance> PeriAddress for Rx<I2C> {
903903
#[inline(always)]
904904
fn address(&self) -> u32 {
905-
unsafe { (*I2C::ptr()).dr().as_ptr() as u32 }
905+
I2C::rx_peri_address()
906906
}
907907

908908
type MemSize = u8;
@@ -911,7 +911,7 @@ unsafe impl<I2C: Instance> PeriAddress for Rx<I2C> {
911911
unsafe impl<I2C: Instance> PeriAddress for Tx<I2C> {
912912
#[inline(always)]
913913
fn address(&self) -> u32 {
914-
unsafe { (*I2C::ptr()).dr().as_ptr() as u32 }
914+
I2C::tx_peri_address()
915915
}
916916

917917
type MemSize = u8;

src/serial/dma.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,7 @@ where
594594
{
595595
#[inline(always)]
596596
fn address(&self) -> u32 {
597-
<Serial_ as Instance>::peri_address()
597+
<Serial_ as Instance>::rx_peri_address()
598598
}
599599

600600
type MemSize = u8;
@@ -606,7 +606,7 @@ where
606606
{
607607
#[inline(always)]
608608
fn address(&self) -> u32 {
609-
<Serial_ as Instance>::peri_address()
609+
<Serial_ as Instance>::tx_peri_address()
610610
}
611611

612612
type MemSize = u8;

src/serial/uart_impls.rs

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,13 @@ pub trait Instance:
3838
fn set_stopbits(&self, bits: config::StopBits);
3939
#[doc(hidden)]
4040
#[inline(always)]
41-
fn peri_address() -> u32 {
42-
unsafe { &*Self::ptr() }.peri_address()
41+
fn tx_peri_address() -> u32 {
42+
unsafe { &*Self::ptr() }.tx_peri_address()
43+
}
44+
#[doc(hidden)]
45+
#[inline(always)]
46+
fn rx_peri_address() -> u32 {
47+
unsafe { &*Self::ptr() }.rx_peri_address()
4348
}
4449
#[doc(hidden)]
4550
unsafe fn steal() -> Self;
@@ -147,8 +152,11 @@ pub trait RegisterBlockImpl: crate::Sealed {
147152
self.listen_event(Some(Event::TxEmpty.into()), None)
148153
}
149154

150-
// PeriAddress
151-
fn peri_address(&self) -> u32;
155+
// PeriAddress for transfer data
156+
fn tx_peri_address(&self) -> u32;
157+
158+
// PeriAddress for receive data
159+
fn rx_peri_address(&self) -> u32;
152160
}
153161

154162
macro_rules! uartCommon {
@@ -260,7 +268,11 @@ macro_rules! uartCommon {
260268
});
261269
}
262270

263-
fn peri_address(&self) -> u32 {
271+
fn tx_peri_address(&self) -> u32 {
272+
self.dr().as_ptr() as u32
273+
}
274+
275+
fn rx_peri_address(&self) -> u32 {
264276
self.dr().as_ptr() as u32
265277
}
266278
};
@@ -709,7 +721,7 @@ impl<UART: Instance, WORD> Serial<UART, WORD> {
709721
unsafe impl<UART: Instance> PeriAddress for Rx<UART, u8> {
710722
#[inline(always)]
711723
fn address(&self) -> u32 {
712-
self.usart.peri_address()
724+
self.usart.rx_peri_address()
713725
}
714726

715727
type MemSize = u8;
@@ -725,7 +737,7 @@ where
725737
unsafe impl<UART: Instance> PeriAddress for Tx<UART, u8> {
726738
#[inline(always)]
727739
fn address(&self) -> u32 {
728-
self.usart.peri_address()
740+
self.usart.tx_peri_address()
729741
}
730742

731743
type MemSize = u8;

src/spi.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,16 @@ pub trait Instance:
204204
{
205205
#[doc(hidden)]
206206
fn ptr() -> *const spi1::RegisterBlock;
207+
#[doc(hidden)]
208+
#[inline(always)]
209+
fn rx_peri_address() -> u32 {
210+
unsafe { &*Self::ptr() }.dr().as_ptr() as u32
211+
}
212+
#[doc(hidden)]
213+
#[inline(always)]
214+
fn tx_peri_address() -> u32 {
215+
unsafe { &*Self::ptr() }.dr().as_ptr() as u32
216+
}
207217
}
208218

209219
// Implemented by all SPI instances
@@ -900,7 +910,7 @@ impl<SPI: Instance> DmaBuilder<SPI> {
900910
unsafe impl<SPI: Instance> PeriAddress for Rx<SPI> {
901911
#[inline(always)]
902912
fn address(&self) -> u32 {
903-
unsafe { (*SPI::ptr()).dr().as_ptr() as u32 }
913+
SPI::rx_peri_address()
904914
}
905915

906916
type MemSize = u8;
@@ -914,7 +924,7 @@ unsafe impl<SPI, STREAM, const CHANNEL: u8> DMASet<STREAM, CHANNEL, PeripheralTo
914924
unsafe impl<SPI: Instance> PeriAddress for Tx<SPI> {
915925
#[inline(always)]
916926
fn address(&self) -> u32 {
917-
unsafe { (*SPI::ptr()).dr().as_ptr() as u32 }
927+
SPI::tx_peri_address()
918928
}
919929

920930
type MemSize = u8;

0 commit comments

Comments
 (0)