Commit Graph

651 Commits

Author SHA1 Message Date
deb3c93892 Simpliify PeripheralMutex a bit. 2021-01-06 22:48:54 +01:00
77bdb5428e buffered_uarte naming cleanup 2021-01-06 20:21:03 +01:00
9bb4c97dc2 Merge pull request #14 from timokroeger/uarte-power-optimization
UARTE power optimization and improvements
2021-01-05 22:10:52 +01:00
607e67f51a Cleanup BufferedUarte 2021-01-05 21:14:04 +01:00
3a4dbfa52e Massicely simplify peripheral abstraction 2021-01-05 01:57:05 +01:00
0631623b51 uarte: Low power wait for RX drop 2021-01-04 22:55:40 +01:00
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
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
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
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
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
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
9e88718fbd Add "context" pointer to owned interrupt handlers. 2021-01-04 22:25:39 +01:00
39ca8b8ded Fix build on non-nrf52840 2021-01-03 22:30:47 +01:00
ace4f40f80 Introduce "peripheral" abstraction to share state between main and interrupt. 2021-01-03 01:40:40 +01:00
4ce51795f2 use hal::Pins for BufferedUarte 2021-01-02 20:31:50 +01:00
0ab88ea279 Add Uart trait, implement it for nrf. 2021-01-02 19:59:37 +01:00
3c7e7220b3 Don't use embedded_dma in nrf uarte. 2021-01-02 19:14:54 +01:00
4783222f67 Rename WakerStore -> WakerRegistration. 2021-01-01 22:30:11 +01:00
6695bf0f21 Low power UART driver 2020-12-30 19:24:12 +01:00
7dc81faa4e Declare irqs for each nrf chip 2020-12-29 15:20:42 +01:00
af5454fbfe Update drivers to owned irqs. 2020-12-29 01:53:17 +01:00
4b8d8ba87e Update RTC for owned irqs 2020-12-29 01:05:28 +01:00
0750234fbe WIP owned irqs 2020-12-29 00:05:52 +01:00
267ec334ac Rename Uarte -> BufferedUarte 2020-12-28 23:57:50 +01:00
1aae27270e Better fmt macros. 2020-12-13 21:17:58 +01:00
ca2ff632ba Fix possibly ambiguous macro 2020-12-01 20:00:55 +01:00
6f76c0ebcc Add support for log+defmt again, but better. 2020-12-01 17:46:56 +01:00
78135a81d9 Remove anyfmt 2020-11-27 18:42:59 +01:00
2e062f5627 gpiote: change port api to directly return futures. 2020-11-09 01:04:34 +01:00
61b1d4e188 Fix build for nrfs with 32 gpios 2020-11-08 19:05:34 +01:00
e539cd32ca Fix logging with anyfmt/log 2020-11-08 19:00:23 +01:00
fc0fe842ee Add support for GPIOTE Port event. 2020-11-08 18:59:31 +01:00
def225b982 gpiote: better naming 2020-11-08 17:38:45 +01:00
0a3590566d Fix ambiguous assert 2020-11-01 17:56:29 +01:00
5e8608c7a5 Make defmt optional with new anyfmt crate 2020-11-01 17:17:24 +01:00
0643095695 Fix build with all nrf chip models 2020-10-31 23:03:09 +01:00
9dea5035b9 Remove unused 2020-10-31 22:36:02 +01:00
ec4b95579d gpiote: take owned pin but add function to borrow it. 2020-10-19 21:25:54 +02:00
33dce24e8a Add gpiote output channel. 2020-09-29 19:18:52 +02:00
c81d626254 gpiote: take borrow instead of owned pin.
This makes it possible to read the pin while the channel is created.
2020-09-29 04:17:32 +02:00
37d2b440ff Fix rtc using multiple alarms at the same time. 2020-09-26 00:35:25 +02:00
19a89b5c14 Add Clock trait 2020-09-25 23:38:42 +02:00
cf1d604749 Add support for multi alarm to RTC. 2020-09-25 23:25:49 +02:00
4333105341 Add Executor with timer queue, Timer, Instant, Duration, Alarm. 2020-09-25 03:25:06 +02:00
05ca563e7d Add clock::Monotonic trait. 2020-09-24 23:26:24 +02:00
82e5e3c45f rtc: Add alarm callback. 2020-09-24 22:41:52 +02:00
3b39ab07e5 Add 64-bit rtc driver with alarm support. 2020-09-24 19:59:20 +02:00
4e4241bf90 remove nrf prefix in features, for consistency with nrf-hal 2020-09-24 19:56:47 +02:00
f9e2cef7f2 Add GPIOTE async hal. 2020-09-23 00:32:49 +02:00