Jacob Rosenthal
e5dc63e8e9
usb feature gate
2021-12-12 21:39:59 -07:00
Jacob Rosenthal
f430c0e8c2
nrf-usbd
2021-12-12 19:20:02 -07:00
huntc
dc3469b297
Documents the nRF BufferedUarte problem
...
Please see https://github.com/embassy-rs/embassy/issues/536 for the rationale.
2021-12-12 17:52:17 +11:00
huntc
7256ff3e71
Provides AsyncWrite with flush
...
As per Tokio and others, this commit provides a `poll_flush` method on `AsyncWrite` so that a best-effort attempt at wakening once all bytes are flushed can be made.
2021-12-10 12:16:08 +11:00
huntc
090a7adf78
Keep Clippy happy
2021-12-08 12:13:49 +11:00
huntc
4e7fa52288
Applies the Uarte patch
...
Applies the Nordic workaround found in the `Uarte` for the nRF9160 and nRF5340 to the `BufferedUarte`.
2021-12-08 12:02:30 +11:00
Dario Nieuwenhuis
6dd55265cd
nrf/gpiote: fix build for nrf9160
2021-12-02 04:01:03 +01:00
huntc
496ad4ed43
Rationale for uarte usage
2021-12-01 09:37:09 +11:00
huntc
469852c667
Removed unsafe from uarte
...
The constructors themselves are not strictly unsafe. Interactions with DMA can be generally unsafe if a future is dropped, but that's a separate issue. It is important that we use the `unsafe` keyword diligently as it can lead to confusion otherwise.
2021-12-01 09:14:24 +11:00
bors[bot]
c7d9729028
Merge #486
...
486: Pwm ppi events r=Dirbaio a=jacobrosenthal
More PWM yak shaving. I was going to do some safe pwm ppi events stuff but I just dont think it fits this api design.. ppi is just very low level, im not sure how safe it will be in general
* first we should probably have borrows of handlers for ppi with lifetime of the peripheral? hal does eb4ba6ae42/nrf-hal-common/src/pwm.rs (L714-L716)
* in general having access to tasks can put the state in some configuration the api doesnt understand anymore. for `SequencePwm` ideally id hand you back either only seq_start0 or seq_start1 because youd only use one based on if your `Times` is even or odd.. but again we only know that with this api AFTER start has been called. I dont think were ready for typestates
SO I figured why not add the pwm ppi events but make them unsafe and commit this example since I started it.
Somewhat related drop IS removing the last duty cycle from the pin correctly, but stop DOES NOT..the only thing that sets the pin back is pin.conf() as far as I can tell, so I tried to document that better and got rid of stop for the `SimplePwm` again since that doesnt need it then. However its ackward we dont have a way to unset the pwm without setting a new sequence of 0s, or dropping the peripheral
Co-authored-by: Jacob Rosenthal <jacobrosenthal@gmail.com>
2021-11-26 23:08:24 +00:00
huntc
d4179ee2e4
Some documentation corrections and expansion
2021-11-22 12:26:11 +11:00
bors[bot]
d7bbaf1a4c
Merge #494
...
494: nrf: saadc do not reexport pac enums r=Dirbaio a=jacobrosenthal
Closes #415
Co-authored-by: Jacob Rosenthal <jacobrosenthal@gmail.com>
2021-11-21 19:47:31 +00:00
Wilfried Chauveau
d5a2462cba
Update embassy-nrf with lifetime bounds on gpio implementations.
2021-11-21 10:25:43 +00:00
Jacob Rosenthal
18d94a7d01
nrf: saadc do not reexport pac enums
...
Closes #415
2021-11-20 18:07:20 -07:00
Bob McWhirter
c2da498263
Update to defmt 3.0ish.
...
Lots of gitrevs deps.
2021-11-15 11:09:08 -05:00
Jacob Rosenthal
4010a829ae
nrf: pwm clarify stop and disable pin state
2021-11-14 11:26:30 -07:00
Jacob Rosenthal
4d61f4aa0d
nrf: sequencepwm dont wait for tasks_stop afterall
2021-11-13 17:31:09 -07:00
Jacob Rosenthal
3a166db280
nrf: pwm use register reset
2021-11-13 16:42:19 -07:00
Jacob Rosenthal
7dfc0acb2f
nrf: pwm clarify stop and disable pin state
2021-11-13 16:42:17 -07:00
Jacob Rosenthal
2bcacd4f16
nrf: sequencepwm add events
2021-11-13 16:24:41 -07:00
Jacob Rosenthal
0f322c1d4e
fix set_duty ptr write
2021-11-12 08:55:20 -07:00
Jacob Rosenthal
667a93b5c8
sequence pwm remove disable fn for clarity, and disable peripheral on stop
2021-11-11 23:46:27 -07:00
Jacob Rosenthal
7bee43df5a
nrf: sequencepwm nitpicks for clarity
2021-11-11 22:50:07 -07:00
Jacob Rosenthal
937f49dead
nrf: sequencepwm rename top to max_duty for consistancy
2021-11-11 22:47:57 -07:00
Jacob Rosenthal
f15c3a04d4
sequence must be live while DMA runs
2021-11-11 20:10:34 -07:00
Jacob Rosenthal
fe83daf45f
remove const generic
2021-11-11 19:49:41 -07:00
Jacob Rosenthal
ec66fcd01a
pwm_sequence consume buffer
2021-11-11 19:14:29 -07:00
bors[bot]
4112759a8f
Merge #455
...
455: simple_playback api from nrf sdk r=Dirbaio a=jacobrosenthal
Port of the nrf_drv_pwm_simple_playback call from the nordic sdk that allows you to set up a sequence to play across leds with no interaction necessary using the 'shorts' registers to trigger looping sequences
Co-authored-by: Jacob Rosenthal <jacobrosenthal@gmail.com>
2021-11-11 16:26:36 +00:00
Jacob Rosenthal
156caa9330
more comments
2021-11-10 19:56:36 -07:00
Jacob Rosenthal
66a43c2e58
more comments
2021-11-10 19:44:57 -07:00
Jacob Rosenthal
407e5d06e0
more comments
2021-11-10 19:43:47 -07:00
Jacob Rosenthal
613e88f1d2
fix bug with config.counter_mode
2021-11-10 18:53:21 -07:00
Jacob Rosenthal
4c2d0ac211
doccomments
2021-11-10 18:52:32 -07:00
Jacob Rosenthal
c6736abf5e
dont wait seqend for sequencepwm
2021-11-10 18:52:03 -07:00
Jacob Rosenthal
c450f91bd9
doc comment cleanup
2021-11-10 17:30:59 -07:00
Jacob Rosenthal
6dcc731065
drop the debug
2021-11-10 17:25:38 -07:00
Jacob Rosenthal
5f28153b81
disconnect pwm pins on drop
2021-11-10 17:19:03 -07:00
Jacob Rosenthal
3b7af2f4ed
fix wait seqend, pwm example is slow now...
2021-11-10 13:03:44 -07:00
Jacob Rosenthal
903b8f032f
defensive dma
2021-11-10 12:34:41 -07:00
Jacob Rosenthal
4751dbddc6
move state into PwmSimple
2021-11-10 12:32:28 -07:00
Jacob Rosenthal
9548748c26
fix
2021-11-10 12:29:13 -07:00
Jacob Rosenthal
65843c033e
pwm store and deconfigure pins
2021-11-10 11:02:43 -07:00
bors[bot]
5322e293bd
Merge #461
...
461: nrf: add initial nrf5340 support r=Dirbaio a=Dirbaio
Thanks to `@diondokter's` work on DPPI this was quite easy! :)
TODO:
- [ ] Add config option to enable 128mhz
- [ ] Add config option to unlock APPROTECT automatically.
- [ ] Add a way to boot net (config option or API?)
- [ ] Support WDT (there's WDT0, WDT1. Needs some refactor)
- [ ] Support NVMC
- [ ] Support TEMP
Co-authored-by: Dario Nieuwenhuis <dirbaio@dirbaio.net>
2021-11-07 22:58:27 +00:00
Jacob Rosenthal
03f2c593d6
fix slice_in_ram for arbitrary size types
2021-11-03 18:56:02 -07:00
Jacob Rosenthal
64e1426b54
clean up some todo comments around infinite play
2021-11-03 18:46:42 -07:00
Jacob Rosenthal
b726ef1886
make SequenceConfig struct is consistent with other Config structs, that are always non_exhaustive and have a Default
2021-11-03 18:37:54 -07:00
Jacob Rosenthal
d961fd1015
rename to SimplePwm and SequencePwm
2021-11-03 18:25:44 -07:00
Jacob Rosenthal
9a6c2de4ea
fix safety comments
2021-11-03 18:19:43 -07:00
Jacob Rosenthal
511c5cb892
intenset in a noop
2021-11-03 18:16:00 -07:00
Jacob Rosenthal
82695c8f65
make both news configure registers in same order
2021-11-03 18:15:42 -07:00
Jacob Rosenthal
44375b427c
restore example and add set_time_stretch api
2021-11-03 15:29:09 -07:00
Jacob Rosenthal
682274870f
set_duty does indeed loop forever
2021-11-02 11:56:01 -07:00
Jacob Rosenthal
c939edb8d0
rename error enum again
2021-11-02 10:57:01 -07:00
Ulf Lilleengen
205a223af3
Update versions of critical-section and atomic-polyfill
2021-11-02 18:52:03 +01:00
Jacob Rosenthal
4647792ad6
seperate start from pwmseq::new
2021-11-01 20:50:18 -07:00
Jacob Rosenthal
49253152cf
seperate sequence from duty cycle pwm struct
2021-11-01 20:50:14 -07:00
Jacob Rosenthal
74e7f4a227
comments
2021-11-01 13:16:24 -07:00
Jacob Rosenthal
f2cfbe4262
align pwm.set_duty with embedded hal to not be one shot
2021-11-01 13:08:55 -07:00
Jacob Rosenthal
5285179218
generalize new and change pwm example to a servo
2021-11-01 13:08:51 -07:00
Jacob Rosenthal
12b2c5d5f7
better not as a constructor?
2021-11-01 08:54:07 -07:00
Jacob Rosenthal
90be851e4b
reduce complexity of loopmode
2021-11-01 08:45:07 -07:00
Jacob Rosenthal
48673e27cd
fix max sequence length
2021-11-01 01:20:04 -07:00
Jacob Rosenthal
14dc524b84
documentation
2021-11-01 01:20:01 -07:00
Jacob Rosenthal
7b092f463e
clarify infinite
2021-11-01 00:30:42 -07:00
Jacob Rosenthal
72fa1c8482
fix additional to remove stuck light at end
2021-11-01 00:25:08 -07:00
Jacob Rosenthal
d98a1707b9
using write dont need to clear
2021-10-31 23:28:26 -07:00
Jacob Rosenthal
78e382c9aa
stop->sequence_stop
2021-10-31 23:13:49 -07:00
Jacob Rosenthal
96df2fdb43
lost comment
2021-10-30 16:23:45 -07:00
Jacob Rosenthal
763e250dfe
add ability to configure loop count from 1 to infinite
2021-10-30 16:16:10 -07:00
Jacob Rosenthal
ee8f76537b
at least stop on drop
2021-10-30 11:33:28 -07:00
Jacob Rosenthal
6d8198a46a
move psel back out of if
2021-10-30 11:33:10 -07:00
Jacob Rosenthal
1d1d8a848e
simplify api, more interesting example
2021-10-29 16:39:41 -07:00
Jacob Rosenthal
eb0bf1fd7a
simple_playback api from nrf sdk
2021-10-29 16:27:26 -07:00
Dario Nieuwenhuis
663141b4e4
nrf: add initial nrf5340 support
2021-10-28 03:36:25 +02:00
Dario Nieuwenhuis
c995a97f20
nrf91: support running in both S and NS mode.
2021-10-26 17:40:07 +02:00
Dario Nieuwenhuis
36d3eda2f9
ppi: simplify driver creation.
...
Moving `new_*` to the version-specific mod allows doing the correct
register writes right there in `new`, without needing abstractions
like `enable_all`/`disable_all`.
2021-10-26 16:52:51 +02:00
Dion Dokter
c63d747209
Fewer channel traits, more cfg to make the system work
2021-10-26 14:47:34 +02:00
Dion Dokter
6205d6da47
typo
2021-10-26 14:47:33 +02:00
Dion Dokter
a6c84cb915
- Interconnect is now PPI again
...
- Scary pointer math is now contained in the tasks and events
- ppi now sets the tasks and events immediately and the struct is now zero-sized
- StaticToOne is renamed to ZeroToOne
- Used DPPI tasks and events now panic when enabled twice
2021-10-26 14:47:31 +02:00
Dion Dokter
531dfcffb3
fmt
2021-10-26 14:47:13 +02:00
Dion Dokter
11655af034
Another redo using the feedback.
...
PPI is now split up into PPI and DPPI under the name 'interconnect'.
The tasks and events are tracked and reset in the drop function.
2021-10-26 14:47:12 +02:00
Dion Dokter
e6ec81b999
Fixed examples and added defmt format to the new error types
2021-10-26 14:46:39 +02:00
Dion Dokter
4950682a50
Some extra docs and better naming
2021-10-26 14:46:39 +02:00
Dion Dokter
65628e1f15
- Added _ppi and _dppi to distinguish between the new and the old peripheral.
...
- Removed ConfigurableChannel and added capacity numbers to the channels
- Replaced the PPI api with a new one using the DPPI terminology (publish & subscribe)
- Updated all tasks and event registers for DPPI
2021-10-26 14:46:39 +02:00
bors[bot]
7729091b39
Merge #450
...
450: nrf/nvmc: make PAGE_SIZE, FLASH_SIZE public. r=lulf a=Dirbaio
Co-authored-by: Dario Nieuwenhuis <dirbaio@dirbaio.net>
2021-10-25 08:05:19 +00:00
Jacob Rosenthal
32850bba79
nrf: saadc dummy pin for vdd sampling
2021-10-24 09:41:51 -07:00
Dario Nieuwenhuis
e7ab979eb8
nrf/nvmc: make PAGE_SIZE, FLASH_SIZE public.
2021-10-24 18:23:22 +02:00
Dario Nieuwenhuis
e78d226acd
nrf: add NVMC driver.
2021-10-22 02:14:33 +02:00
Ulf Lilleengen
69953a78f1
Use async fn instead of impl Future
2021-10-19 20:48:46 +02:00
Ulf Lilleengen
c777b6aae1
Use AtomicWaker instead of Signal
2021-10-19 15:31:28 +02:00
Ulf Lilleengen
db3b315f94
Cargo fmt
2021-10-19 08:37:19 +02:00
Ulf Lilleengen
2ef4a45fa0
Add support for temperature sensor peripheral
...
* Add TEMP peripheral to all nRF52 chips
* Add async HAL for reading temperature values
* Add example application reading temperature values
2021-10-19 07:18:56 +02:00
huntc
3f31774674
Formatting
2021-10-18 12:29:31 +11:00
huntc
8dcc41c7f0
Optimises the buffer passing for nRF SAADC
...
The buffer will always have been filled and we never explicitly stop the task outside of this code. Thus, we can assume the number of bytes in the slice.
2021-10-18 12:23:13 +11:00
huntc
a94d44a689
Comments corrected
2021-10-18 11:45:23 +11:00
huntc
6dc0ed53ff
Renamed sample rate to what it actually is
2021-10-18 11:42:30 +11:00
huntc
93407ed5e2
Remove unneeded stop
2021-10-18 11:31:06 +11:00
huntc
c7e426655d
Ensure the compiler doesn't reorder things before calling the sampler
2021-10-18 11:28:43 +11:00
huntc
785030df96
Use types to strengthen the buffer dimensioning
2021-10-18 10:26:11 +11:00
huntc
0c317a64f6
As suggested, use the const param to declare the internal sample for one channel only
2021-10-18 10:26:11 +11:00
huntc
cb56f52b99
Removed the Mode enum and factored out into two functions so that we can assert channel limits
2021-10-18 10:26:11 +11:00
huntc
a020b1a404
Combine intenset calls
2021-10-18 10:26:11 +11:00
huntc
b6cacb98db
Compact expression
2021-10-18 10:26:11 +11:00
huntc
e37a10ae99
Hangover - should have set this to internal for a previous PR
2021-10-18 10:26:11 +11:00
huntc
3be274dc2a
We must allow the run handler to mutate state
...
The handler may well need to close over and mutate state
2021-10-18 10:26:11 +11:00
huntc
34e9e85819
We can kick start the internal timer outside of the main loop
2021-10-18 10:26:11 +11:00
huntc
16b6c78332
Removed debugging logs
2021-10-18 10:26:11 +11:00
huntc
103a3305e2
Implements continuous sampling for the nRF SAADC
...
Implements continuous sampling for the nRF SAADC and also renames `OneShot` to `Saadc`. The one-shot behaviour is retained with the `sample` method and a new `run_sampler` method is provided for efficiently (i.e. zero copying) sampler processing. A double buffer is used for continuously sampling, which wlll be swapped once sampling has taken place.
A sample frequency is provided and will set the internal timer of the SAADC when there is just the one channel being sampled. Otherwise, PPI will be used to hook up the TIMER peripheral to drive the sampling task.
2021-10-18 10:26:11 +11:00
Dario Nieuwenhuis
a2e7c24e00
Clippy fixes
2021-10-18 01:05:29 +02:00
Dario Nieuwenhuis
66d70cd146
nrf/uarte: do not use WFE on drop.
...
- It disturbs other stuff that uses WFE/SEV in the system. I ran into
issues with this.
- It needs the irq handler to check for RXTO/TXSTOPPED errors, which makes
it slower.
2021-10-16 03:14:47 +02:00
bors[bot]
05bc4d198e
Merge #423
...
423: nRF9160 support r=Dirbaio a=diondokter
- Created a chip file with all the peripherals, interrupts and peripheral implementations.
- All peripherals now use an alias for the NS (non-secure) version of the nRF9160 version.
- Implementations of peripherals that don't exist are ignored.
- Most PPI functionality has been stubbed out because the nRF91 has the newer DPPI which is not compatible with the current API. (The channels are also set to not configurable, so they are kinda useless now, but in principle the stubs should never be called)
Co-authored-by: Dion Dokter <dion@tweedegolf.com>
2021-10-13 21:11:41 +00:00
Dario Nieuwenhuis
c675fb1036
nrf/saadc: make InputChannel private.
2021-10-13 22:13:30 +02:00
Dario Nieuwenhuis
d8c3365d6a
nrf/saadc: make Input trait sealed.
2021-10-13 22:13:26 +02:00
Dario Nieuwenhuis
0d709fa5c8
nrf/saadc: require unborrow for Input.
...
This allows using borrowed pins in ChannelConfig.
2021-10-13 22:06:09 +02:00
Dion Dokter
c1c704bfc8
- Removed the enable assert from UARTE.
...
- Added nRF9160 to CI.
2021-10-13 15:00:08 +02:00
Dion Dokter
ddcee446c1
Added anomaly workaround from the HAL to improve the UARTE
2021-10-12 13:35:08 +02:00
Dion Dokter
2c2c284482
Undoing unnecessary changes
2021-10-12 11:55:38 +02:00
Dion Dokter
995cd01cbc
ran fmt
2021-10-11 15:31:25 +02:00
Dion Dokter
4643727fea
Made all PPI channels not configurable (even though they are) so they can't use unimplemented features
2021-10-11 15:12:40 +02:00
Dion Dokter
a8407c8aba
Merge remote-tracking branch 'upstream/master'
2021-10-11 10:59:34 +02:00
Dion Dokter
20674f7126
Initial support for nrf9160
2021-10-11 10:39:38 +02:00
Dario Nieuwenhuis
14c3260d88
nrf/saadc: move chip-specific mappings to chips/
2021-10-11 01:36:31 +02:00
Dario Nieuwenhuis
cf13dd7df8
nrf/ppi: nrf52805 only has 10 configurable channels.
2021-10-11 01:20:51 +02:00
Dario Nieuwenhuis
6e7abba9ff
nrf: rename Cargo feature references from "51" to "nrf51".
...
Note: the feature doesn't actually exist, references are there just in case
nrf51xx is supported in the future.
2021-10-11 01:09:57 +02:00
Dario Nieuwenhuis
668364da9c
nrf/saadc: nrf52805 only has 2 channels
2021-10-11 00:55:31 +02:00
Dario Nieuwenhuis
0b26ab7bbc
nrf/saadc: nrf52820 doesn't have it.
2021-10-11 00:55:17 +02:00
huntc
8c9e50b378
Conflates the negative and positive types as they are the same, and renames pin to input as they can be more than pins
2021-10-11 09:38:35 +11:00
huntc
b043778f75
Removed the NotConnected as it isn't used.
2021-10-11 09:08:58 +11:00
huntc
25d6a2cd13
No use case understood for NotConnected, so hiding it for now
2021-10-11 08:56:53 +11:00
huntc
617a976e96
No need for unwrap
2021-10-11 08:54:24 +11:00
huntc
5f5470a320
Need to borrow the pins for the lifetime of the config, and subsequently the one shot.
2021-10-11 08:52:45 +11:00
huntc
cef6158c31
Extend SAADC one shot support
...
One-shot mode now permits the sampling of differential pins, and the sampling of multiple pins simultaneously.
A new ChannelConfig structure has been introduced so that multiple channels can be configured individually. Further, the `sample` method now accepts a buffer into which samples are written.
Along the way, I've reset some default configuration to align with Nordic's settings in their nrfx saadc driver. Specifically, the channel gain defaults to 6 (from 4) and the time defaults to 10us (from 20us).
2021-10-09 11:25:18 +11:00
Dario Nieuwenhuis
0e05ba688d
nrf/saadc: remove Sample trait.
2021-10-07 02:10:22 +02:00
Ulf Lilleengen
99a94f1d50
Update version of critical-section
2021-09-13 17:05:17 +02:00
Ulf Lilleengen
e24528051b
Add WASM support for executor
...
* Adds an executor for WASM runtimes based on wasm_bindgen.
* Add time driver based on JS time handling.
* Add example that can run in browser locally.
* Update to critical-section version that supports 'std' flag
2021-09-13 16:42:39 +02:00
Dario Nieuwenhuis
ead987245d
embassy: Refactor module structure to remove kitchen-sink util
.
2021-09-11 02:35:35 +02:00
Dario Nieuwenhuis
f2623e7e9b
Update lots of deps
2021-09-11 01:35:23 +02:00
Dario Nieuwenhuis
de016e8456
Remove trait_alias, allow(incomplete_features).
...
trait_alias seems unused. no idea why it's there.
2021-09-03 17:00:58 +02:00
Dario Nieuwenhuis
d0c8749399
Merge pull request #382 from fnafnio/typestate_nrf_timer
...
Typestate nrf timer
2021-09-02 13:39:55 +02:00
f_punk
34c66fa78d
removed type aliases
...
NotAwaitable as default generic param
added awaitable_timer example
2021-09-02 12:02:31 +02:00
Dario Nieuwenhuis
a81b963561
nrf/saadc: don't use wake_on_interrupt.
2021-09-01 23:54:26 +02:00
f_punk
1cef7134d4
moved CC::wait to awaitable typestate
2021-09-01 16:20:32 +02:00
f_punk
a0c40562ea
added typestate to nrf-Timer
...
useful for hooking up the PPI to an Event without needing interrupt
tested with buffered_uart example on nRF52840-DK
2021-09-01 16:16:56 +02:00
Dario Nieuwenhuis
7c0990ad1e
time: allow storing state inside the driver struct.
2021-08-25 21:06:27 +02:00
Richard Dodd
ed1ed5225f
Expose EASY_DMA_SIZE.
2021-08-22 00:23:03 +01:00
Dario Nieuwenhuis
3457bb9f05
nrf: make gpiote and time-driver optional via cargo features.
2021-08-20 15:42:42 +02:00
Dario Nieuwenhuis
17659e2e44
nrf/wdt: add handle steal
2021-08-20 14:23:24 +02:00
Dario Nieuwenhuis
fe355af4f0
nrf: update to cortex-m-rt 0.7
2021-08-19 17:11:17 +02:00
Dario Nieuwenhuis
d3aeb45fb3
Update cortex-m-rt to v0.7 for stm32, rp.
2021-08-19 00:56:11 +02:00
Dario Nieuwenhuis
066abfe4c6
nrf/time: allow configuring the rtc irq prio
2021-08-18 22:13:02 +02:00
Dario Nieuwenhuis
2540a960e5
nrf: add WDT driver
2021-08-07 14:26:28 +02:00
Dario Nieuwenhuis
452f7e0c2c
nrf: update PACs to 0.10
2021-08-07 12:41:12 +02:00
Dario Nieuwenhuis
05e50e1f4a
time_driver: use regular fn ptr -> raw ptr casts
2021-08-05 19:19:47 +02:00
Dario Nieuwenhuis
0ea6a2d890
time: replace dyn clock/alarm with a global Driver trait
2021-08-05 19:14:09 +02:00
Dario Nieuwenhuis
07d4b196f7
Update nightly, remove removed features.
2021-08-04 19:48:14 +02:00
Dario Nieuwenhuis
3f28bb6c77
common: Initialize PeripheralMutex state with closure to ensure it's done in-place.
2021-08-02 20:13:41 +02:00
Dario Nieuwenhuis
af87031d62
hal-common: remove Pin in PeripheralMutex
2021-08-02 19:55:04 +02:00
Dario Nieuwenhuis
7bfb763e09
Rename embassy-extras to embassy-hal-common
2021-07-29 13:44:51 +02:00
Dario Nieuwenhuis
c8a48d726a
Merge pull request #277 from Liamolucko/fix-peripheral-ub
...
extras: Fix UB in `Peripheral`
2021-07-29 13:08:30 +02:00
Liam Murphy
d5ba35424d
Replace PeripheralStateUnchecked
with register_interrupt_unchecked
2021-07-29 15:11:26 +10:00
Liam Murphy
079526559f
Remove critical sections from PeripheralMutex
interrupt handler by checking the interrupt's priority on startup.
...
Since `PeripheralMutex` is the only way to safely maintain state across interrupts, and it no longer allows setting the interrupt's priority, the priority changing isn't a concern.
This also prevents other causes of UB due to the interrupt being exposed during `with`, and allowing enabling the interrupt and setting its context to a bogus pointer.
2021-07-27 17:28:52 +10:00
Liam Murphy
1b7ad7080e
Add Send/Sync
bounds to PeripheralState
2021-07-24 12:53:57 +10:00
Bob McWhirter
58edefff6e
Formatting.
2021-07-23 13:22:39 -04:00
Bob McWhirter
d5ed5c3ef3
Split up the nRF impls for SPI traits.
2021-07-23 13:22:39 -04:00
Dario Nieuwenhuis
f916fe5476
all hals: reexport PAC if unstable-pac
feature is set.
2021-07-14 22:19:04 +02:00
Dario Nieuwenhuis
35a76c364a
embassy/time: make optional via Cargo feature
2021-07-12 03:45:48 +02:00
Liam Murphy
744e2cbb8a
extras: Fix UB in Peripheral
...
`Peripheral` assumed that interrupts can't be preempted,
when they can be preempted by higher priority interrupts.
So I put the interrupt handler inside a critical section,
and also added checks for whether the state had been dropped
before the critical section was entered.
I also added a `'static` bound to `PeripheralState`,
since `Pin` only guarantees that the memory it directly references
will not be invalidated.
It doesn't guarantee that memory its pointee references also won't be invalidated.
There were already some implementations of `PeripheralState`
that weren't `'static`, though,
so I added an unsafe `PeripheralStateUnchecked` trait
and forwarded the `unsafe` to the constructors of the implementors.
2021-07-05 17:42:43 +10:00
Dario Nieuwenhuis
7ebd4e3aa9
nrf/gpio: fix unused warning on chips without ports
2021-07-05 02:44:16 +02:00
Dario Nieuwenhuis
e55c89f890
Merge pull request #262 from Liamolucko/nrf-rng
...
Add an nRF RNG driver
2021-07-01 01:55:55 +02:00
Liam Murphy
99339e940e
fix: check if new_ptr == end
, not the old pointer
2021-06-30 16:04:34 +10:00
Liam Murphy
53b95588df
Use atomics to share state instead of a RefCell
2021-06-30 15:55:52 +10:00
Liam Murphy
89fdad3a6b
Don't wake the future for every byte in fill_bytes
2021-06-30 12:34:57 +10:00
Liam Murphy
ae0219de6f
Move initialisation inside of future
2021-06-30 09:45:49 +10:00
Liam Murphy
8a4ab29819
Add an nRF RNG driver
...
Resolves #187
Like the stm32 driver, this has both a non-blocking and blocking API, and implements `rand_core::RngCore` for the blocking API.
2021-06-29 17:26:16 +10:00
Liam Murphy
c0ef40d6e9
Correctly unset bits
2021-06-29 15:12:42 +10:00
Liam Murphy
e6d0dba5ca
Write bits directly to intenset/clr + shorts
2021-06-29 14:37:37 +10:00
Liam Murphy
87ca902e44
Handle differences between PACs
2021-06-29 13:04:05 +10:00
Liam Murphy
0c0597f775
Don't include extended timer support on chips without it
2021-06-29 12:07:10 +10:00
Liam Murphy
94e13ef053
Fix Cc::event_compare
2021-06-29 11:39:50 +10:00
Liam Murphy
e5a5031f20
Get rid of the TODO about variant names, stop the timer before setting BITMODE and set a default frequency.
2021-06-29 11:29:32 +10:00
Liam Murphy
e7addf094b
Fix Cc::wait
never resolving and refactor some APIs
...
I think the interrupt was getting immediately re-triggered as soon as the handler exited, so I disabled the interrupt in the handler.
2021-06-29 10:33:41 +10:00
Liam Murphy
02781ed744
Add an nRF Timer driver
...
Resolves #189
2021-06-26 17:58:36 +10:00
Dario Nieuwenhuis
76ae9e0e7c
nrf: use released nrf52805-pac, nrf52820-pac
2021-06-15 22:25:37 +02:00
Jacob Rosenthal
e9bd8428e3
embassy-nrf: twim derive defmt
2021-06-07 19:09:03 -07:00
Dario Nieuwenhuis
d1eeef5864
nrf/buffered_uarte: Fix crash when calling set_baudrate as the very first thing.
2021-06-08 00:32:14 +02:00
Dario Nieuwenhuis
3be49d3e79
fmt: Add dunmy use to avoid "unused variable" errors when no log is enabled.
2021-06-07 03:21:37 +02:00
Dario Nieuwenhuis
ef1ebefec0
fmt: use absolute paths
2021-06-07 03:15:05 +02:00
Dario Nieuwenhuis
e7dc5c0939
fmt: make all macros macro_rules
so scoping is consistent.
2021-06-07 00:16:39 +02:00
Folkert
749633ddf2
fix errors
2021-06-05 12:02:17 +02:00
Folkert
0c0bf6e4db
extract the polled-on function
2021-06-05 11:59:58 +02:00
Folkert
28c0023c9a
add distinct read and write functions
2021-06-05 11:48:00 +02:00
Folkert
d0dd0f007a
changes after review
2021-06-05 11:37:11 +02:00
Folkert
3f74c557ed
skip 'in ram' check for mutable slice in fullduplex
2021-06-05 11:34:50 +02:00
Folkert
857ac3386b
nrf async twim
2021-06-04 17:31:35 +02:00
Folkert
990d83d424
match on mode
2021-06-03 11:38:25 +02:00
Dario Nieuwenhuis
3bd36dce76
nrf/qspi: wait MORE for DPM enter.
2021-05-27 00:42:29 +02:00
Dario Nieuwenhuis
de703eb605
nrf/qspi: proper lowpower drop, supporting DPM.
2021-05-26 23:26:07 +02:00
Dario Nieuwenhuis
42abeca493
nrf/spim: disable and deconfigure pins on drop.
2021-05-26 20:11:23 +02:00
Dario Nieuwenhuis
39c420733f
nrf/uarte: deconfigure pins on drop
2021-05-26 20:11:23 +02:00
Dario Nieuwenhuis
8dfb6dff86
nrf/twim: make pullup configurable, do not enable it by default.
2021-05-26 20:11:23 +02:00
Dario Nieuwenhuis
b449f6de9d
nrf/twim: deconfigure pins on drop
2021-05-26 18:23:10 +02:00
Dario Nieuwenhuis
55c3ba2a5f
nrf/saadc: do not use dyn
2021-05-22 15:42:14 +02:00
Ulf Lilleengen
13524080d3
Avoid using full GAT
2021-05-22 13:23:09 +02:00
Ulf Lilleengen
f6cac6944c
Makes it possible to use the ADC with different analog pins
2021-05-21 13:12:27 +02:00
Dario Nieuwenhuis
105c8504b6
Mark Unborrow as unsafe to implement
2021-05-19 23:29:33 +02:00
Dario Nieuwenhuis
e3ab02c7e3
nrf/saadc: remove Pin
2021-05-19 20:22:15 +02:00
Dario Nieuwenhuis
58723a8e76
Merge pull request #185 from embassy-rs/nrf-improvement
...
nrf improvements
2021-05-17 22:48:36 +02:00
Dario Nieuwenhuis
32fc17f0fd
nrf/gpiote: Allow choosing IRQ priority.
2021-05-17 21:27:27 +02:00
Rukai
3e83acc1cb
Fix unused field warnings
2021-05-17 20:23:04 +10:00
Rukai
149ddf2f29
Fix warnings
2021-05-17 19:48:58 +10:00
Dario Nieuwenhuis
f7858631d8
stm32: fix build, add ci
2021-05-17 03:16:58 +02:00
Dario Nieuwenhuis
a5ad79927e
nrf: add Unborrow<Target = Self>
bound to all instance traits
2021-05-17 01:01:31 +02:00
Dario Nieuwenhuis
8394603ea6
nrf/pwm: add enable/disable
2021-05-17 00:57:37 +02:00
Dario Nieuwenhuis
88f664b434
nrf/pwm: set initial value to Low, according to the PS
2021-05-17 00:57:37 +02:00
Dario Nieuwenhuis
f9bcf6df6b
nrf: add PWM
2021-05-17 00:57:37 +02:00
Dario Nieuwenhuis
0310e4d458
Add init
fn. Initializes hw and returns Peripherals.
2021-05-17 00:57:37 +02:00
Dario Nieuwenhuis
97b01f1c47
nrf/gpiote: initialize automatically
2021-05-17 00:57:20 +02:00
Dario Nieuwenhuis
92be72e0e3
Add #[interrupt]
macro to register static interrupts.
2021-05-17 00:57:20 +02:00
Dario Nieuwenhuis
eb4571dc4c
nrf: add blocking TWIM
2021-05-17 00:57:20 +02:00
Dario Nieuwenhuis
bd9589d0ce
nrf: add support for nrf52805, nrf52811, nrf52820
2021-05-17 00:57:20 +02:00
Ulf Lilleengen
3b86e85770
Bump version of critical-section to 0.2.1
2021-05-13 18:17:50 +02:00
Dario Nieuwenhuis
e0809ab0fb
Switch to use PrioritX enums.
2021-05-11 01:34:24 +02:00
Dario Nieuwenhuis
7fa0e57172
Use critical_section
crate
2021-05-11 01:15:30 +02:00
Ulf Lilleengen
0a3c236510
Improve comment
2021-05-10 23:06:25 +02:00
Ulf Lilleengen
e9eb3ce6c1
Disable PPI trigger during normal read
2021-05-10 23:06:25 +02:00
Ulf Lilleengen
687dda106f
Read rx amount outside of poll_fn
2021-05-10 23:06:25 +02:00
Ulf Lilleengen
5afe01617a
Use rxdrdy as trigger for timer
2021-05-10 23:06:25 +02:00
Ulf Lilleengen
dda338cedb
Add implementation of ReadUntilIdle for nRF UART
...
Add type UarteWithIdle that implements Read, Write and ReadUntilIdle
traits. The type uses a timer + 2 PPI channels internally, triggered on
RTXSTARTED event.
2021-05-10 23:06:25 +02:00
Dario Nieuwenhuis
76f737bb0e
Merge pull request #158 from derekdreery/blocking_spim
...
Implement the blocking hal api for SPIM.
2021-05-05 22:52:36 +02:00
Richard Dodd
212e83aa22
Make changes to Write
as well as Transfer
2021-05-05 19:18:57 +01:00
Richard Dodd
9d427a1ba4
Address issues in PR
...
Also add some documentation.
2021-05-05 18:33:45 +01:00
Richard Dodd
9de12a0a7a
Address issues in PR.
2021-05-05 18:25:14 +01:00
Richard Dodd
1ad18aa09a
Implement the blocking hal api for SPIM.
2021-05-05 14:50:28 +01:00
Richard Dodd
0b3ccca69b
Add a pin variant that can change between disconnected/input/output.
...
I'm in no way attached to the name and encourage better suggestions.
2021-05-05 14:46:51 +01:00
Ulf Lilleengen
e2ad5e1395
Add detection of edge transitions for ports
2021-04-16 07:58:24 +02:00
Dario Nieuwenhuis
97ca54fa66
Rename PeripheralBorrow to Unborrow
2021-04-14 19:59:52 +02:00
Dario Nieuwenhuis
5ee87cf25d
Remove Pin from Flash trait
2021-04-14 17:04:40 +02:00
Dario Nieuwenhuis
c15411d1bd
Remove Pin from SPI
2021-04-14 17:04:40 +02:00
Dario Nieuwenhuis
8b1ffb2cb7
Remove Pin from GPIO traits
2021-04-14 17:04:40 +02:00
Dario Nieuwenhuis
59ccc45f28
Remove pin from Uart
2021-04-14 17:04:40 +02:00
Dario Nieuwenhuis
402f7f1886
nrf/gpio: remove DummyPin
2021-04-10 01:48:37 +02:00
Dario Nieuwenhuis
5b74e326e5
nrf/qpsi: make config non_exhaustive
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
b9e709403d
nrf: better macro naming.
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
48cf1f6ebf
nrf/system: add configure
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
3a18373828
nrf/uarte: update BufferedUarte to new APi
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
00e5f30352
nrf/ppi: add AnyConfigurableChannel
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
31b817ed27
nrf/timer: add instance traits
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
aa0341056e
nrf/uarte: deal with hwfc correctly
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
b6496a85d8
nrf/ppi: implement and add example
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
26705ec328
nrf/ppi: add peris and traits
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
646be40ac5
nrf/gpiote: make number() public, change to usize
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
90f599bc2f
nrf/gpiote: update output channel to new API
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
2bd9323f28
nrf/gpiote: update input channel to new API
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
a338841797
extras: add impl_unborrow macro
2021-03-29 00:58:58 +02:00
Richard Dodd
2c248dab56
nrf/spim: make mosi,miso optional
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
5646926cca
nrf/rtc: update to new api
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
3eccddc44d
nrf/uarte: use rxstarted/txstarted events to track whether a wait for stop is necessary on drop.
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
1c9f98e1b6
nrf/gpiote: fix irq race condition
...
The interrupt could fire between checking if sense=disabled and registering the waker,
in which case the future would get stuck.
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
7a41541ab2
nrf/uarte: use Peripheral, wait for stop on drop.
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
0e8bb5dc0b
util: Do not unregister waker on wake in AtomicWaker.
2021-03-29 00:58:58 +02:00
Richard Dodd
53645d9d38
nrf/saadc: initial implementation
2021-03-29 00:58:58 +02:00
Richard Dodd
a08d781442
nrf/gpio: allow borrowed pins.
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
a0511e6caa
nrf/uart: make rts/cts optional.
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
e7e34cb8c2
nrf/gpio: add OptionalPin
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
df42c38492
nrf/uarte: update to new api
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
7b6086d19e
nrf: add unborrow! macro
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
a134fce122
nrf: nicer Peripherals api, add take()
2021-03-29 00:58:57 +02:00
Dario Nieuwenhuis
d5ff1a0ae3
nrf: rename inner peripheral to peri
for consistence
2021-03-29 00:58:57 +02:00
Dario Nieuwenhuis
95218bf8d4
Rename GpioteInput -> PortInput
2021-03-29 00:58:57 +02:00
Dario Nieuwenhuis
c0876187dd
extras: move peripherals from nrf to extras
2021-03-29 00:58:57 +02:00
Dario Nieuwenhuis
ec7309962a
nrf/qspi: update to new api
2021-03-29 00:58:57 +02:00
Dario Nieuwenhuis
16bb6fd6ac
nrf: Specify connected
bit in psel_bits
2021-03-29 00:58:57 +02:00
Dario Nieuwenhuis
f36cbe5e0c
nrf/spim: do not use PeripheralMutex
2021-03-29 00:58:57 +02:00
Dario Nieuwenhuis
15eb46ec71
wip gpiote changels
2021-03-29 00:58:57 +02:00
Dario Nieuwenhuis
ba7b3974bb
nrf/gpiote: update to new gpio
2021-03-29 00:58:57 +02:00
Dario Nieuwenhuis
3d3e770b8d
nrf/gpio: add output drive config.
2021-03-29 00:58:57 +02:00
Dario Nieuwenhuis
fcf6a63b5c
nrf: add owned Peripherals struct, migrate gpio and spim
2021-03-29 00:58:57 +02:00
xoviat
6ee9e012fc
add embassy::main and implement for stm32f4
2021-03-27 17:27:39 -05:00
Dario Nieuwenhuis
456e04c79f
Simplify spim macros
2021-03-18 21:59:35 +01:00
Dario Nieuwenhuis
b57489eb5d
peripheralmutex: separate interrupt registration to own method.
2021-03-18 18:49:10 +01:00
Dario Nieuwenhuis
0cd19a58c3
Remove free() from PeripheralMutex and all nrf drivers.
2021-03-18 18:49:10 +01:00
Dario Nieuwenhuis
f248bb17ad
Allow unused stuff in fmt.rs
2021-03-18 01:42:28 +01:00
Dario Nieuwenhuis
3de2d5c5bd
Implement FullDuplex for nrf spim
2021-03-18 01:27:30 +01:00
Dario Nieuwenhuis
a9076636ac
Do not export fmt macros.
...
This was introduced by accident by me struggling with the weird intra-crate macro importing system...
2021-03-17 22:50:27 +01:00
Dario Nieuwenhuis
6ed1a87138
Update features for latest nightly.
2021-03-17 02:48:16 +01:00
Thales Fragoso
15c3e78408
Move nRF's util into a separate crate
2021-03-07 20:15:40 -03:00
Timo Kröger
28b2365ef3
Update nrf-hal
to v0.12.1
...
Use the `psel_bits()` method to reduce #[cfg] clutter
2021-03-05 09:25:46 +01:00
Dario Nieuwenhuis
d4f2c6cf00
Remove cargo namespaced-features
2021-03-02 21:15:12 +01:00
xoviat
9626aee7db
Move traits to separate crate.
2021-03-02 00:32:23 +01:00
Dario Nieuwenhuis
67a6c4f469
Merge pull request #59 from akiles/interrupt_ext
...
move most interrupt methods to InterruptExt extension trait. Fixes #35
2021-03-01 00:56:20 +01:00
Dario Nieuwenhuis
45355f184a
move most interrupt methods to InterruptExt extension trait. Fixes #35
2021-03-01 00:44:38 +01:00
Dario Nieuwenhuis
a30c705fd7
nrf/spim: support all chips
2021-03-01 00:36:30 +01:00
Dario Nieuwenhuis
255bf1aa6a
nrf: add SPIM
2021-03-01 00:24:06 +01:00
Dario Nieuwenhuis
8a641d1312
Fix warnings.
2021-03-01 00:23:54 +01:00
Dario Nieuwenhuis
7433dc1039
Port qspi to PeripheralMutex
2021-02-28 22:05:37 +01:00
Dario Nieuwenhuis
962fb95ff0
Optimize PeripheralMutex code size
2021-02-28 22:03:45 +01:00
Dario Nieuwenhuis
da91779117
interrupt: Split set_handler context.
...
Since introducing the ctx pointer, the handler is now two words, so setting it can
race with the interrupt firing. On race it's possible for the new handler to be
alled with the old ctx pointer or viceversa.
Rather than documenting this, it's better to split the function in two to make it
obvious to the user that it's not atomic. The user can use a critical section, or
disable/enable the interrupt to avoid races if this is a concern.
2021-02-26 02:04:48 +01:00
Dario Nieuwenhuis
11be9170ec
Cleanup interrupt package naming. Fixes #40
...
The `interrupt` package previously tried to be drop-in compatible with the
`interrupt` package from PACs. THis meant that there was both a PAC-style enum
value `UARTE0` and an embassy-style owned `UARTE0Interrupt` type. This made
things VERY confusing.
This drops compatibility with the PAC, improving the names for embassy interrupts.
2021-02-26 01:55:27 +01:00
Dario Nieuwenhuis
90476ef900
Fix some warnings.
2021-02-26 01:06:58 +01:00
fnafnio
f779ec4928
update defmt and defmt-rtt to 0.2.0
2021-02-24 08:44:23 +01:00
Dario Nieuwenhuis
67c03e1a38
Merge pull request #47 from akiles/simpler-rtc
...
SImplify rtc overflow handling
2021-02-20 01:51:53 +01:00
Dario Nieuwenhuis
91aaea761e
Use Relaxed atomics with fence instead of SeqCst
2021-02-20 01:43:10 +01:00
Dario Nieuwenhuis
03ddc949a0
PeripheralMutex should be Unpin
2021-02-20 00:27:24 +01:00
Dario Nieuwenhuis
406f3b7cbf
rtc: use SeqCst for periods.
2021-02-15 01:23:15 +01:00
Dario Nieuwenhuis
9d5e2d3881
SImplify rtc overflow handling
2021-02-15 01:01:45 +01:00
Dario Nieuwenhuis
7321ddb0b3
Update to cortex-m 0.7
2021-02-14 23:26:50 +01:00
Thales Fragoso
b69f72e055
Get rid of some warnings
2021-02-13 21:41:36 -03:00
Dario Nieuwenhuis
a7797a918d
nrf/gpiote: new api: switch to owned structs, implement WaitForHigh/WaitForLow.
2021-02-04 23:56:17 +01:00
Dario Nieuwenhuis
aeaa34d7a1
Executor API V2.
...
- It's no longer possible to call run() reentrantly from within a task (soundness issue)
- it's now possible to spawn Send tasks across threads (SendSpawner, #37 )
2021-02-02 05:20:41 +01:00
Dario Nieuwenhuis
6963b314a2
nrf/rtc: fix race when setting alarms too close to now.
2021-01-13 03:17:58 +01:00
Dario Nieuwenhuis
5229a1991c
nrf/rtc: use interrupt handler context for instance ptr
2021-01-13 03:17:42 +01:00
Dario Nieuwenhuis
7b94e06306
nrf/buffered_uarte: fix stop not actually waiting for stop
2021-01-11 11:24:34 +01:00
Dario Nieuwenhuis
41160c0d8d
nrf/buffered_uarte: add set_baudrate
2021-01-11 10:40:37 +01:00
Dario Nieuwenhuis
2616467377
nrf/buffered_uarte: stop on drop, add free()
2021-01-11 10:39:59 +01:00
Dario Nieuwenhuis
e18d71dedc
Fix build on nrf52832
2021-01-07 00:50:40 +01:00
Dario Nieuwenhuis
5b10ac9cac
Add PPI+TIMER to buffered_uarte to prevent IRQ storm
2021-01-06 23:36:46 +01:00
Dario Nieuwenhuis
deb3c93892
Simpliify PeripheralMutex a bit.
2021-01-06 22:48:54 +01:00
Dario Nieuwenhuis
77bdb5428e
buffered_uarte naming cleanup
2021-01-06 20:21:03 +01:00
Dario Nieuwenhuis
9bb4c97dc2
Merge pull request #14 from timokroeger/uarte-power-optimization
...
UARTE power optimization and improvements
2021-01-05 22:10:52 +01:00
Dario Nieuwenhuis
607e67f51a
Cleanup BufferedUarte
2021-01-05 21:14:04 +01:00
Dario Nieuwenhuis
3a4dbfa52e
Massicely simplify peripheral abstraction
2021-01-05 01:57:05 +01:00
Timo Kröger
0631623b51
uarte: Low power wait for RX drop
2021-01-04 22:55:40 +01:00
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
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
0ab88ea279
Add Uart trait, implement it for nrf.
2021-01-02 19:59:37 +01:00
Dario Nieuwenhuis
3c7e7220b3
Don't use embedded_dma in nrf uarte.
2021-01-02 19:14:54 +01:00
Dario Nieuwenhuis
4783222f67
Rename WakerStore -> WakerRegistration.
2021-01-01 22:30:11 +01:00
Timo Kröger
6695bf0f21
Low power UART driver
2020-12-30 19:24:12 +01:00
Dario Nieuwenhuis
7dc81faa4e
Declare irqs for each nrf chip
2020-12-29 15:20:42 +01:00
Dario Nieuwenhuis
af5454fbfe
Update drivers to owned irqs.
2020-12-29 01:53:17 +01:00
Dario Nieuwenhuis
4b8d8ba87e
Update RTC for owned irqs
2020-12-29 01:05:28 +01:00
Dario Nieuwenhuis
0750234fbe
WIP owned irqs
2020-12-29 00:05:52 +01:00
Dario Nieuwenhuis
267ec334ac
Rename Uarte -> BufferedUarte
2020-12-28 23:57:50 +01:00
Dario Nieuwenhuis
1aae27270e
Better fmt macros.
2020-12-13 21:17:58 +01:00
Dario Nieuwenhuis
ca2ff632ba
Fix possibly ambiguous macro
2020-12-01 20:00:55 +01:00
Dario Nieuwenhuis
6f76c0ebcc
Add support for log+defmt again, but better.
2020-12-01 17:46:56 +01:00
Dario Nieuwenhuis
78135a81d9
Remove anyfmt
2020-11-27 18:42:59 +01:00
Dario Nieuwenhuis
2e062f5627
gpiote: change port api to directly return futures.
2020-11-09 01:04:34 +01:00
Dario Nieuwenhuis
61b1d4e188
Fix build for nrfs with 32 gpios
2020-11-08 19:05:34 +01:00
Dario Nieuwenhuis
e539cd32ca
Fix logging with anyfmt/log
2020-11-08 19:00:23 +01:00
Dario Nieuwenhuis
fc0fe842ee
Add support for GPIOTE Port event.
2020-11-08 18:59:31 +01:00
Dario Nieuwenhuis
def225b982
gpiote: better naming
2020-11-08 17:38:45 +01:00
Dario Nieuwenhuis
0a3590566d
Fix ambiguous assert
2020-11-01 17:56:29 +01:00
Dario Nieuwenhuis
5e8608c7a5
Make defmt optional with new anyfmt
crate
2020-11-01 17:17:24 +01:00
Dario Nieuwenhuis
0643095695
Fix build with all nrf chip models
2020-10-31 23:03:09 +01:00
Dario Nieuwenhuis
9dea5035b9
Remove unused
2020-10-31 22:36:02 +01:00
Dario Nieuwenhuis
ec4b95579d
gpiote: take owned pin but add function to borrow it.
2020-10-19 21:25:54 +02:00
Dario Nieuwenhuis
33dce24e8a
Add gpiote output channel.
2020-09-29 19:18:52 +02:00
Dario Nieuwenhuis
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
Dario Nieuwenhuis
37d2b440ff
Fix rtc using multiple alarms at the same time.
2020-09-26 00:35:25 +02:00
Dario Nieuwenhuis
19a89b5c14
Add Clock trait
2020-09-25 23:38:42 +02:00
Dario Nieuwenhuis
cf1d604749
Add support for multi alarm to RTC.
2020-09-25 23:25:49 +02:00
Dario Nieuwenhuis
4333105341
Add Executor with timer queue, Timer, Instant, Duration, Alarm.
2020-09-25 03:25:06 +02:00
Dario Nieuwenhuis
05ca563e7d
Add clock::Monotonic trait.
2020-09-24 23:26:24 +02:00
Dario Nieuwenhuis
82e5e3c45f
rtc: Add alarm callback.
2020-09-24 22:41:52 +02:00
Dario Nieuwenhuis
3b39ab07e5
Add 64-bit rtc driver with alarm support.
2020-09-24 19:59:20 +02:00
Dario Nieuwenhuis
4e4241bf90
remove nrf
prefix in features, for consistency with nrf-hal
2020-09-24 19:56:47 +02:00
Dario Nieuwenhuis
f9e2cef7f2
Add GPIOTE async hal.
2020-09-23 00:32:49 +02:00
Dario Nieuwenhuis
9a57deef9b
First commit
2020-09-22 18:03:43 +02:00