From 23227df215904f9e2fdd0e719cc70dd173740bcd Mon Sep 17 00:00:00 2001 From: shimun Date: Mon, 9 Jan 2023 16:27:30 +0100 Subject: [PATCH] init --- .gitattributes | 1 + .gitignore | 1 + Cargo.lock | 737 +++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 20 ++ flake.nix | 59 ++++ src/main.rs | 88 ++++++ 6 files changed, 906 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 flake.nix create mode 100644 src/main.rs diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..858736a --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +target/riscv32imc-unknown-none-elf/release/esp32c3 filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..a1e84ec --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,737 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + +[[package]] +name = "atomic-polyfill" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ff7eb3f316534d83a8a2c3d1674ace8a5a71198eba31e2e2b597833f699b28" +dependencies = [ + "critical-section", +] + +[[package]] +name = "atomic-polyfill" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d299f547288d6db8d5c3a2916f7b2f66134b15b8c1ac1c4357dd3b8752af7bb2" +dependencies = [ + "critical-section", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bare-metal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fe8f5a8a398345e52358e18ff07cc17a568fbca5c6f73873d3a62056309603" + +[[package]] +name = "bit_field" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb6dd1c2376d2e096796e234a70e17e94cc2d5d54ff8ce42b28cef1d0d359a4" + +[[package]] +name = "bytemuck" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaa3a8d9a1ca92e282c96a32d6511b695d7d994d1d102ba85d279f9b2756947f" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "critical-section" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6548a0ad5d2549e111e1f6a11a6c2e2d00ce6a3dafe22948d67c2b443f775e52" + +[[package]] +name = "darling" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +dependencies = [ + "darling_core 0.13.4", + "darling_macro 0.13.4", +] + +[[package]] +name = "darling" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa" +dependencies = [ + "darling_core 0.14.2", + "darling_macro 0.14.2", +] + +[[package]] +name = "darling_core" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_core" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +dependencies = [ + "darling_core 0.13.4", + "quote", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e" +dependencies = [ + "darling_core 0.14.2", + "quote", + "syn", +] + +[[package]] +name = "embassy-executor" +version = "0.1.0" +source = "git+https://github.com/embassy-rs/embassy/?rev=eed34f9#eed34f945ccd5c4ef2af77230042dd4954e981ac" +dependencies = [ + "atomic-polyfill 1.0.1", + "cfg-if", + "critical-section", + "embassy-macros", + "embassy-time 0.1.0 (git+https://github.com/embassy-rs/embassy/?rev=eed34f9)", + "futures-util", + "static_cell", +] + +[[package]] +name = "embassy-macros" +version = "0.1.0" +source = "git+https://github.com/embassy-rs/embassy/?rev=eed34f9#eed34f945ccd5c4ef2af77230042dd4954e981ac" +dependencies = [ + "darling 0.13.4", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "embassy-sync" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6ea38e6ea5d0361d087680f786c19a1454becb06174790280534a3be05ed839" +dependencies = [ + "atomic-polyfill 1.0.1", + "cfg-if", + "critical-section", + "embedded-io", + "futures-util", + "heapless", +] + +[[package]] +name = "embassy-sync" +version = "0.1.0" +source = "git+https://github.com/embassy-rs/embassy/?rev=eed34f9#eed34f945ccd5c4ef2af77230042dd4954e981ac" +dependencies = [ + "atomic-polyfill 1.0.1", + "cfg-if", + "critical-section", + "embedded-io", + "futures-util", + "heapless", +] + +[[package]] +name = "embassy-time" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81c0c57d163dba8ff55a874966d9a1ae755859028308833923a1edeec1a6c215" +dependencies = [ + "atomic-polyfill 1.0.1", + "cfg-if", + "critical-section", + "embassy-sync 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "embedded-hal 0.2.7", + "embedded-hal-async", + "futures-util", + "heapless", +] + +[[package]] +name = "embassy-time" +version = "0.1.0" +source = "git+https://github.com/embassy-rs/embassy/?rev=eed34f9#eed34f945ccd5c4ef2af77230042dd4954e981ac" +dependencies = [ + "atomic-polyfill 1.0.1", + "cfg-if", + "critical-section", + "embassy-sync 0.1.0 (git+https://github.com/embassy-rs/embassy/?rev=eed34f9)", + "embedded-hal 0.2.7", + "futures-util", + "heapless", +] + +[[package]] +name = "embedded-dma" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "994f7e5b5cb23521c22304927195f236813053eb9c065dd2226a32ba64695446" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "embedded-hal" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff" +dependencies = [ + "nb 0.1.3", + "void", +] + +[[package]] +name = "embedded-hal" +version = "1.0.0-alpha.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "129b101ddfee640565f7c07b301a31d95aa21e5acef21a491c307139f5fa4c91" + +[[package]] +name = "embedded-hal-async" +version = "0.1.0-alpha.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c913f631bd08c253b85fdf0077061c64763d70e27803b04da5a49c5fb2a65057" +dependencies = [ + "embedded-hal 1.0.0-alpha.9", +] + +[[package]] +name = "embedded-hal-nb" +version = "1.0.0-alpha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e0760ec0a3bf76859d5e33f39542af103f157d5b2ecfb00ace56dd461472e3a" +dependencies = [ + "embedded-hal 1.0.0-alpha.9", + "nb 1.0.0", +] + +[[package]] +name = "embedded-io" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33dfba9e6c113f2fd8537c943780a7345945e66c86972e356b1152e19481bcf5" + +[[package]] +name = "esp-backtrace" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1834d20d58dc6baaf063924cb3ffa0b7f6388a593bae310c9f228c4bd47f0dde" +dependencies = [ + "esp-println", + "riscv 0.10.0", +] + +[[package]] +name = "esp-hal-common" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "007db8d84050d19fec367bece124cccbdf6837ff0ea8e1a4fc04599148ab5ea1" +dependencies = [ + "cfg-if", + "critical-section", + "embassy-sync 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "embassy-time 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "embedded-dma", + "embedded-hal 0.2.7", + "embedded-hal 1.0.0-alpha.9", + "embedded-hal-async", + "embedded-hal-nb", + "esp-hal-procmacros", + "esp32c3 0.8.1", + "fugit", + "nb 1.0.0", + "paste", + "riscv 0.10.0", + "riscv-atomic-emulation-trap", + "smart-leds-trait", + "void", +] + +[[package]] +name = "esp-hal-procmacros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd1fb5018ef2c57daadf84e9bbff1c9e48c04958d32bc1469f781a96ec82e8e" +dependencies = [ + "darling 0.14.2", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "esp-println" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adcfe5d532cf2029b11996cab6b4af948f41c24b131c76422115634711549aaa" + +[[package]] +name = "esp32c3" +version = "0.1.0" +dependencies = [ + "critical-section", + "embassy-executor", + "embassy-time 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "embedded-hal 0.2.7", + "esp-backtrace", + "esp-hal-common", + "esp-println", + "esp32c3-hal", + "riscv 0.10.0", + "riscv-rt", + "static_cell", +] + +[[package]] +name = "esp32c3" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677b6cc003e2f7384c5bd02286e5ee04d9ac0adc875abff6c3316175af20eaa8" +dependencies = [ + "critical-section", + "riscv 0.10.0", + "riscv-rt", + "vcell", +] + +[[package]] +name = "esp32c3-hal" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dccecada61692e6d3fb8349a630c1fc8cfac144cb3cb52763624db8ec1373111" +dependencies = [ + "cfg-if", + "embassy-time 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "embedded-hal 0.2.7", + "embedded-hal-async", + "esp-hal-common", + "r0", + "riscv 0.10.0", + "riscv-rt", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "fugit" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab17bb279def6720d058cb6c052249938e7f99260ab534879281a95367a87e5" +dependencies = [ + "gcd", +] + +[[package]] +name = "futures-core" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" + +[[package]] +name = "futures-task" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" + +[[package]] +name = "futures-util" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", +] + +[[package]] +name = "gcd" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4b1b088ad0a967aa29540456b82fc8903f854775d33f71e9709c4efb3dfbfd2" + +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + +[[package]] +name = "heapless" +version = "0.7.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db04bc24a18b9ea980628ecf00e6c0264f3c1426dac36c00cb49b6fbad8b0743" +dependencies = [ + "atomic-polyfill 0.1.11", + "hash32", + "rustc_version", + "spin", + "stable_deref_trait", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lock_api" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "nb" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f" +dependencies = [ + "nb 1.0.0", +] + +[[package]] +name = "nb" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "546c37ac5d9e56f55e73b677106873d9d9f5190605e41a856503623648488cae" + +[[package]] +name = "paste" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r0" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd7a31eed1591dcbc95d92ad7161908e72f4677f8fabf2a32ca49b4237cbf211" + +[[package]] +name = "regex" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" + +[[package]] +name = "rgb" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3603b7d71ca82644f79b5a06d1220e9a58ede60bd32255f698cb1af8838b8db3" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "riscv" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73fc4bc7113424814738fe79755a5764e392b3d4d1bc757e6aa6f61cede32095" +dependencies = [ + "bare-metal", + "bit_field", + "embedded-hal 0.2.7", +] + +[[package]] +name = "riscv" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "169fa82a2be03db484b13863f6a88f7f154a027a332c471cc164775671e81a5a" +dependencies = [ + "bit_field", + "critical-section", + "embedded-hal 0.2.7", +] + +[[package]] +name = "riscv-atomic-emulation-trap" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8149334f67011146f603c58b63f5b370ae71eb9700988fde89a6d5a6cd5987ea" +dependencies = [ + "riscv 0.10.0", + "riscv-rt", + "riscv-target", +] + +[[package]] +name = "riscv-rt" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7818495e5392d1ebb158a6f65da26c23d7f0fe93f7d6affa6395bf5b77035eae" +dependencies = [ + "r0", + "riscv 0.9.0", + "riscv-rt-macros", + "riscv-target", +] + +[[package]] +name = "riscv-rt-macros" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38509d7b17c2f604ceab3e5ff8ac97bb8cd2f544688c512be75c715edaf4daf" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "riscv-target" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88aa938cda42a0cf62a20cfe8d139ff1af20c2e681212b5b34adb5a58333f222" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "semver" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" + +[[package]] +name = "smart-leds-trait" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebf6d833fa93f16a1c1874e62c2aebe8567e5bdd436d59bf543ed258b6f7a8e3" +dependencies = [ + "rgb", +] + +[[package]] +name = "spin" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6002a767bff9e83f8eeecf883ecb8011875a21ae8da43bffb817a57e78cc09" +dependencies = [ + "lock_api", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_cell" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4c37c250d21f53fa7165e76e5401d7e6539c211a8d2cf449e3962956a5cc2ce" +dependencies = [ + "atomic-polyfill 1.0.1", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "syn" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" + +[[package]] +name = "vcell" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..4b1c36b --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "esp32c3" +version = "0.1.0" +edition = "2021" +authors = [ "Marvin Drescher " ] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +critical-section = "1.1.1" +embassy-executor = { package = "embassy-executor", git = "https://github.com/embassy-rs/embassy/", rev = "eed34f9", features = ["nightly", "integrated-timers"] } +embassy-time = { version = "0.1.0", features = ["nightly"] } +embedded-hal = "0.2.7" +esp-backtrace = { version = "0.4.0", features = ["esp32c3", "exception-handler", "panic-handler"] } +esp-hal-common = { version = "0.4.0", features = ["esp32c3"] } +esp-println = { version = "0.3.1", features = ["esp32c3"] } +esp32c3-hal = { version = "0.4.0", features = ["embassy", "embassy-time", "embassy-time-timg0", "smartled", "embedded-hal-async", "async", "direct-boot"] } +riscv = "0.10.0" +riscv-rt = "0.10.0" +static_cell = "1.0.0" diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..9fda7e0 --- /dev/null +++ b/flake.nix @@ -0,0 +1,59 @@ +{ + inputs = { + fenix.url = "github:nix-community/fenix"; + flake-utils.url = "github:numtide/flake-utils"; + naersk.url = "github:nix-community/naersk"; + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + }; + + outputs = { self, fenix, flake-utils, naersk, nixpkgs }: + flake-utils.lib.eachDefaultSystem (system: + let + pkgs = (import nixpkgs) { + inherit system; + }; + + fenix' = fenix.packages.${system}; + + toolchain = with fenix'; + combine [ + minimal.rustc + minimal.cargo + targets.riscv32imc-unknown-none-elf.latest.rust-std # ESP32-C3 RISC-V + targets.riscv32imac-unknown-none-elf.latest.rust-std # ESP32-C3 RISC-V \w atomic emulation + ]; + + naersk' = naersk.lib.${system}.override { + cargo = toolchain; + rustc = toolchain; + }; + + in rec { + defaultPackage = packages.riscv32-embedded; + + packages.riscv32-embedded = naersk'.buildPackage rec { + src = self; + + depsBuildBuild = with pkgs; [ + pkgsCross.riscv32-embedded.stdenv.cc + ]; + + doCheck = true; + RUSTFLAGS="-C link-arg=-Tlinkall.x -C force-frame-pointers"; + # CARGO_UNSTABLE_BUILD_STD = "true"; + "CARGO_TARGET_${pkgs.lib.toUpper CARGO_BUILD_TARGET}_LINKER" = "riscv32-none-elf-gcc"; + "CARGO_TARGET_${pkgs.lib.toUpper CARGO_BUILD_TARGET}_RUNNER" = "espflash --monitor"; + CARGO_BUILD_TARGET = "riscv32imc-unknown-none-elf"; + shellHook = '' + + ''; + }; + + devShell = with pkgs; mkShell ({ + RUST_SRC_PATH = "${fenix'.complete.rust-src}/lib/rustlib/src/rust/library"; + nativeBuildInputs = [ toolchain cargo-espmonitor cargo-espflash ] ++ defaultPackage.depsBuildBuild; + } // (lib.filterAttrs (name: _: lib.hasPrefix "CARGO_" name || lib.hasPrefix "RUST" name) defaultPackage)); + } + ); +} + diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..3fb5ff8 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,88 @@ +#![no_std] +#![no_main] +#![feature(type_alias_impl_trait)] + +use embassy_executor::Executor; +use embassy_time::{Duration, Timer}; +use esp32c3_hal::{clock::ClockControl, prelude::*, timer::TimerGroup, Rtc, embassy}; +use esp_backtrace as _; +use esp_hal_common::{Bank0GpioRegisterAccess, GpioPin, InputOutputAnalogPinType, Unknown, IO, pac::Peripherals}; +use static_cell::StaticCell; + +#[embassy_executor::task] +async fn run1() { + loop { + esp_println::println!("Hello world from embassy using esp-hal-async!"); + Timer::after(Duration::from_millis(1_000)).await; + esp_println::println!("Just woke up"); + } +} + +#[embassy_executor::task] +async fn run2() { + loop { + esp_println::println!("Bing!"); + Timer::after(Duration::from_millis(5_000)).await; + } +} + +#[embassy_executor::task] +async fn run_io(io: IO) { + let led = io.pins.gpio1; + blink_led(led).await; +} + +async fn blink_led( + pin: GpioPin, +) { + let mut led = pin.into_push_pull_output(); + let mut on = true; + loop { + if on { + esp_println::println!("On!"); + } else { + esp_println::println!("Off!"); + } + Timer::after(Duration::from_millis(5_00)).await; + on = !on; + } +} + +static EXECUTOR: StaticCell = StaticCell::new(); + +#[riscv_rt::entry] +fn main() -> ! { + esp_println::println!("Init!"); + let peripherals = Peripherals::take().unwrap(); + let system = peripherals.SYSTEM.split(); + let clocks = ClockControl::boot_defaults(system.clock_control).freeze(); + + let mut rtc = Rtc::new(peripherals.RTC_CNTL); + let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks); + let mut wdt0 = timer_group0.wdt; + let timer_group1 = TimerGroup::new(peripherals.TIMG1, &clocks); + let mut wdt1 = timer_group1.wdt; + + // Disable watchdog timers + rtc.swd.disable(); + rtc.rwdt.disable(); + wdt0.disable(); + wdt1.disable(); + + // embassy::init( + // &clocks, + // esp32c3_hal::systimer::SystemTimer::new(peripherals.SYSTIMER), + // ); + + embassy::init(&clocks, timer_group0.timer0); + + let io = IO::new(peripherals.GPIO, peripherals.IO_MUX); + + let executor = EXECUTOR.init(Executor::new()); + executor.run(move |spawner| { + spawner.spawn(run1()).ok(); + spawner.spawn(run2()).ok(); + let res = spawner.spawn(run_io(io)); + esp_println::println!("{res:?}"); + }); +}