Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
S
stm32f4-hal
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Per Lindgren
stm32f4-hal
Commits
ed3e2198
Commit
ed3e2198
authored
7 years ago
by
Per Lindgren
Browse files
Options
Downloads
Patches
Plain Diff
traits work
parent
4bded63e
No related branches found
No related tags found
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
examples/serial-dma-tx.rs
+1
-1
1 addition, 1 deletion
examples/serial-dma-tx.rs
src/dma.rs
+28
-7
28 additions, 7 deletions
src/dma.rs
src/serial.rs
+11
-13
11 additions, 13 deletions
src/serial.rs
with
40 additions
and
21 deletions
examples/serial-dma-tx.rs
+
1
−
1
View file @
ed3e2198
...
@@ -19,7 +19,7 @@ fn main() {
...
@@ -19,7 +19,7 @@ fn main() {
let
mut
rcc
=
p
.RCC
.constrain
();
let
mut
rcc
=
p
.RCC
.constrain
();
let
mut
gpioa
=
p
.GPIOA
.split
(
&
mut
rcc
.ahb1
);
let
mut
gpioa
=
p
.GPIOA
.split
(
&
mut
rcc
.ahb1
);
let
streams
=
p
.DMA1
.split
(
&
mut
rcc
.ahb1
);
let
streams
=
p
.DMA1
.split
(
&
mut
rcc
.ahb1
);
let
tx_stream
=
streams
.1
.into_channel4
();
//
actually 5
let
tx_stream
=
streams
.1
.into_channel4
();
//
S5<C4>
let
clocks
=
rcc
.cfgr
.freeze
(
&
mut
flash
.acr
);
let
clocks
=
rcc
.cfgr
.freeze
(
&
mut
flash
.acr
);
...
...
This diff is collapsed.
Click to expand it.
src/dma.rs
+
28
−
7
View file @
ed3e2198
...
@@ -7,6 +7,7 @@ use core::ops;
...
@@ -7,6 +7,7 @@ use core::ops;
use
rcc
::
AHB1
;
use
rcc
::
AHB1
;
use
stm32f4x
::
USART2
;
use
stm32f4x
::
USART2
;
use
stm32f4x
::{
DMA1
,
dma2
};
#[derive(Debug)]
#[derive(Debug)]
pub
enum
Error
{
pub
enum
Error
{
...
@@ -66,6 +67,26 @@ pub trait DmaExt {
...
@@ -66,6 +67,26 @@ pub trait DmaExt {
fn
split
(
self
,
ahb
:
&
mut
AHB1
)
->
Self
::
Streams
;
fn
split
(
self
,
ahb
:
&
mut
AHB1
)
->
Self
::
Streams
;
}
}
pub
trait
Dma
{
// sXcr stream x configuration register
fn
cr
(
&
mut
self
)
->
&
dma2
::
S5CR
;
// sXfcr stream x FIFO control register
fn
fcr
(
&
mut
self
)
->
&
dma2
::
S5FCR
;
// sXm0ar stream x memory 0 address register
fn
m0ar
(
&
mut
self
)
->
&
dma2
::
S5M0AR
;
// sXm1ar stream x memory 0 address register
fn
m1ar
(
&
mut
self
)
->
&
dma2
::
S5M1AR
;
// sXndtr stream x number of data register
fn
ndtr
(
&
mut
self
)
->
&
dma2
::
S5NDTR
;
// sXpar stream x peripheral address register
fn
par
(
&
mut
self
)
->
&
dma2
::
S5PAR
;
}
pub
struct
Transfer
<
MODE
,
BUFFER
,
STREAM
,
PAYLOAD
>
{
pub
struct
Transfer
<
MODE
,
BUFFER
,
STREAM
,
PAYLOAD
>
{
_mode
:
PhantomData
<
MODE
>
,
_mode
:
PhantomData
<
MODE
>
,
buffer
:
BUFFER
,
buffer
:
BUFFER
,
...
@@ -183,34 +204,34 @@ pub mod dma1 {
...
@@ -183,34 +204,34 @@ pub mod dma1 {
// lisr low interrupt status register
// lisr low interrupt status register
// impl<CHANNEL> S5<CHANNEL> {
// impl<CHANNEL> S5<CHANNEL> {
impl
S5
<
C4
>
{
impl
super
::
Dma
for
S5
<
C4
>
{
// sXcr stream x configuration register
// sXcr stream x configuration register
pub
(
crate
)
fn
cr
(
&
mut
self
)
->
&
dma2
::
S5CR
{
fn
cr
(
&
mut
self
)
->
&
dma2
::
S5CR
{
unsafe
{
&
(
*
DMA1
::
ptr
())
.s5cr
}
unsafe
{
&
(
*
DMA1
::
ptr
())
.s5cr
}
}
}
// sXfcr stream x FIFO control register
// sXfcr stream x FIFO control register
pub
(
crate
)
fn
fcr
(
&
mut
self
)
->
&
dma2
::
S5FCR
{
fn
fcr
(
&
mut
self
)
->
&
dma2
::
S5FCR
{
unsafe
{
&
(
*
DMA1
::
ptr
())
.s5fcr
}
unsafe
{
&
(
*
DMA1
::
ptr
())
.s5fcr
}
}
}
// sXm0ar stream x memory 0 address register
// sXm0ar stream x memory 0 address register
pub
(
crate
)
fn
m0ar
(
&
mut
self
)
->
&
dma2
::
S5M0AR
{
fn
m0ar
(
&
mut
self
)
->
&
dma2
::
S5M0AR
{
unsafe
{
&
(
*
DMA1
::
ptr
())
.s5m0ar
}
unsafe
{
&
(
*
DMA1
::
ptr
())
.s5m0ar
}
}
}
// sXm1ar stream x memory 0 address register
// sXm1ar stream x memory 0 address register
pub
(
crate
)
fn
m1ar
(
&
mut
self
)
->
&
dma2
::
S5M1AR
{
fn
m1ar
(
&
mut
self
)
->
&
dma2
::
S5M1AR
{
unsafe
{
&
(
*
DMA1
::
ptr
())
.s5m1ar
}
unsafe
{
&
(
*
DMA1
::
ptr
())
.s5m1ar
}
}
}
// sXndtr stream x number of data register
// sXndtr stream x number of data register
pub
(
crate
)
fn
ndtr
(
&
mut
self
)
->
&
dma2
::
S5NDTR
{
fn
ndtr
(
&
mut
self
)
->
&
dma2
::
S5NDTR
{
unsafe
{
&
(
*
DMA1
::
ptr
())
.s5ndtr
}
unsafe
{
&
(
*
DMA1
::
ptr
())
.s5ndtr
}
}
}
// sXpar stream x peripheral address register
// sXpar stream x peripheral address register
pub
(
crate
)
fn
par
(
&
mut
self
)
->
&
dma2
::
S5PAR
{
fn
par
(
&
mut
self
)
->
&
dma2
::
S5PAR
{
unsafe
{
&
(
*
DMA1
::
ptr
())
.s5par
}
unsafe
{
&
(
*
DMA1
::
ptr
())
.s5par
}
}
}
}
}
...
...
This diff is collapsed.
Click to expand it.
src/serial.rs
+
11
−
13
View file @
ed3e2198
...
@@ -13,7 +13,7 @@ use cast::u16;
...
@@ -13,7 +13,7 @@ use cast::u16;
use
hal
::
serial
;
use
hal
::
serial
;
use
nb
;
use
nb
;
use
stm32f4x
::{
USART1
,
USART2
,
USART6
};
use
stm32f4x
::{
USART1
,
USART2
,
USART6
};
use
dma
::{
Static
,
Transfer
,
Usart1TxStream
,
R
};
use
dma
::{
Dma
,
Static
,
Transfer
,
Usart1TxStream
,
R
};
// usart2
// usart2
use
gpio
::
gpioa
::{
PA2
,
PA3
};
use
gpio
::
gpioa
::{
PA2
,
PA3
};
...
@@ -250,18 +250,16 @@ macro_rules! hal {
...
@@ -250,18 +250,16 @@ macro_rules! hal {
where
where
A
:
Unsize
<
[
u8
]
>
,
A
:
Unsize
<
[
u8
]
>
,
B
:
Static
<
A
>
,
B
:
Static
<
A
>
,
S
:
Usart1TxStream
<
$USARTX
>
S
:
Usart1TxStream
<
$USARTX
>
+
Dma
{
{
// // write!(dma1, "hi {}", 1);
{
// let usart2 = self.0;
let
buffer1
:
&
[
u8
]
=
buffer
.borrow
();
stream
.ndtr
()
// let buffer: &[u8] = buffer.borrow();
.write
(|
w
|
unsafe
{
w
.ndt
()
.bits
(
u16
(
buffer1
.len
())
.unwrap
())
});
// stream.ndtr()
stream
.par
()
// .write(|w| unsafe { w.ndt().bits(u16(buffer.len()).unwrap()) });
.write
(|
w
|
unsafe
{
w
.bits
(
&
(
*
$USARTX
::
ptr
())
.dr
as
*
const
_
as
usize
as
u32
)
});
// dma1.s6par
stream
.m0ar
()
// .write(|w| unsafe { w.bits(&usart2.dr as *const _ as u32) });
.write
(|
w
|
unsafe
{
w
.bits
(
buffer1
.as_ptr
()
as
u32
)
});
// dma1.s6m0ar
// .write(|w| unsafe { w.bits(buffer.as_ptr() as u32) });
// dma1.s6cr.modify(|_, w| w.en().set_bit());
// dma1.s6cr.modify(|_, w| w.en().set_bit());
...
@@ -302,7 +300,7 @@ macro_rules! hal {
...
@@ -302,7 +300,7 @@ macro_rules! hal {
// .en()
// .en()
// .set_bit()
// .set_bit()
// });
// });
}
Transfer
::
r
(
buffer
,
stream
,
self
)
Transfer
::
r
(
buffer
,
stream
,
self
)
}
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment