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
Dario Nieuwenhuis
ead987245d
embassy: Refactor module structure to remove kitchen-sink util
.
2021-09-11 02:35:35 +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
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
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
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
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