33
33
#![ no_std]
34
34
#![ cfg_attr( docsrs, feature( doc_auto_cfg) ) ]
35
35
use core:: cell:: { Cell , RefCell } ;
36
- use critical_section:: CriticalSection ;
37
- use embassy_sync:: blocking_mutex:: CriticalSectionMutex as Mutex ;
36
+ use critical_section:: { CriticalSection , Mutex } ;
38
37
use portable_atomic:: { AtomicU32 , Ordering } ;
39
38
40
39
use embassy_time_driver:: { time_driver_impl, Driver , TICK_HZ } ;
@@ -46,7 +45,7 @@ use va108xx_hal::{
46
45
clock:: enable_peripheral_clock,
47
46
enable_nvic_interrupt, pac,
48
47
prelude:: * ,
49
- timer:: { enable_tim_clk, get_tim_raw, TimRegInterface } ,
48
+ timer:: { enable_tim_clk, get_tim_raw, TimRegInterface , ValidTim } ,
50
49
PeripheralSelect ,
51
50
} ;
52
51
@@ -116,12 +115,15 @@ pub mod embassy {
116
115
/// This has to be called once at initialization time to initiate the time driver for
117
116
/// embassy.
118
117
#[ cfg( feature = "irqs-in-lib" ) ]
119
- pub unsafe fn init (
118
+ pub unsafe fn init <
119
+ TimekeeperTim : TimRegInterface + ValidTim ,
120
+ AlarmTim : TimRegInterface + ValidTim ,
121
+ > (
120
122
syscfg : & mut pac:: Sysconfig ,
121
123
irqsel : & pac:: Irqsel ,
122
124
sysclk : impl Into < Hertz > ,
123
- timekeeper_tim : impl TimRegInterface ,
124
- alarm_tim : impl TimRegInterface ,
125
+ timekeeper_tim : TimekeeperTim ,
126
+ alarm_tim : AlarmTim ,
125
127
) {
126
128
TIME_DRIVER . init (
127
129
syscfg,
@@ -140,12 +142,15 @@ pub mod embassy {
140
142
///
141
143
/// This has to be called once at initialization time to initiate the time driver for
142
144
/// embassy.
143
- pub unsafe fn init_with_custom_irqs (
145
+ pub unsafe fn init_with_custom_irqs <
146
+ TimekeeperTim : TimRegInterface + ValidTim ,
147
+ AlarmTim : TimRegInterface + ValidTim ,
148
+ > (
144
149
syscfg : & mut pac:: Sysconfig ,
145
150
irqsel : & pac:: Irqsel ,
146
151
sysclk : impl Into < Hertz > ,
147
- timekeeper_tim : impl TimRegInterface ,
148
- alarm_tim : impl TimRegInterface ,
152
+ timekeeper_tim : TimekeeperTim ,
153
+ alarm_tim : AlarmTim ,
149
154
timekeeper_irq : pac:: Interrupt ,
150
155
alarm_irq : pac:: Interrupt ,
151
156
) {
@@ -188,21 +193,21 @@ pub struct TimerDriver {
188
193
189
194
impl TimerDriver {
190
195
#[ allow( clippy:: too_many_arguments) ]
191
- fn init (
196
+ fn init < TimekeeperTim : TimRegInterface + ValidTim , AlarmTim : TimRegInterface + ValidTim > (
192
197
& self ,
193
198
syscfg : & mut pac:: Sysconfig ,
194
199
irqsel : & pac:: Irqsel ,
195
200
sysclk : impl Into < Hertz > ,
196
- timekeeper_tim : impl TimRegInterface ,
197
- alarm_tim : impl TimRegInterface ,
201
+ timekeeper_tim : TimekeeperTim ,
202
+ alarm_tim : AlarmTim ,
198
203
timekeeper_irq : pac:: Interrupt ,
199
204
alarm_irq : pac:: Interrupt ,
200
205
) {
201
- if ALARM_TIM . get ( ) . is_some ( ) {
206
+ if ALARM_TIM . get ( ) . is_some ( ) || TIMEKEEPER_TIM . get ( ) . is_some ( ) {
202
207
return ;
203
208
}
204
- ALARM_TIM . set ( alarm_tim . tim_id ( ) ) . ok ( ) ;
205
- TIMEKEEPER_TIM . set ( timekeeper_tim . tim_id ( ) ) . ok ( ) ;
209
+ ALARM_TIM . set ( AlarmTim :: TIM_ID ) . ok ( ) ;
210
+ TIMEKEEPER_TIM . set ( TimekeeperTim :: TIM_ID ) . ok ( ) ;
206
211
enable_peripheral_clock ( syscfg, PeripheralSelect :: Irqsel ) ;
207
212
enable_tim_clk ( syscfg, timekeeper_tim. tim_id ( ) ) ;
208
213
let timekeeper_reg_block = timekeeper_tim. reg_block ( ) ;
0 commit comments