Skip to content

Commit 0a088e2

Browse files
committed
split peri_address
1 parent 3185131 commit 0a088e2

File tree

7 files changed

+42
-20
lines changed

7 files changed

+42
-20
lines changed

src/i2c.rs

+10
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

+2-2
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.rs

-4
Original file line numberDiff line numberDiff line change
@@ -277,10 +277,6 @@ macro_rules! halUsart {
277277
});
278278
}
279279

280-
fn peri_address() -> u32 {
281-
unsafe { (*(<$USART>::ptr() as *const Self::RegisterBlock)).peri_address() }
282-
}
283-
284280
unsafe fn steal() -> Self {
285281
Self::steal()
286282
}

src/serial/dma.rs

+2-2
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

+21-6
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,15 @@ pub trait Instance:
3737
#[doc(hidden)]
3838
fn set_stopbits(&self, bits: config::StopBits);
3939
#[doc(hidden)]
40-
fn peri_address() -> u32;
40+
#[inline(always)]
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()
48+
}
4149
#[doc(hidden)]
4250
unsafe fn steal() -> Self;
4351
}
@@ -144,8 +152,11 @@ pub trait RegisterBlockImpl: crate::Sealed {
144152
self.listen_event(Some(Event::TxEmpty.into()), None)
145153
}
146154

147-
// PeriAddress
148-
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;
149160
}
150161

151162
macro_rules! uartCommon {
@@ -257,7 +268,11 @@ macro_rules! uartCommon {
257268
});
258269
}
259270

260-
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 {
261276
self.dr().as_ptr() as u32
262277
}
263278
};
@@ -706,7 +721,7 @@ impl<UART: Instance, WORD> Serial<UART, WORD> {
706721
unsafe impl<UART: Instance> PeriAddress for Rx<UART, u8> {
707722
#[inline(always)]
708723
fn address(&self) -> u32 {
709-
self.usart.peri_address()
724+
self.usart.rx_peri_address()
710725
}
711726

712727
type MemSize = u8;
@@ -722,7 +737,7 @@ where
722737
unsafe impl<UART: Instance> PeriAddress for Tx<UART, u8> {
723738
#[inline(always)]
724739
fn address(&self) -> u32 {
725-
self.usart.peri_address()
740+
self.usart.tx_peri_address()
726741
}
727742

728743
type MemSize = u8;

src/spi.rs

+7-2
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,11 @@ pub trait Instance:
204204
{
205205
#[doc(hidden)]
206206
fn ptr() -> *const spi1::RegisterBlock;
207+
#[doc(hidden)]
208+
#[inline(always)]
209+
fn peri_address() -> u32 {
210+
unsafe { &*Self::ptr() }.dr().as_ptr() as u32
211+
}
207212
}
208213

209214
// Implemented by all SPI instances
@@ -900,7 +905,7 @@ impl<SPI: Instance> DmaBuilder<SPI> {
900905
unsafe impl<SPI: Instance> PeriAddress for Rx<SPI> {
901906
#[inline(always)]
902907
fn address(&self) -> u32 {
903-
unsafe { (*SPI::ptr()).dr().as_ptr() as u32 }
908+
SPI::peri_address()
904909
}
905910

906911
type MemSize = u8;
@@ -914,7 +919,7 @@ unsafe impl<SPI, STREAM, const CHANNEL: u8> DMASet<STREAM, CHANNEL, PeripheralTo
914919
unsafe impl<SPI: Instance> PeriAddress for Tx<SPI> {
915920
#[inline(always)]
916921
fn address(&self) -> u32 {
917-
unsafe { (*SPI::ptr()).dr().as_ptr() as u32 }
922+
SPI::peri_address()
918923
}
919924

920925
type MemSize = u8;

src/uart.rs

-4
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,6 @@ macro_rules! halUart {
5252
});
5353
}
5454

55-
fn peri_address() -> u32 {
56-
unsafe { (*Self::ptr()).peri_address() }
57-
}
58-
5955
unsafe fn steal() -> Self {
6056
Self::steal()
6157
}

0 commit comments

Comments
 (0)