1
1
#![ no_main]
2
2
#![ no_std]
3
3
4
- // use defmt_rtt as _;
5
- use panic_probe as _;
4
+ mod utilities;
6
5
7
6
use embedded_hal_async:: spi:: SpiBus ;
8
7
use rtic:: app;
@@ -40,11 +39,18 @@ mod app {
40
39
41
40
#[ init]
42
41
fn init ( ctx : init:: Context ) -> ( Shared , Local ) {
42
+ utilities:: logger:: init ( ) ;
43
+
43
44
let pwr = ctx. device . PWR . constrain ( ) ;
44
45
let pwrcfg = pwr. vos0 ( ) . freeze ( ) ;
45
46
46
47
let rcc = ctx. device . RCC . constrain ( ) ;
47
- let ccdr = rcc. sys_ck ( 250 . MHz ( ) ) . freeze ( pwrcfg, & ctx. device . SBS ) ;
48
+ let ccdr = rcc
49
+ . sys_ck ( 192 . MHz ( ) )
50
+ . pll1_q_ck ( 64 . MHz ( ) )
51
+ . freeze ( pwrcfg, & ctx. device . SBS ) ;
52
+
53
+ log:: info!( "Starting RTIC SPI example..." ) ;
48
54
49
55
// Uncomment if use SysTick as monotonic timer
50
56
Mono :: start ( ctx. core . SYST , ccdr. clocks . sysclk ( ) . raw ( ) ) ;
@@ -62,23 +68,27 @@ mod app {
62
68
let tx_ch = channels. 0 ;
63
69
let rx_ch = channels. 1 ;
64
70
65
- let spi = ctx. device . SPI2 . spi (
66
- ( sck, miso, mosi) ,
67
- SpiConfig :: new ( spi:: MODE_0 ) ,
68
- 1 . MHz ( ) ,
69
- ccdr. peripheral . SPI2 ,
70
- & ccdr. clocks ,
71
- ) . use_dma_duplex ( tx_ch, rx_ch) ;
72
-
73
- tick:: spawn ( ) . ok ( ) ;
71
+ let spi = ctx
72
+ . device
73
+ . SPI2
74
+ . spi (
75
+ ( sck, miso, mosi) ,
76
+ SpiConfig :: new ( spi:: MODE_0 ) ,
77
+ 1 . MHz ( ) ,
78
+ ccdr. peripheral . SPI2 ,
79
+ & ccdr. clocks ,
80
+ )
81
+ . use_dma_duplex ( tx_ch, rx_ch) ;
82
+
83
+ tick:: spawn ( ) . unwrap ( ) ;
84
+ spi_transfer:: spawn ( ) . unwrap ( ) ;
74
85
(
75
86
Shared { } ,
76
87
Local {
77
88
led,
78
89
spi,
79
90
source : [ 0 ; 40 ] ,
80
91
dest : [ 0 ; 40 ] ,
81
-
82
92
} ,
83
93
)
84
94
}
@@ -88,17 +98,26 @@ mod app {
88
98
loop {
89
99
ctx. local . led . toggle ( ) ;
90
100
* ctx. local . count += 1 ;
91
- // defmt ::info!("Tick {}", *ctx.local.count);
101
+ log :: info!( "Tick {}" , * ctx. local. count) ;
92
102
Mono :: delay ( 1000 . millis ( ) ) . await ;
93
103
}
94
104
}
95
105
96
106
#[ task( local = [ spi, count: u32 = 0 , source, dest] , priority = 2 ) ]
97
107
async fn spi_transfer ( ctx : spi_transfer:: Context ) {
98
108
loop {
109
+ log:: info!( "Starting SPI transfer" ) ;
99
110
ctx. local . source . fill ( * ctx. local . count as u8 ) ;
111
+ ctx. local . dest . fill ( 0 ) ;
100
112
* ctx. local . count += 1 ;
101
- ctx. local . spi . transfer ( ctx. local . dest , ctx. local . source ) . await . unwrap ( ) ;
113
+ ctx. local
114
+ . spi
115
+ . transfer ( ctx. local . dest , ctx. local . source )
116
+ . await
117
+ . unwrap ( ) ;
118
+
119
+ assert_eq ! ( ctx. local. source, ctx. local. dest) ;
120
+ log:: info!( "Success!" ) ;
102
121
Mono :: delay ( 1000 . millis ( ) ) . await ;
103
122
}
104
123
}
0 commit comments