Commit Graph

3729 Commits

Author SHA1 Message Date
Timo Kröger
93780fa31d uarte: Wait for the peripheral to be disabled
Prevents a panic in the case of:
1. Abort a receive future
2. Free Uarte::free()
3. Uarte::new()
->  panicked at 'assertion failed: uarte.enable.read().enable().is_disabled()'
2021-01-04 22:55:40 +01:00
Timo Kröger
9b1f7b8a17 uarte: Enable peripheral with first poll
This fixes a lockup when a future is dropped before it was polled.
2021-01-04 22:55:40 +01:00
Timo Kröger
85ec9dd16f uarte: Be on safe side with potentially racy code
The PS does not specify how many cycles it takes for a STARTXX task to
generate a XXSTARTED event. I think it is instantaneous but let’s be on
the safe side for the following sequence:
1. poll() starttx
2. drop() txstarted not yet set, but future gets dropped
3. txstarted set by hardware, peripheral enabled after it was dropped
2021-01-04 22:55:40 +01:00
Timo Kröger
a3b3305b8e uarte: Only stop TX forcefully when a transmissions is running
This comes with insignificant power consumption improvements but makes
the code of the RX and TX case symmetric.
2021-01-04 22:55:40 +01:00
Timo Kröger
a7c03e4cb6 uarte: Only stop RX forcefully when a reception is running
The STOPRX task always triggers a timeout of ~55bit times until the
RXTO event is generated. Before we disabled the receiver only after
the timeout.
With this change the receiver is stopped right after reception has ended
because the DMA buffer is full.
For forced RX aborts like `stop()` or on drop still need to wait for the
RXTO event before disabling the receiver.
2021-01-04 22:55:40 +01:00
Timo Kröger
9f28c7ab8d uarte: Do not spin when stopping a receive future
Spinning on drop() is still required when the future has not been
stopped so that DMA finishes before the buffer is released.
2021-01-04 22:55:40 +01:00
Dario Nieuwenhuis
9e88718fbd Add "context" pointer to owned interrupt handlers. 2021-01-04 22:25:39 +01:00
xoviat
d89462fc16
remove macros 2021-01-04 12:53:27 -06:00
xoviat
f3676e1eab rename examples 2021-01-04 12:52:00 -06:00
xoviat
be541b94aa
Merge branch 'master' into stm32f4 2021-01-04 12:50:22 -06:00
xoviat
9bf09488f1 fix interrupts 2021-01-04 12:48:13 -06:00
Dario Nieuwenhuis
39ca8b8ded Fix build on non-nrf52840 2021-01-03 22:30:47 +01:00
Dario Nieuwenhuis
ace4f40f80 Introduce "peripheral" abstraction to share state between main and interrupt. 2021-01-03 01:40:40 +01:00
Dario Nieuwenhuis
4ce51795f2 use hal::Pins for BufferedUarte 2021-01-02 20:31:50 +01:00
Dario Nieuwenhuis
8fa3294f35 Update readme 2021-01-02 20:13:35 +01:00
Dario Nieuwenhuis
0ab88ea279 Add Uart trait, implement it for nrf. 2021-01-02 19:59:37 +01:00
Dario Nieuwenhuis
1d53985abe Remove now-stable slice_fill feature 2021-01-02 19:56:05 +01:00
Dario Nieuwenhuis
3c7e7220b3 Don't use embedded_dma in nrf uarte. 2021-01-02 19:14:54 +01:00
Dario Nieuwenhuis
396d7650ca Add some comments to uart example. 2021-01-01 23:04:18 +01:00
Dario Nieuwenhuis
20d3dc87f9 Rename examples -> embassy-nrf-examples 2021-01-01 22:46:32 +01:00
Dario Nieuwenhuis
4783222f67 Rename WakerStore -> WakerRegistration. 2021-01-01 22:30:11 +01:00
xoviat
2ee2d18465 simplify impl. and add interupt idea 2021-01-01 14:59:57 -06:00
xoviat
d5cb9bebaa implement on irqs 2020-12-31 17:59:01 -06:00
xoviat
cc8d162859 begin integrate interrupt 2020-12-31 16:59:42 -06:00
xoviat
cc0076a0eb update hal branch 2020-12-31 16:49:27 -06:00
xoviat
925ede848e rename uarte as serial 2020-12-31 16:40:51 -06:00
xoviat
308756f366 generalize uarte 2020-12-31 16:38:31 -06:00
xoviat
142c01ad01 generalize futures 2020-12-31 16:11:23 -06:00
xoviat
d52e1b2276 use transfer_complete_flag; make partially generic 2020-12-31 15:58:35 -06:00
Dario Nieuwenhuis
ffb92731cd
Merge pull request #12 from timokroeger/task-macro-warning
Fix warnings for tasks that take mutable parameters
2020-12-31 16:32:44 +01:00
Timo Kröger
c17954ccba Fix warnings for tasks that take mutable parameters
#[task]
pub async fn run(mut param: Param) {}

warning: variable does not need to be mutable
2020-12-31 15:38:10 +01:00
xoviat
43904e8db0 clean-up example 2020-12-30 21:24:32 -06:00
xoviat
2d979eb4ef add interrupts 2020-12-30 21:14:56 -06:00
xoviat
ea36029a3d reformat 2020-12-30 19:50:15 -06:00
xoviat
a5cf65a17b impl. poll:ready 2020-12-30 19:45:07 -06:00
xoviat
de2b1adafe Merge branch 'master' of https://github.com/akiles/embassy into stm32f4 2020-12-30 13:17:47 -06:00
Dario Nieuwenhuis
cd56d2621a
Merge pull request #3 from timokroeger/low-power-uarte
(low power) UARTE implementation
2020-12-30 19:57:36 +01:00
xoviat
c6cf9b801d minor rework to get tx working (maybe) 2020-12-30 12:27:47 -06:00
Timo Kröger
6695bf0f21 Low power UART driver 2020-12-30 19:24:12 +01:00
Timo Kröger
c97d5262f5 Blocking wait method for signals 2020-12-30 19:24:12 +01:00
xoviat
60c7d112b1 fix borrowing errors 2020-12-30 11:05:52 -06:00
xoviat
41db867d9a fix transfer mutability 2020-12-29 22:57:00 -06:00
Dario Nieuwenhuis
6bc1a712ff Fix Forever 2020-12-30 04:17:45 +01:00
Dario Nieuwenhuis
a02d0a378e Fix race in enqueuing expired tasks. 2020-12-30 04:12:48 +01:00
xoviat
53c2829eb1 add dma example; rename uarte 2020-12-29 19:10:47 -06:00
Dario Nieuwenhuis
bb6f25d010 Remove use of deprecated compare_and_swap. 2020-12-30 01:07:22 +01:00
Dario Nieuwenhuis
015b6bbce4 Ensure timers always yield at least once.
This prevents a task that's constantly running late from monopolizing the CPU.
Add executor_fairness_test example showcasing it.
2020-12-30 00:57:35 +01:00
xoviat
74b5d4693c implement prelim draft 2020-12-29 12:33:50 -06:00
Dario Nieuwenhuis
2bf9b14ef0
Merge pull request #7 from akiles/irq
Owned IRQs
2020-12-29 15:32:23 +01:00
Dario Nieuwenhuis
7dc81faa4e Declare irqs for each nrf chip 2020-12-29 15:20:42 +01:00