Commit Graph

367 Commits

Author SHA1 Message Date
Scott Mabin
c01317e8f3 Use T::clone_unchecked instead of self to avoid infinite recursion 2023-03-08 09:17:51 -08:00
Jesse Braham
f7830e2750
Reduce duplication, simplify re-exports, and general cleanup/organization (#424)
* Move some linker scripts into `esp-hal-common` and update the build script

* Move `EspDefaultHandler` and `DefaultHandler` definitions into `esp-hal-common`

* Re-export everything from `esp-hal-common`

* Add a couple cfg symbols, cleanup/organize some exports/modules
2023-03-08 06:35:59 -08:00
dimi
3d49ed7294 fix MCPWM typos 2023-03-06 06:46:49 -08:00
Scott Mabin
edfa9c83fd radio impls
- also add blanket impls for &mut Sealed and &mut Peripheral
2023-03-01 08:51:34 -08:00
Jesse Braham
984b7fc042
Refactor chip-specific code into esp_hal_common::soc module (#412)
* Create an `soc` module with a submodule for each chip, move `peripherals` in

* Move the `cpu_control` module into `soc`

* Move the `efuse` module into `soc`

* Refactor type definitions from `gpio` module into `soc`

* Put all embassy-related files in a common directory

* Change visibility of `GpioPin` constructor
2023-02-28 07:49:41 -08:00
bjoernQ
3ae95674e9 Fix spi.dma_write 2023-02-27 09:26:00 -08:00
Jesse Braham
d293d9f162
Add support for the ESP32-C6 (#392)
* Create the `esp32c6-hal` package

* Teach `esp-hal-common` about the ESP32-C6

* Get a number of peripheral drivers building for the ESP32-C6

bckup

initial clocks_ii

* Create the `esp32c6-hal` package

C6: update

* Simplify and fix the linker script

update

* C6: add I2S

* Create the `esp32c6-hal` package

* Teach `esp-hal-common` about the ESP32-C6

* Get a number of peripheral drivers building for the ESP32-C6

bckup

initial clocks_ii

* Create the `esp32c6-hal` package

* C6: update

* Simplify and fix the linker script

* update

* C6: add I2S

* update

* C6 Interrupts

* C6: Update build.rs, linker scripts and initial examples

* C6: RMT

* Fix interrupt handling

* Fix `ClockControl::configure`

* C6: revert to I2S0 instead of just I2S

* C6: rebase and update

* RTC not buildable

* Implement RWDT and SWD disable

* C6: working LEDC

* C6: working RMT

* C6: add aes

* C6: add mcpwm

* C6: add rtc_cntln - not finished

* C6: update and formatting

* C6: add pcnt

* C6: add examples and format

* Remove inline assembly, fix interrupts and linker scripts

* Remove unused features, update cargo config for atomic emu, misc cleanup

* Get ADC building and example "working" (as much as it ever does)

* Remove a bunch of unused constants which were copied from ESP-IDF

* The `mcpwm` example now works correctly

* Get `TWAI` peripheral driver building for C6

* Clean up the `rtc_cntl` module and get all the other HALs building again

* Add the C6 to our CI workflow

* Fix various things that have been missed when rebasing

Still missing a few examples (`clock_monitor`, `embassy_spi`, `ram`)

* C6: Small updates in wdt (#1)

* C6: Update WDT

* C6: Update examples with WDT update

* Update `esp-println` dependency to fix build errors

* Fix formatting issues causing pre-commit hook to fail

* Get some more examples working

* Working `ram` example

* Sync with changes in `main` after rebasing

* Working `embassy_spi` example

* Use a git dependency for the PAC until we publish a release

* Fix I2S for ESP32-C6

* Fix esp32c6 direct boot (#4)

* Add direct boot support for C6

* Fix direct boot for c6

- Actually copy into rtc ram
- remove dummy section that is no longer needed (was just a waste of
  flash space)
- Move RTC stuff before the no load sections

* Update RWDT and refactor RTC (#3)

* C6: Update RWDT and add example, refactor RTC and add not-really-good example

* Update based on review comments, resolve bunch of warnings and run cargo fmt

* Update C6 esp-pacs rev commit

* Fix clocks_ll/esp32c6.rs

* Fix riscv interrupts

* Remove clock_monitor example for now

* RAM example works in direct-boot mode

* Add a TODO for &mut TIMG0 and cargo fmt

* Fix linker script after a bad rebase

* Update CI and Cargo.toml embassy required features

* use riscv32imac-unknown-none-elf target for C6 in CI

* change default target to riscv32imac-unknown-none-elf

* add riscv32imac-unknown-none-elf target to MSRV job

* another cleanup

---------

Co-authored-by: bjoernQ <bjoern.quentin@mobile-j.de>
Co-authored-by: Jesse Braham <jesse@beta7.io>

* Make required changes to include new `RADIO` peripheral

* Use published versions of PAC and `esp-println`

* Use the correct target extensions (`imac`)

* Fix the super watchdog timer, plus a few more examples

* Fix UART clock configuration

* Make sure to sync UART registers when configuring AT cmd detection

* Disable APM in direct-boot mode

* Address a number of review comments

* Fix `SPI` clocks and `rtc_watchdog` example  (#6)

* fix SPI clocks

* run cargo fmt

* Add comment about used default clk src

* Fix rtc_watchdog example in BL mode

* run cargo fmt

* Update rtc_watchdog example that it works in DB mode

* README and example fixes/cleanup

* Add I2C peripheral enable and reset

* Fix `ApbSarAdc` configuration in `system.rs`

---------

Co-authored-by: bjoernQ <bjoern.quentin@mobile-j.de>
Co-authored-by: Juraj Sadel <juraj.sadel@espressif.com>
Co-authored-by: Juraj Sadel <jurajsadel@gmail.com>
Co-authored-by: Scott Mabin <scott@mabez.dev>
2023-02-27 09:15:44 -08:00
Jesse Braham
bfa1bd901e New releases for esp-hal-common and esp32c2-hal packages 2023-02-22 11:19:42 -08:00
C2D
862b8580b7 Fix the SPI alignment fix 2023-02-21 11:44:36 -08:00
Jesse Braham
d3969c3130 New releases for all HAL packages 2023-02-21 07:43:44 -08:00
Scott Mabin
80996e3b6e
Add RADIO peripheral (#397)
* Allow the creation of peripherals _not_ from the pac in the peripherals macro

* Add RADIO peripheral

- Remove DerefMut hack, replace with proper Sealed impls
- Add RADIO peripheral for all chips

* Add RADIO peripheral with split method into each radio feature
2023-02-21 07:08:08 -08:00
bjoernQ
a01ecedb0f Fix hidden alignment requirement (SPI) 2023-02-20 12:53:52 +01:00
RepeatedRoot
912ab3008e
add support for 26mhz esp32 2023-02-16 16:54:26 +10:30
Björn Quentin
4e88e48bbe
Remove unnecessary rt crate dependencies (#391)
* Remove unnecessary `rt` crate dependencies

* Bump versions, update to latest released dependencies
2023-02-10 07:24:12 -08:00
Björn Quentin
ab9aeb2443 AnyPin 2023-02-08 14:31:54 +01:00
bjoernQ
e581f7c212 Fix (I2S) circular DMA 2023-02-08 13:14:36 +01:00
Björn Quentin
7c2da6a4a3
Merge pull request #390 from bjoernQ/bugfix/allow-into_analog-for-InputOnlyAnalog-pins
Allow `into_analog` for all analog capable pins
2023-02-08 13:01:10 +01:00
Scott Mabin
3f7181fece
Async SPI (#385)
* ground work for async dma (gdma only atm)

* Add async DMA (GDMA) - esp32c3/esp32c2

* Add Async SPI impl for esp32c3/c2

* Remove private modules from DMA

* add async spi example for esp32c3

* Switch to assoc wakers instead of a static array

* add support for esp32/esp32s2

* add support for esp32s3

* run fmt

* add c2 example, fix CI

* Remove redundant comments
2023-02-08 11:02:03 +00:00
bjoernQ
08c01355ae Allow into_analog for all analog capable pins 2023-02-08 10:27:46 +01:00
Jesse Braham
75f7394986 Fix the references to the ets_update_cpu_frequency_rom ROM function 2023-01-31 09:13:22 -08:00
Jesse Braham
cf270700e7
Use the new esp-riscv-rt package for RISC-V HALs (#365)
* Update PACs and modify `esp-hal-common` to use new `esp-riscv-rt` package

* Update `esp32c2-hal` and `esp32c3-hal` to use `esp-riscv-rt` as well

* Update all RISC-V examples to use `esp-riscv-rt`

* Update RISC-V trap frame handling according to review feedback
2023-01-27 10:49:38 -08:00
Scott Mabin
0eac22eba1
Async: GPIO (#333)
* Add `is_listening` to `Pin` trait

* Add `Wait` impl for Gpio Input

* Add GPIO wait example for C3

* Ensure correct bank is accessed in interrupt

* Add esp32c2 wait example

* Add esp32s3 wait example

* Add esp32s2 wait example

* Add esp32 wait example

* Run fmt

* Add example to cargo tomls

* Add top level docs for embassy examples

* Mention the higher MSRV for async in the README

---------

Co-authored-by: Jesse Braham <jesse@beta7.io>
2023-01-27 10:44:08 -08:00
Jesse Braham
d6c4e3e43f Update the name of the INTERRUPT peripheral to INTERRUPT_CORE0 2023-01-27 07:06:07 -08:00
Jesse Braham
d03c267084 New releases for all HAL packages 2023-01-26 08:51:24 -08:00
Scott Mabin
573c517235
Allow Debug interrupts in Xtensa critical sections (#360) 2023-01-25 09:54:49 +00:00
mhead
586276fd34 aes accelerator implementation 2023-01-24 10:04:57 -08:00
Scott Mabin
5f933aa7c1
Only set the set_suc_eof flag on the last item (#359)
It was previously hardcoded to true, which meant a DMA suc eof interrupt would fire for every descriptor that was processed
2023-01-24 09:17:24 +01:00
Jesse Braham
832f9ef4d4
Refactor the clock module, provide ROM functions via linker scripts (#353)
* Refactor `clock` and `clocks_ll` into a common module

* Add a ROM function linker script to each HAL and provide some functions

* Use the provided ROM functions instead of transmuting addresses

* Fix CI workflow for ESP32-S2
2023-01-23 07:12:33 -08:00
Björn Quentin
1ec6f98602
Make DMA marker traits available to users (#356)
* Make DMA marker traits available to users

* Fix EH1

* Hint about the descriptor size on the `dma.configure()` function
2023-01-23 14:10:25 +00:00
Jesse Braham
7f8a15ccf5
Refactor rtc_cntl module and add get_reset_reason function (#351)
* Refactor the `rtc` and `rtc_cntl` modules into a common `rtc_cntl` module

* Implement the `get_reset_reason` and add `SocResetReason` enum for each chip
2023-01-19 06:51:22 -08:00
Jesse Braham
d29c4b1dcf
Update a number of dependencies to get RISC-V HALs building again (#350)
* Update `riscv`, `riscv-rt` dependencies, plus PACs for RISC-V chips

* Update `riscv-atomic-emulation-trap` package

* Update the `embassy-executor` dev dependency to a newer version
2023-01-18 14:08:30 -08:00
liebman
ac206af656
pulse counter implementation (#328)
* start of pulse counter implementation

* implement interrupts
implement pcnt for esp32, esp32s2, and esp32s3

* implement pcnt for esp32s2

* fix esp32 PCNT signal names

* update PCNT register/fields for cleaned up PAC

* implement events/get_events (choosing what events interrupt)

* added pcnt example: simple encoder configuration

* restrict pcnt::channel::Channel::new() to super

* PcntPin -> PcntSignal
added range checks for thresholds and limits

* PcntSource is a better name I think

* handle error for PCNT Unit configure() in example

* update pac versions for status register change

* cargo fmt

* cargo fmt (examples)

* PcntSource now only stores the source id.
add a critical section to protect the ctrl & isr_en registers

* cargo fmt
2023-01-17 17:04:22 +00:00
Scott Mabin
9d988b3ec8 Remove the signals from the GPIO structs, instead have a signals struct which can access the signals 2023-01-06 08:22:50 -08:00
Björn Quentin
a0b976d078
Fix GPIO interrupts for pins > 31 (#335)
* Fix GPIO interrupts for pins > 31

* Align InteruptRegister and GpioRegisterAccess
2023-01-06 13:57:09 +01:00
Scott Mabin
f618490dcb
Finish PeripheralRef (#334)
- Remove the mixed pac and generated peripherals, instead all are
  generated.
2023-01-06 11:35:57 +00:00
Jesse Braham
fe6ea5321b Use the latest PACs 2023-01-04 08:56:56 -08:00
dimpolo
ba43157c5a
enable TWAI on ESP32-S3 (#325)
* enable TWAI on ESP32-S3

* add esp32-s3 TWAI example
2023-01-03 10:02:01 -08:00
Alex Bohm
1f6803776c
Initial TWAI Driver Implementation (#192)
* wip: initial implementation of transmission only.

* Moved TWAI to its own directory and added initial reception of packets.

* Added extended id transmit and receive.

* Added maybe better code for making packet filters.

* Fixed bug with ids and improved methods of copying data to the peripheral.

* Added some guards against Bus Off

* Added reception of remote frames.

* Clean up of comments, etc

* Updated TWAI naming and cleaned up example a bit.

* Updated bitselector to include better unpacking methods.

* Add embedded-can and limit initial TWAI implementation to esp32c3.

* Added embedded-can to esp32c3 twai example.

* Switched twai filter to using bytestrings.

Co-authored-by: dimi <dimi.polonski@gmail.com>

* Implemented new() for twai filters.

* Clean up TWAI docs and example.

* Fix filter constructors and add examples.

* pre driver PeripheralRef update.

* PeripheralRef/twai

* Format comments with nightly rustfmt.

* Add gpio PeripheralRef and use volatile for direct register access.

Co-authored-by: dimi <dimi.polonski@gmail.com>
2022-12-22 00:54:06 +00:00
Scott Mabin
452fde2c12
Peripheral ref/gpio (#323)
* Implement Peripheral for all GPIO pins

* Update i2c & i2s to use the new gpio peripherals ref

* gpio pref: usb

* gpio pref: pulse control (RMT)

* gpio pref: spi

* gpio pref: uart

* gpio pref: ledc

* gpio pref: mcpwm

* fixup smartleds to use new pulse controller traits

* dump msrv

* bump rust-version in cargo tomls
2022-12-19 14:40:29 +00:00
Juraj Sadel
4598df6ed6
Peripheral ref/adc (#321)
* PeripheralRef: ADC

* PeripheralRef: DAC
2022-12-15 16:03:38 +01:00
Björn Quentin
4a780bd1f5
PeripheralRef: TIMG (#320) 2022-12-15 14:03:41 +01:00
Björn Quentin
5ebd800d0e
PeripheralRef: RTC (#319) 2022-12-15 11:21:13 +01:00
Björn Quentin
945a0d66c1
PeripheralRef: USB_OTG (#318) 2022-12-15 09:29:01 +01:00
Björn Quentin
a90aa3a2cc
PeripheralRef: DMA (#317) 2022-12-15 08:12:43 +01:00
Scott Mabin
c6a6010443
PeripheralRef: MCPWM (#314) 2022-12-14 16:42:30 +01:00
Björn Quentin
42f6f8ac4a
PeripheralRef for ClockControl (#316) 2022-12-14 15:09:46 +00:00
Juraj Sadel
ca4c573660 PeripheralRef: I2S 2022-12-14 15:09:19 +01:00
Scott Mabin
3a57eb98fe
Completely remove pac references in hal drivers (#309)
* Peripheral ref/sha (#312)

* Add SHA to list of peripherals to be created

* Refactor SHA peripheral to use PeripheralRef

* Update SHA examples to get them building again

* Fix async time drivers

* Fix usb otg

* Fix s3

Co-authored-by: Jesse Braham <jessebraham@users.noreply.github.com>
2022-12-14 13:15:45 +00:00
Jesse Braham
220f812625
Peripheral ref/sha (#312)
* Add SHA to list of peripherals to be created

* Refactor SHA peripheral to use PeripheralRef

* Update SHA examples to get them building again
2022-12-14 12:19:53 +00:00
Juraj Sadel
7817e270c2
PeripheralRef: RMT (#310) 2022-12-14 11:47:50 +00:00
Scott Mabin
a9661e68be
Peripheral ref/rng (#306) (#307)
* Add RNG to list of peripherals to be created

* Refactor RNG driver to use PeripheralRef

Co-authored-by: Jesse Braham <jessebraham@users.noreply.github.com>
2022-12-14 09:34:43 +00:00
Jesse Braham
f2b59538df
Peripheral ref/rng (#306)
* Add RNG to list of peripherals to be created

* Refactor RNG driver to use PeripheralRef
2022-12-14 09:20:01 +00:00
Björn Quentin
39c5a04d05
PeripheralRef for SYSTEM/DPORT (#305) 2022-12-14 08:40:50 +00:00
Sergio Gasquez
0774018df5 revert: ️ impl Peripheral only for USB_DEVICE 2022-12-13 17:19:11 +01:00
Sergio Gasquez
7d4cfa2070 refactor: ♻️ impl Peripheral for USB_DEVICE, USB0, and USB_WARP 2022-12-13 17:17:24 +01:00
Sergio Gasquez
76afaa3692 refactor: ♻️ PeripheralRef usb serial 2022-12-13 17:13:47 +01:00
Jesse Braham
d7babe6ef6
Peripheral ref/i2c (#303)
* Add I2C to list of peripherals to be created

* Refactor I2C driver to use PeripheralRef
2022-12-13 07:06:27 -08:00
Scott Mabin
c7f420199e
Peripheral ref/systimer (#302)
* impl Peripheral for SYSTIMER

* PeripheralRef the Systimer driver
2022-12-13 06:52:51 -08:00
bjoernQ
dc8963c0a8 Support ESP32-C2 with 26MHz Xtal 2022-12-13 05:15:10 -08:00
Scott Mabin
cfe83827cf
PeripheralRef/spi (#299)
* Add missing UART instances

* Add SPI to list of peripherals to be created

* Refactor SPI driver to use PeripheralRef
2022-12-13 00:36:18 -08:00
Scott Mabin
248fb356f8
PeripheralRef init: uart (#272)
* Add the peripheral module plus some helper macros in preparation

* peripheral macro

* Add peripheral generation macro

* Fixes after rebase

* Update the signature of Peripherals::take

* syncronise hello world example

* fmt the entire repo

Co-authored-by: Jesse Braham <jesse@beta7.io>
2022-12-12 14:45:33 +00:00
Jesse Braham
03d94a0ba2 New releases for all HALs 2022-12-12 01:29:49 -08:00
IsaacDynamo
66b757847f Missed some changes 2022-12-10 01:51:14 +01:00
IsaacDynamo
7d985dc36a Added start_duty_without_fade() and update_channel() to set_duty() in order for the new duty-cycle to take effect 2022-12-10 01:06:02 +01:00
IsaacDynamo
2aa26863dd Allow a duty-cycle of 0% 2022-12-09 21:50:51 +01:00
Scott Mabin
0a5947c7f9 Correct Systimer delay implementation
Closes #229
2022-12-09 05:34:53 -08:00
Scott Mabin
0000d46ac5 Embassy init updates:
- Rename timg feature to timg0 to better refect which TG is being used
- Use the time_driver::TimerType in the signature of init to fix #268
- Update examples
- Fix CI features
- Add timg0 cfg to build.rs
2022-12-08 06:36:42 -08:00
Jesse Braham
91f18c882d Add cfg symbols for i2s and mcpwm 2022-12-07 15:38:52 +01:00
bjoernQ
4ab05e8923 Pass trap frame to CPU interrupt handlers (Xtensa) 2022-12-06 02:07:49 -08:00
Josh Weberruss
bc39cdae86 Add Rx and interrupts to UsbSerialJtag
Add non-blocking Write
2022-12-01 22:02:47 +11:00
Björn Quentin
c46719e112
Merge pull request #255 from dimpolo/mcpwm
MCPWM MVP implementation
2022-12-01 08:34:16 +01:00
Jesse Braham
5d48e77d5e
Fix clippy warnings, update READMEs (#284)
* Fix a couple clippy warnings

* Create features for architecture-specific depdendencies

* README updates
2022-11-30 10:13:40 -08:00
Björn Quentin
bc4e180a1a
Merge pull request #280 from bjoernQ/gpio-refactoring
GPIO module refactoring
2022-11-30 08:15:13 +01:00
dimi
0a75d3c64a resolve mcpwm FIXME 2022-11-30 00:55:58 +01:00
dimi
1369943710 resolve TODO 2022-11-30 00:55:39 +01:00
dimi
e1a812bc59 add SAFETY comments 2022-11-30 00:55:39 +01:00
dimi
257664da74 add direction to Timer::set_counter 2022-11-30 00:55:39 +01:00
dimi
ab74fc47fd rename const generics 2022-11-30 00:55:39 +01:00
dimi
f0876952b7 implement Timer::set_counter 2022-11-30 00:55:39 +01:00
dimi
89535a26dd WIP docs 2022-11-30 00:55:39 +01:00
dimi
2d81313475 add PeripheralClockConfig and TimerClockConfig 2022-11-30 00:55:39 +01:00
dimi
4327506bb2 use Clocks.pwm_clock on ESP32 2022-11-30 00:55:38 +01:00
dimi
408243d7e1 improve mcpwm::operator, add PwmPinConfig 2022-11-30 00:55:38 +01:00
dimi
6d2b8a6718 PwmClock changes 2022-11-30 00:55:38 +01:00
dimi
18c7ef7802 WIP MCPWM implementation 2022-11-30 00:55:38 +01:00
dimi
7a51433944 remove i2c::SetupError and make i2c::I2C::new infallible 2022-11-29 14:19:45 +01:00
bjoernQ
878bbc4c0c GPIO module refactoring 2022-11-29 12:03:04 +01:00
Björn Quentin
82e66bc9dc
Merge pull request #276 from IsaacDynamo/pub-signals
Export InputSignal and OutputSignal
2022-11-29 08:15:52 +01:00
C2D
59d02f5f6e
Add SHA accelerator implementation (#257)
* Add untested basic SHA for esp-sX/cX chips

* Fix ptr type inconsistency for S2

* Add ESP32 impl & fix process_buffer latch issue

* Add debug example for SHA accelerator

* Clean up no-op buffer prints

* Test vector parity (on esp32s3)

* Checkpoint for converting to alignment helper

* Finish refactoring & additional parity tests on esp32s3

* Remove core_intrinsics requirement for now

* Fix case where (src.len() % 4) == 3

* Finish sha2 example with performance comparison (12-61x speedup)

* Refactor ESP32 to alignment helper & Clean up example

* Prevent out-of-bounds reads in ESP32 version

* Revert Cargo debug changes

* Remove cargo config.toml

* Clean up example

* Remove common/rust-toolchain & ignore in future

* Might as well use actual size_of const

* Remove SHA512/SHA384 for C2/C3

* Directly import nb::block! to remove unused import warning & fix c2 feature detect

* Remove stray newlines

* Fix esp32c2 having SHA256

* ESP32 also has SHA384

* Remove comments that don't have a purpose

* Clean up example & finish() handling

* Add examples & add ESP32 free()

* Update C2/C3 examples to show accurate algorithm used

* Fix busy check for ESP32

* Remove outdated TODO comment

* Update PAC for ESP3 and (actually) fix busy check

* Refactor ESP32 version to reduce search space

* Add debug printlns to sha example & clean up comments

* Fix ESP32 version, finally

Co-authored-by: ferris <ferris@devdroplets.com>
Co-authored-by: Jesse Braham <jesse@beta7.io>
2022-11-28 14:20:31 -08:00
IsaacDynamo
e1c0ac540e Export InputSignal and OutputSignal 2022-11-26 16:38:02 +01:00
bjoernQ
fbd912a3a5 Finalize I2S RX Implementation 2022-11-24 10:16:08 -08:00
icedrocket
177d278223
Add more trait re-exports to prelude module (#260)
* Add more trait re-exports to prelude module

* Don't expose usb_serial_jtag module

* Add missing system module re-exports
2022-11-23 07:24:47 -08:00
Ryan Butler
8ab01225bd Implemented ability to write bytes in UsbSerialJtag 2022-11-22 10:52:05 -08:00
Jesse Braham
096ff3439d
New releases for all HALs (#265)
* Update all dependencies to their latest versions

* Bump version numbers
2022-11-17 09:13:41 -08:00
bjoernQ
4afa8fda92 Preliminary I2S Implementation 2022-11-17 08:24:43 -08:00
Jesse Braham
d9135350e7 Add more configuration symbols and simplify the build script 2022-11-17 07:29:35 -08:00
Björn Quentin
9b3e644e30
Detangle I2C clock calculation (#263)
* Detangle I2C clock calculation

- fixes ESP32-C2 in release mode
- fixes the MPU6050 init problem

* Converted NOTE to FIXME
2022-11-16 11:31:04 +00:00
Josh Weberruss
5523a7b8b9 Fix UART unlisten calls so they clear the interrupt enable bit instead of setting it 2022-11-13 12:30:13 +11:00
Jesse Braham
86049a53de
Update all PACs (#259) 2022-11-10 09:02:18 -08:00
Scott Mabin
9064177e99
Initial embassy support (#225)
* wip: timg embassy driver

- read_raw on timg renamed to now()
- timg initialized and stored in static for use in the embassy driver
- timg sets alarm value
- untested whether alarms actually trigger

* TIMG timer driver for esp32, esp32s3

- Adds the timg timer block as a time driver for embassy
- Not enabled on the C3 as it only has one timer block, better to use
  systimer
- s2 example added but can't build due to atomic requirements in
  futures-core

* Add S2 atomic support with emulation, fixup embassy support for the S2

* Move executor & static-cell to dev deps. Make eha optional

* Add c2 support, run fmt

* Update to crates.io embassy releases

* Update eha

* update timg time driver to new trait

* Remove exception feature of esp-backtrace and use the user handler for backtracing

* Add async testing workflow

* Update systick example

* Fix S2 examples

* Update xtensa-toolchain

* set rustflags for s2 target

* Disable systick for esp32s2 until we can fix the noted issues

* review improvements

- Fix intr prio array being off by one
- emabssy time prio interrupt set to max prio
- use cfg instead of feature for systick detection

* Update example time delays
2022-11-09 08:04:38 -08:00
Björn Quentin
8bdf11b287
I2C Driver Refactoring (#233)
* I2C Driver Refactoring

* Improve I2C error handling and robustness
2022-11-09 06:34:55 -08:00
dimi
ece70e99a4 Add Mcpwm0 and Mcpwm1 to system::Peripheral 2022-11-07 13:24:17 -08:00
Björn Quentin
da3cbca61e
Merge pull request #251 from dimpolo/outputsignal
add/correct docs for gpio::OutputSignal and add PWM output signal to ESP32-S3
2022-11-07 10:21:58 +01:00
dimi
7df93cb359 add/correct docs for gpio::OutputSignal and add PWM output signal to ESP32-S3 2022-11-07 02:13:53 +01:00
Jesse Braham
ced5941871 Add LEDC support for ESP32-C2 2022-11-04 08:19:53 -07:00
Jesse Braham
251e60c20f Update to newest PACs for C2/C3/S3 and clean up GDMA implementation 2022-11-03 11:17:51 -07:00
Juraj Sadel
f6ba237e76
ADC: Refactor, join S2 and S3 together and C2 and C3 as well (#245)
* ADC: Refactor, join S2 and S3 together and C2 and C3 as well

* S3: Update PAC version
2022-11-02 10:38:03 -07:00
bjoernQ
a876d8d344 Support USB-DEVICE on ESP32-S3 and ESP32-S2 2022-11-02 07:14:50 -07:00
Björn Quentin
fae2f1add3
Merge pull request #244 from bjoernQ/fix-esp32c2-apbclock
ESP32-C2 APB clock is 40MHz, not 80MHz
2022-11-02 13:59:26 +01:00
bjoernQ
ec60c4b5fe ESP32-C2 APB clock is 40MHz, not 80MHz 2022-11-02 13:11:00 +01:00
icedrocket
e28a7d1ba0 Fix typo 2022-11-01 20:32:55 +09:00
bjoernQ
ad1970c6b7 Offer DMA channel 3 and 4 on ESP32-S3 2022-10-31 07:09:15 -07:00
dimi
2f3b6c843c remove lifetime annotations from cpu_control::start_app_core 2022-10-31 14:46:31 +01:00
dimi
5cf6079054 cpu_control::start_app_core improvements
* add `Send` bound
* move `#[must_use]` to `AppCoreGuard`
* remove redundant `-> ()`
* document guard behaviour
2022-10-31 13:28:56 +01:00
Björn Quentin
8ec46df825
Merge pull request #234 from jessebraham/feature/dma
Add DMA support for ESP32-C2 and ESP32-S3
2022-10-28 16:15:28 +02:00
Jesse Braham
4f18e2c846 Update the priority enum and add missing channels for ESP32-S3 2022-10-28 06:51:10 -07:00
JCF
a7d561ec26 Added method to change bus frequency to Spi struct 2022-10-28 11:15:39 +02:00
Jesse Braham
c642c79297 Add DMA support for ESP32-S3 2022-10-27 12:08:23 -07:00
Jesse Braham
e2df98da52 Add DMA support for ESP32-C2 2022-10-27 11:22:30 -07:00
bjoernQ
3e4710b822 Add DMA support for ESP32-S2 2022-10-25 07:38:45 -07:00
Gustavo Henrique Nihei
3ff5da5aa7 esp-hal-common: Remove unnecessary unsafe block
Signed-off-by: Gustavo Henrique Nihei <gustavo.nihei@espressif.com>
2022-10-24 09:52:46 -03:00
playfulFence
4fb77df6ce Fix lifetime error 2022-10-24 13:09:06 +02:00
Björn Quentin
9744d12484
SPI-DMA for ESP32 (#216)
* SPI-DMA for ESP32

* MSRV Fix
2022-10-20 09:12:31 -07:00
Juraj Sadel
d850b76246 ESP32S3: Add ADC support 2022-10-20 17:44:08 +02:00
Jesse Braham
00cba4485c Update esp-hal-common to use the newest PACs 2022-10-19 07:00:20 -07:00
bjoernQ
9cb24bb79f Basic DMA for ESP32-C3 2022-10-13 10:14:51 -07:00
Jesse Braham
f13c47f28f
Merge pull request #211 from jessebraham/feature/esp32c2
Add support for the ESP32-C2/ESP8684
2022-10-13 08:52:44 -07:00
Jesse Braham
908fb48e6c Remove some unused constants 2022-10-13 07:34:02 -07:00
Jesse Braham
e2b2d55bf8 Fix a bunch of cfg gates, use published version of PAC 2022-10-12 12:25:15 -07:00
Jesse Braham
2880ca4ca0 More corrections to clocks 2022-10-12 09:28:34 -07:00
Jesse Braham
d3f92db2ec Get the ADC example building, clean up some cfg gates
Note that this example still doesn't seem to be working correctly
2022-10-12 09:28:34 -07:00
Jesse Braham
312c41cee2 All examples building, many still have issues at runtime 2022-10-12 09:28:34 -07:00
Andreas Hartmann
159fe3b29b common/spi: Use constructor in add_device
to create a new `SpiBusDevice` instead of directly instantiating the
struct. `SpiBusDevice::new` takes care of setting up the CS line to be a
default-high output, too, which the raw struct doesn't.
2022-10-12 08:52:02 +02:00
Jesse Braham
76f803ae63 Make some corrections to clock/RTC_CNTL (still not working) 2022-10-11 10:12:42 -07:00
Jesse Braham
05fd5a64de Update dependencies, fix some errors after rebase, add RTC_CNTL 2022-10-11 10:12:42 -07:00
Jesse Braham
3019b78d6a Fix clock and GPIO drivers, add analog GPIO pins 2022-10-11 10:11:36 -07:00
Jesse Braham
f5f475923f Add startup code and build/linker scripts, add ADC, eFuse, GPIO, and TIMG 2022-10-11 10:11:36 -07:00
Jesse Braham
455965d471 Create the esp32c2-hal package and add it to the workspace
Add a feature for the ESP32-C2 to`esp-hal-common` and update some `cfg`s


Organize the `esp-hal-common` imports and exports and update to include the ESP32-C2
2022-10-11 08:03:43 -07:00
Andreas Hartmann
2b98932028 common/spi: Implement hardware CS
Removes a lot of generic arguments and hard-codes the `SpiBusController`
and `SpiBusDevice` to work with the `Spi<T>` defined in the HAL instead.
This allows us to access the `cs_signal()` trait function from `T:
Instance`, which we need to connect/disconnect the CS I/O as
appropriate.
2022-10-11 16:06:45 +02:00
Björn Quentin
af745ac7b0
Fix ESP32-C3 interrupt/exception handling (#207)
* Fix ESP32-C3 interrupt/exception handling

* Use riscv-atomic-emulation-trap 0.2.0
2022-10-05 14:15:17 +01:00
Jesse Braham
5054681ba3 Update to newest embedded-hal alpha and add embedded-hal-nb 2022-09-29 16:07:49 +02:00
Jesse Braham
7889a992d7 Add cfg symbols for SYSTIMER and USB_SERIAL_JTAG peripherals 2022-09-20 16:41:39 +02:00
Juraj Sadel
0f9fdb7c15 RMT: Shouldn't be possible to assign pins multiple times into channel 2022-09-20 12:33:17 +02:00
Jesse Braham
5ca771a12e
Inject configuration symbols in build script, simplify cfg gating (#187)
* Update the build script to inject a configuration value for the enabled chip

* Update all cfg gates to use the new symbols instead of the chip features

* Inject architecture and core count symbols as well, update as needed

* Organize the imports and exports of `esp-hal-common`
2022-09-14 07:46:23 -07:00
Jesse Braham
ee7e9bd0a1 Bump version numbers and update dependencies 2022-09-13 21:01:08 +02:00
Jesse Braham
252fa27c2e Change target_arch cfgs to chip features
This hopefully will allow the documentation's build to succeed on docs.rs, as it uses the `x86_64-unknown-linux-gnu` target by default
2022-09-13 19:46:41 +02:00
Juraj Sadel
3ebfbc44c3 ADC: Add compile time check for using unconfigured PIN, add AdcPin wrapper around PIN 2022-09-13 08:41:04 +02:00
Juraj Sadel
f11a23dddb Make it impossible to create multiple instances of LEDC 2022-09-06 11:37:05 +02:00
bjoernQ
b9f38aae7c Pin version of paste to fix build errors 2022-08-31 11:28:42 +02:00
har7an
8b9fd8b7a0
embedded-hal SpiDevice on all esp32 variants (#106)
* WIP: common/spi: Implement `SpiDevice`

to get shared access to an SPI bus directly via the HAL.

* WIP: common/spi: add SpiBusDevice::new

to create instances via a function call.

* esp32/examples: Add example for spi device trait

* common/spi: Finish "SpiDevice" implementation

for esp32. Abandons the approach of having the user pass in some generic
mutex in favor of creating the Mutex as part of the API so it isn't
exposed to the user in the first place.

* common/spi: Add more thorough docs

* esp32/examples: Fix example for eh1 "SpiDevice"

* common/spi: Implement `SpiDevice` for xtensa arch

and move the code into a submodule that is fenced with conditional
compilation directives.

* esp32/examples: Update spi device example

to the changed APIs for the timers and clocks, and add more transmission
tests to the example code.

* common/spi: Create devices from buscontroller

directly, instead of offering only the `new` method.

* common/spi: Finish `SpiBusDevice` trait

from embedded-hal 1.0.0-alpha.8.

* esp32: Update `SpiBusDevice` usage example.

* common/spi: Fix mutex types for xtensa32 esp

because the esp32/esp32s3 can use `SpinLockMutex`, whereas the esp32s2
has access only to `CriticalSectionMutex`.

* common/spi: Implement `SpiBusDevice` for riscv

based esp32c3.

* general: Add examples for spi device loopback

to all esp variants.

* common: Use esp_backtrace in spi_eh1_device examples

* common/spi: Update module documentation.

* common/spi: Use `critical_section::Mutex`

to unify locking across all esp variants.

* esp32c3-hal: Fix spi device example

* esp32c3/examples: Fix typo in used spi pins

Co-authored-by: Jesse Braham <jessebraham@users.noreply.github.com>

Co-authored-by: Jesse Braham <jessebraham@users.noreply.github.com>
2022-08-30 06:55:53 -07:00