From 769efac469de3d05f8d8848737aac7e39d9def6e Mon Sep 17 00:00:00 2001 From: Rahix Date: Wed, 8 May 2019 21:11:59 +0200 Subject: [PATCH] Initial --- .gitignore | 6 + Cargo.toml | 13 + Makefile | 33 + src/devices/mod.rs | 4 + src/lib.rs | 21 + vendor/atmega32u4.atdf | 1446 ++++++++++++++++++++++++++++++++++++++++ vendor/attiny85.atdf | 805 ++++++++++++++++++++++ 7 files changed, 2328 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.toml create mode 100644 Makefile create mode 100644 src/devices/mod.rs create mode 100644 src/lib.rs create mode 100644 vendor/atmega32u4.atdf create mode 100644 vendor/attiny85.atdf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b402ca3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +/target +**/*.rs.bk +Cargo.lock + +svd/ +src/devices/*/* diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..4a32280 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "avr-device" +version = "0.1.0" +authors = ["Rahix "] +edition = "2018" + +[features] +attiny85 = [] +atmega32u4 = [] + +[dependencies] +bare-metal = "0.2.4" +vcell = "0.1.0" diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..fe6a5e9 --- /dev/null +++ b/Makefile @@ -0,0 +1,33 @@ +all: chips + +CHIPS := atmega32u4 attiny85 + +.PHONY: chips +chips: $(foreach chip, $(CHIPS), src/devices/$(chip)/mod.rs) + +svd/%.bare.svd: vendor/%.atdf + mkdir -p svd + atdf2svd $< $@ + +# TODO: Implement actual patching +svd/%.patched.svd: svd/%.bare.svd + cp $< $@ + +src/devices/%/mod.full.rs: svd/%.patched.svd + mkdir -p $(@D) + cd $(@D); svd2rust --target none -i $(realpath $<) + mv $(@D)/lib.rs $@ + +src/devices/%/mod.rs: src/devices/%/mod.full.rs + form -i $< -o $(@D) + rm $< + mv $(@D)/lib.rs $@ + rustfmt $@ + @# Remove the `extern crate` lines + sed -i "1,7d" $@ + @# Make DEVICE_PERIPHERALS visible crate-wide + sed -i 's/\(static mut DEVICE_PERIPHERALS\)/pub(crate) \0/' $@ + +clean: + rm -rf svd + rm -rf src/devices/at* diff --git a/src/devices/mod.rs b/src/devices/mod.rs new file mode 100644 index 0000000..b068eec --- /dev/null +++ b/src/devices/mod.rs @@ -0,0 +1,4 @@ +#[cfg(feature = "attiny85")] +pub mod attiny85; +#[cfg(feature = "atmega32u4")] +pub mod atmega32u4; diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..d437777 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,21 @@ +#![no_std] + +#[allow(non_camel_case_types)] +mod devices; + +#[cfg(feature = "attiny85")] +pub use crate::devices::attiny85::*; +#[cfg(feature = "atmega32u4")] +pub use crate::devices::atmega32u4::*; + +impl Peripherals { + /// Returns all the peripherals *once* + #[inline] + pub fn take() -> Option { + if unsafe { DEVICE_PERIPHERALS } { + None + } else { + Some(unsafe { Peripherals::steal() }) + } + } +} diff --git a/vendor/atmega32u4.atdf b/vendor/atmega32u4.atdf new file mode 100644 index 0000000..ac9aa71 --- /dev/null +++ b/vendor/atmega32u4.atdf @@ -0,0 +1,1446 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/attiny85.atdf b/vendor/attiny85.atdf new file mode 100644 index 0000000..bff33fc --- /dev/null +++ b/vendor/attiny85.atdf @@ -0,0 +1,805 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file -- 2.49.0