Commit graph

298 commits

Author SHA1 Message Date
Jonathan Pallant (Ferrous Systems) e9694bbb91 Use released 0.2.0 PAC. 2021-11-25 14:45:28 +00:00
Jonathan Pallant ed860ed106
Merge pull request #208 from VictorKoenders/spinlock
Added spinlocks
2021-11-25 14:44:46 +00:00
Jonathan Pallant 968e49aa03
Merge pull request #198 from VictorKoenders/alarm
Added timer alarms
2021-11-25 14:33:06 +00:00
Jonathan Pallant 292a6f13c8
Merge pull request #205 from jannic/eh-1_alpha6
Update eh1_0_alpha feature for embedded-hal 1.0.0-alpha.6
2021-11-25 14:30:02 +00:00
Victor Koenders 111b355da2
Fixed error in spinlock's documentation 2021-11-24 11:59:43 +01:00
Victor Koenders 88fbc38f8b
Added spinlocks 2021-11-24 08:19:42 +01:00
Victor Koenders a9d96f352e
Removed incorret unsafe impl Sync, added interrupt_free around obtaining an alarm 2021-11-24 07:41:04 +01:00
Victor Koenders 1fd04d3384
Made the alarmX take exclusive ownership of Timer on functions that could cause UB when run in parallel 2021-11-24 07:41:03 +01:00
Victor Koenders 97a5bd355c
Added AlarmX::disable_interrupt, made AlarmX::schedule able to return an error if the time is too short 2021-11-24 07:41:00 +01:00
Victor Koenders 119c5a94e8
Added timer alarms 2021-11-24 07:40:56 +01:00
Damian J Pound c7c5fb00d8 pio: Fix unsound Send clippy warning 2021-11-21 22:32:22 -06:00
Jan Niehusmann 3ab84702b7 Update comments 2021-11-21 13:16:03 +00:00
Jan Niehusmann 9a018ac359 Update uart implementation of embedded-hal 1.x to 1.0.0-alpha.6 2021-11-19 22:46:55 +00:00
Jan Niehusmann 1294f556e9 Update SPI implementation of embedded-hal 1.x to 1.0.0-alpha.6 2021-11-19 22:46:55 +00:00
Jonathan Pallant 68602fa6e1 0.1.6 had breaking changes, so I yanked it and made 0.2.0. 2021-11-19 22:30:43 +00:00
Jonathan Pallant 84b903b12a PAC 0.1.6 is now released. 2021-11-19 22:22:29 +00:00
Jan Niehusmann 0f3bb8e88c Update I2C implementation of embedded-hal 1.x to 1.0.0-alpha.6 2021-11-19 21:41:45 +00:00
Jan Niehusmann 76aff05cec Update dependency on embedded-hal 1.x to 1.0.0-alpha.6 2021-11-19 21:41:00 +00:00
Jonathan Pallant 038f792e21 Apply clippy's suggestions. 2021-11-19 17:38:32 +00:00
Jonathan Pallant 68014469dd Add SIO FIFO interface. 2021-11-19 17:19:04 +00:00
Jonathan Pallant 23bafb6980 Point at PAC release branch. 2021-11-19 12:22:52 +00:00
Jonathan Pallant 0a082c0f03 Changes to work with upcoming PAC 0.16. 2021-11-19 12:16:50 +00:00
Jan Niehusmann aafa3dd587 Keep old function as a deprecated alternative, for now
Mainly so i2c-pio-rs doesn't fail, as it is used by examples.
Should be removed once i2c-pio-rs is updated.
2021-11-16 22:27:08 +00:00
Jan Niehusmann 3756cd2fb5 Rename set_instruction to exec_instruction 2021-11-16 22:27:08 +00:00
Jonathan Pallant b9497d9b82 Resolve review comments.
Adds same functions to RX FIFO.
2021-11-16 21:45:52 +00:00
Jonathan Pallant 5c1bcd2604 Adds some useful functions when using PIO FIFOs with DMA. 2021-11-16 19:18:32 +00:00
contradict f9b3d8341d
Document properties needed for PIO Send safety (#190)
Start to address #186 (Safety requirement must be verbosely advertised to not be overlooked in future changes).

#177 (Mark PIO StateMachine, Rx and Tx as Send) added the Send trait to StateMachine, Tx and Rx, That documentation was expanded as suggested.

PIO, UninitStateMachine, Interrupt were marked Send before #177, added some documentation to those as well.
2021-11-10 21:55:37 +11:00
Wilfried Chauveau 620d5f0e0c
Use the PIOn peripherals in pin functions rather than creating an enum. (#193)
This allows the `FuncionPio?` to be inferred from the `pac::PIO?` used.
This change shall be transparent for anyone using the `FunctionPio?` aliases.
2021-11-10 21:27:46 +11:00
Wilfried Chauveau 990d964a93
Implement peripheral support for i2c and an advanced example (#162)
* Implement peripheral support for i2c and an advanced example for the pico board.

* Simplify i2c peripheral bootstrap and add a "free" function to allow switching modes.

* Set dependency to futures & nostd_async to specific version/revision.

* move enum & struct to the start of the file

* Add a bit of documentation to the pico_i2c_controller_peripheral demo.

* Migrate to pico_i2c_controller_peripheral to embassy & simplify the peripheral support

nostd_async is broken since last stable roll out.
The pico_i2c_controller_peripheral is being migrated to use embassy's executor.
The Controller Async API is now aligned with embassy's traits to facilitate integration.

The peripheral no longer require async to run and now appears as an event iterator.

Embassy's support relies on unstable features (generic_associated_types and type_alias_impl_traits)
and is therefore gated behind the `embassy-traits` feature flag.

* make futures & embassy optional for the pico board too

* Pin embassy to a specific rev.

* Impl embassy_traits::i2c::WriteIter & enable unlimited transfer size on i2c

* Applies comment suggestion from @9names for the advanced i2c example.

Co-authored-by: 9names <60134748+9names@users.noreply.github.com>

* use `I2C block` instead of `IP`.

* Fix formatting (unnecessary space at end of line)

* Enhance explanation for why `rd_req()`  is not cleared in `Iterator::next`'s
implementation.

Co-authored-by: 9names <60134748+9names@users.noreply.github.com>
2021-11-08 23:23:28 +11:00
Benno 6d917f498e
Change UART raw read return type and fix full read (#189)
* UART read_raw returns bytes read

This also fixed broken read_full_blocking code.

* chang documentation to reflect return value change
2021-11-01 10:24:24 +11:00
contradict fb69308058 Add methods to set and clear the PWM Interrupt force register. 2021-10-30 20:40:33 +11:00
Jan Niehusmann b1dc9aec8c Fix UART init code
Set uartlcr_h before enabling the UART.
Writing uartlcr_h while the UART is enabled is forbidden by the datasheet.

Details can be found here:
https://developer.arm.com/documentation/ddi0183/g/programmers-model/register-descriptions/line-control-register--uartlcr-h?lang=en
(As referenced from the Datasheet)
2021-10-30 10:19:13 +11:00
Jan Niehusmann 73431a847b
fix UART rx (#187) 2021-10-30 10:16:43 +11:00
contradict fe1e55b8c0
Mark PIO StateMachine, Rx and Tx as Send (#177)
* Mark PIO StateMachine, Rx and Tx as Send

* Improve comment grammar.

Co-authored-by: Wilfried Chauveau <wilfried.chauveau@ithinuel.me>
2021-10-27 21:34:08 +11:00
Wilfried Chauveau 73e2c6921f Make ReadableOutput public to match the visibility of other Type-level variant of PinMode. 2021-10-27 21:32:38 +11:00
Jan Niehusmann 9f55608f92 Correct limit for PIOBuilder::out_pins count argument
This value is written to the PINCTRL register field
OUT_COUNT, which accoding to the data sheet has a valid range
of 0-32.

Fixes #181
2021-10-23 13:34:05 +00:00
contradict 11aaf9be79
API to enable/disable interrupts for each PWM channel. (#175)
* API to enable/disable interrupts for each PWM channel.

* Better name for overflow check.
2021-10-23 22:47:08 +11:00
contradict 97079489ef Mark Timer as sync
Since all accesses are read-only there is no synchronizing to be done.
2021-10-23 00:03:30 +11:00
Jan Niehusmann 4c4d12e23c minor docs improvements in pio.rs 2021-10-22 23:52:14 +11:00
Jan Niehusmann bac6714f09
Use volatile register access for gpio interrupts (#170)
* Use volatile register access for gpio interrupts

* Provide functions for atomic register updates

* Use atomic register access functions in pio.rs

* Improve doc comments

* Limit visibility of atomic register access functions

Also remove write_xor for now, as it's not yet used anywhere
2021-10-22 23:30:30 +11:00
Wilfried Chauveau 0eb65ee99b
Add PIO features required for PIO as I2C support (#179)
* Implements methods to allow presetting the pin state & direction

Enabling those methods allows to save a few valuable instructions
in the PIO's memory.

* Use IntoIterator rather than Iterator.

* Use proper types instead of bool to be more idiomatic.

* Change set_pindirs_with_mask to a more idiomatic rust approach.

* Update pio_proc_blink with new set_pindirs_with_iter

* Force reset on startup to guaranty consistency with type-states.

* Expose more accessors to allow more advanced driver to be implemented.

* Add the ability to restart the state machine from its wrap point.

This method also clears the ISR/OSR to give the state machine a clean
restart.

* Add a comment about the impact of autopull on OUT & PULL instructions

* Fix broken internal doc reference & add an important note on Tx<SM>::has_stalled

* rename block methods to register_block.

This change is made to avoid confusion with "block" as a verb.
2021-10-22 22:09:10 +11:00
Wilfried Chauveau 2eb7923ebe
Implements methods to allow presetting the pin state & direction (#167)
* Implements methods to allow presetting the pin state & direction

Enabling those methods allows to save a few valuable instructions
in the PIO's memory.

* Update pio_proc_blink with new set_pindirs
2021-10-22 21:13:22 +11:00
Jonathan Pallant (42 Technology) e48323c983 Ah, missed one after the rebase. 2021-10-18 10:58:38 +01:00
Jonathan Pallant (42 Technology) 8e66ddcfb1 Switch to new rp2040-boot2 crate. 2021-10-18 10:53:17 +01:00
Rich Lane c8bb2e43c7 spi: support zero post-divide
This allows you to use a 62.5 MHz SPI baud rate assuming the default 125
MHz peripheral clock. It would previously crash due to a division by
zero.
2021-10-17 21:38:53 +11:00
Jonathan Pallant (42 Technology) 6a4a4fd247 Formatting. 2021-10-11 16:41:51 +01:00
Jonathan Pallant (42 Technology) 74ea262f65 Cleaning up the comment summaries. 2021-10-11 16:40:23 +01:00
Jonathan Pallant (42 Technology) 2423e42eb9 Clean up comments. 2021-10-11 16:39:12 +01:00
Jonathan Pallant (42 Technology) 5c55af76d2 Typo 2021-10-11 16:37:50 +01:00
Jonathan Pallant (42 Technology) e1afb70bd2 Moved float and double functions into modules.
Makes the docs cleaner.
2021-10-11 16:37:16 +01:00
Jonathan Pallant (42 Technology) ae66ac4cb6 Tweak doc comments. 2021-10-11 16:22:35 +01:00
Jonathan Pallant (42 Technology) 64207a62e5 Add comment to calc_delta function as it's non-obvious. 2021-10-11 16:22:11 +01:00
Jonathan Pallant (42 Technology) f56369e1c7 Add example which uses the ROM functions 2021-10-11 15:45:44 +01:00
Jonathan Pallant (42 Technology) 7a05b8f3a7 Fix the ROM function table code.
The floating point table lookup was incorrect.
2021-10-11 15:45:34 +01:00
9names a0740a5ac3
Merge pull request #147 from Lichtso/feature/gpio_interrupt
Add GPIO interrupt configuration functions
2021-10-07 09:52:21 +11:00
9names f92c9900cf
Merge pull request #152 from anall/feature/rom_data_unsafe_reapply
split rom_data into safe and unsafe functions (reapply due to inadvertent revert)
2021-10-07 09:40:57 +11:00
Jan Niehusmann e63f1f6dee Make pio-proc a dev-dependency
It's only used in an example, so it doesn't need to be a regular
dependency.
2021-10-07 09:39:08 +11:00
Andrea Nall dab619d627 split rom_data into safe and unsafe functions
This was originally applied in 71a7057b76
and got inadvertently reverted as part of e3be4f8025
2021-10-02 11:22:32 -05:00
Jan Niehusmann ad68c9d696
Fix i2c write read (#146)
* i2c write_read: don't continue with read if write aborted

* i2c write_read: use correct length of read buffer
2021-10-02 17:43:05 +10:00
9names ede25a4f15
Merge pull request #143 from mgottschlag/pio-rework
Rework the PIO API
2021-10-02 16:41:38 +10:00
Alexander Meißner 90470b6ff3
Adds reset for timer, otherwise it would not run. (#136) 2021-10-02 15:41:04 +10:00
Jan Niehusmann 2b6de3a3c9
implement embedded-hal 1.0.0-alpha.5 (#131)
* implement embedded-hal 1.0.0-alpha.5

* Depend on specific alpha version of embedded-hal.

* enable feature eh1_0_alpha for CI check
2021-10-02 15:36:40 +10:00
Mathias Gottschlag 4db944ad4e pio: Fix clippy warnings and examples in doc comments. 2021-10-01 18:41:10 +02:00
Alexander Meißner dbd4c7dfea Implements interrupts for GPIO pins. 2021-10-01 14:32:24 +02:00
Mathias Gottschlag 2fc42e07f2 pio: Rename read_rx/write_tx to read/write. 2021-10-01 08:47:16 +02:00
Mathias Gottschlag 207f5aebdb pio: Split RX and TX FIFO functions into different types.
We need separate types for any blocking or DMA operations - otherwise, it
would not be possible to perform both RX and TX transfers at the same time.
2021-09-30 09:07:15 +02:00
Mathias Gottschlag dbe7f48699 pio: Identify state machines via generic parameters.
Eventually, the read and write FIFOs need to be split into separate
objects for DMA. To be able to safely rejoin them only when they belong to
the same state machine, the state machine index needs to be encoded into
the type.
2021-09-29 21:42:05 +02:00
Mathias Gottschlag 64fa8441d8 pio: Fix bugs spotted in the review. 2021-09-29 20:55:24 +02:00
Mathias Gottschlag 684f483859 pio: Improve documentation and add an example that uses pio_proc::pio!(). 2021-09-28 21:48:05 +02:00
Mathias Gottschlag 515eac5553 pio: Differentiate between uninitialized/stopped/running state machines.
Some operations must only be performed in a specific state. For example,
pin directions must not be changed while the state machine is running, as
the operation modifies PINCTRL. The new API makes wrong usage a lot harder.

Also, the code now supports uninitializing state machines to free
instruction space or to select a different function.
2021-09-28 21:15:28 +02:00
Mathias Gottschlag 4d97d9fe75 pio: Enable code sharing between SMs via objects for installed programs.
Multiple state machines may want to execute the same program (e.g., two
state machines are used to implement two I2C buses), in which code sharing
saves space.
2021-09-28 20:27:40 +02:00
Mathias Gottschlag 959f714fb9 pio: Fix marking used instruction space. 2021-09-28 20:27:40 +02:00
Mathias Gottschlag 2ff9ae156f pio: Fix some doc comments. 2021-09-28 20:27:40 +02:00
Mathias Gottschlag e5a7c325b0 pio: Split PIO into multiple objects that can be moved around separately.
One PIO block often implements multiple functions that are used in
different parts of the codebase. Previously, that would be impossible, as
PIO contained all StateMachine instances.

Now, StateMachine instances use atomic operations whenever accessing shared
registers, so they can be used concurrently.
2021-09-28 20:27:22 +02:00
Jonathan Pallant da89888ccb
Merge pull request #137 from 42-technology-ltd/ensure-hal-examples-non-board-specific
Working on README and examples
2021-09-28 10:46:42 +01:00
Jonathan Pallant (42 Technology) fc0075a381 Addressing review comments. 2021-09-28 09:26:31 +01:00
Jonathan Pallant (42 Technology) 0beedde69b Ugh. Thanks, rustfmt. 2021-09-27 19:03:07 +01:00
Jonathan Pallant (42 Technology) d251627e47 Make trait comments more consistent. 2021-09-27 19:01:46 +01:00
Jonathan Pallant (42 Technology) 8876159687 Ah, rustfmt. 2021-09-27 18:58:16 +01:00
Jonathan Pallant (42 Technology) c04f439020 Polish the watchdog example. 2021-09-27 18:57:19 +01:00
Jonathan Pallant (42 Technology) b005128a73 Oh, make sure uart example actually builds. 2021-09-27 18:57:10 +01:00
Jonathan Pallant (42 Technology) 7e03772687 Polish the UART example. 2021-09-27 18:52:13 +01:00
Jonathan Pallant (42 Technology) b894ab9ce7 Cleaning up. 2021-09-27 18:43:01 +01:00
Jonathan Pallant (42 Technology) 225eabb449 Use peripheral clock to describe the clock signal given to peripherals. 2021-09-27 18:42:36 +01:00
Jonathan Pallant (42 Technology) 17afa25d2a Polish PWM blink example. 2021-09-27 18:37:29 +01:00
Jonathan Pallant (42 Technology) b370bb5270 Polish SPI example. 2021-09-27 18:37:20 +01:00
Jonathan Pallant (42 Technology) 0336458344 Update LCD example. 2021-09-27 18:14:54 +01:00
Jonathan Pallant (42 Technology) b7acc7c373 Polish I2C example. 2021-09-27 17:30:29 +01:00
Jonathan Pallant (42 Technology) 193972bb9f Polish GPIO example. 2021-09-27 17:30:18 +01:00
Jonathan Pallant (42 Technology) d5a07bc398 Remove hard coded clock speed from blink example. 2021-09-27 17:30:06 +01:00
Jonathan Pallant (42 Technology) 07c183a636 Remove hard coded clock speed from ADC example. 2021-09-27 17:29:50 +01:00
Jonathan Pallant 77787e760d
Merge pull request #133 from jannic/pio-blinky-example
Add a simple example for PIO.
2021-09-27 15:35:26 +01:00
Jonathan Pallant (42 Technology) b0bcbe68d8 Update blinky example. 2021-09-27 14:47:25 +01:00
Jonathan Pallant (42 Technology) ed27dc9949 Update ADC example. 2021-09-27 14:42:19 +01:00
Jonathan Pallant (42 Technology) 0fa6bf9e0e README updates.
Trying to clarify what is HAL specific and what is RP specific.
2021-09-27 14:32:11 +01:00
Jan Niehusmann fbe2a8834f Update comment on top of pio_blink.rs 2021-09-27 12:36:23 +00:00
Jan Niehusmann c93ea0b97c Update comments in examples/pio_blink.rs 2021-09-26 13:51:48 +00:00
Jan Niehusmann 105dcfddd7
Implement bus keep inputs, as documented in C SDK (#134)
When both pull-up and pull-down are enabled, the RP2040 enters a
so-called "bus keep" function, which uses a weak pull to tue current
high/low state of the GPIO.

See for example
https://raspberrypi.github.io/pico-sdk-doxygen/group__hardware__gpio.html#gab6bf9552da32b3dd0a5d0db45d8374fc
2021-09-26 23:38:07 +10:00
Rob Young d93c4fc4c8
Implement RngCore for RingOscillator (#135)
Implement rand_core::RngCore for RingOscillator from the get_random_bit
function. This is not suitable for security purposes so
rand_core::CryptoRng has not been implemented.
2021-09-26 20:51:01 +10:00
Jan Niehusmann b79f859d72 Add a simple example for PIO. 2021-09-25 13:22:13 +00:00