From f135e2484a1aface86dff23ef789384851010712 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20Kaan=20G=C3=9CM=C3=9C=C5=9E?= <96421894+Tahinli@users.noreply.github.com> Date: Fri, 12 Jan 2024 23:41:54 +0300 Subject: [PATCH] feat: blink and timer --- 001-led_blink/.cargo/config.toml | 8 ++ 001-led_blink/Cargo.toml | 36 ++++++ 001-led_blink/avr-specs/avr-atmega1280.json | 25 ++++ 001-led_blink/avr-specs/avr-atmega168.json | 25 ++++ 001-led_blink/avr-specs/avr-atmega2560.json | 25 ++++ 001-led_blink/avr-specs/avr-atmega328p.json | 25 ++++ 001-led_blink/avr-specs/avr-atmega32u4.json | 25 ++++ 001-led_blink/avr-specs/avr-atmega48p.json | 25 ++++ 001-led_blink/avr-specs/avr-attiny85.json | 25 ++++ 001-led_blink/avr-specs/avr-attiny88.json | 25 ++++ 001-led_blink/rust-toolchain.toml | 4 + 001-led_blink/src/main.rs | 119 ++++++++++++++++++++ 002-timer/.cargo/config.toml | 8 ++ 002-timer/Cargo.toml | 36 ++++++ 002-timer/avr-specs/avr-atmega1280.json | 25 ++++ 002-timer/avr-specs/avr-atmega168.json | 25 ++++ 002-timer/avr-specs/avr-atmega2560.json | 25 ++++ 002-timer/avr-specs/avr-atmega328p.json | 25 ++++ 002-timer/avr-specs/avr-atmega32u4.json | 25 ++++ 002-timer/avr-specs/avr-atmega48p.json | 25 ++++ 002-timer/avr-specs/avr-attiny85.json | 25 ++++ 002-timer/avr-specs/avr-attiny88.json | 25 ++++ 002-timer/rust-toolchain.toml | 4 + 002-timer/src/main.rs | 56 +++++++++ 24 files changed, 671 insertions(+) create mode 100644 001-led_blink/.cargo/config.toml create mode 100644 001-led_blink/Cargo.toml create mode 100644 001-led_blink/avr-specs/avr-atmega1280.json create mode 100644 001-led_blink/avr-specs/avr-atmega168.json create mode 100644 001-led_blink/avr-specs/avr-atmega2560.json create mode 100644 001-led_blink/avr-specs/avr-atmega328p.json create mode 100644 001-led_blink/avr-specs/avr-atmega32u4.json create mode 100644 001-led_blink/avr-specs/avr-atmega48p.json create mode 100644 001-led_blink/avr-specs/avr-attiny85.json create mode 100644 001-led_blink/avr-specs/avr-attiny88.json create mode 100644 001-led_blink/rust-toolchain.toml create mode 100644 001-led_blink/src/main.rs create mode 100644 002-timer/.cargo/config.toml create mode 100644 002-timer/Cargo.toml create mode 100644 002-timer/avr-specs/avr-atmega1280.json create mode 100644 002-timer/avr-specs/avr-atmega168.json create mode 100644 002-timer/avr-specs/avr-atmega2560.json create mode 100644 002-timer/avr-specs/avr-atmega328p.json create mode 100644 002-timer/avr-specs/avr-atmega32u4.json create mode 100644 002-timer/avr-specs/avr-atmega48p.json create mode 100644 002-timer/avr-specs/avr-attiny85.json create mode 100644 002-timer/avr-specs/avr-attiny88.json create mode 100644 002-timer/rust-toolchain.toml create mode 100644 002-timer/src/main.rs diff --git a/001-led_blink/.cargo/config.toml b/001-led_blink/.cargo/config.toml new file mode 100644 index 0000000..d502ee5 --- /dev/null +++ b/001-led_blink/.cargo/config.toml @@ -0,0 +1,8 @@ +[build] +target = "avr-specs/avr-atmega328p.json" + +[target.'cfg(target_arch = "avr")'] +runner = "ravedude uno -cb 57600" + +[unstable] +build-std = ["core"] diff --git a/001-led_blink/Cargo.toml b/001-led_blink/Cargo.toml new file mode 100644 index 0000000..dde92b6 --- /dev/null +++ b/001-led_blink/Cargo.toml @@ -0,0 +1,36 @@ +[package] +name = "rust-arduino" +version = "0.1.0" +authors = ["Ahmet Kaan GÜMÜŞ <96421894+Tahinli@users.noreply.github.com>"] +edition = "2021" +license = "MIT OR Apache-2.0 OR GPL-3.0" + +[[bin]] +name = "rust-arduino" +test = false +bench = false + +[dependencies] +panic-halt = "0.2.0" +ufmt = "0.2.0" +nb = "1.1.0" +embedded-hal = "1.0.0" +avr-device = "0.5.3" + +[dependencies.arduino-hal] +git = "https://github.com/rahix/avr-hal" +rev = "190f2c3cb8d29e10f71119352b912369dc5a1fb7" +features = ["arduino-uno"] + +# Configure the build for minimal size - AVRs have very little program memory +[profile.dev] +panic = "abort" +lto = true +opt-level = "s" + +[profile.release] +panic = "abort" +codegen-units = 1 +debug = false +lto = true +opt-level = "s" diff --git a/001-led_blink/avr-specs/avr-atmega1280.json b/001-led_blink/avr-specs/avr-atmega1280.json new file mode 100644 index 0000000..8253bb1 --- /dev/null +++ b/001-led_blink/avr-specs/avr-atmega1280.json @@ -0,0 +1,25 @@ +{ + "arch": "avr", + "atomic-cas": false, + "cpu": "atmega1280", + "data-layout": "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8", + "eh-frame-header": false, + "exe-suffix": ".elf", + "executables": true, + "late-link-args": { + "gcc": [ + "-lgcc" + ] + }, + "linker": "avr-gcc", + "llvm-target": "avr-unknown-unknown", + "max-atomic-width": 8, + "no-default-libraries": false, + "pre-link-args": { + "gcc": [ + "-mmcu=atmega1280" + ] + }, + "target-c-int-width": "16", + "target-pointer-width": "16" +} diff --git a/001-led_blink/avr-specs/avr-atmega168.json b/001-led_blink/avr-specs/avr-atmega168.json new file mode 100644 index 0000000..c6fbfec --- /dev/null +++ b/001-led_blink/avr-specs/avr-atmega168.json @@ -0,0 +1,25 @@ +{ + "arch": "avr", + "atomic-cas": false, + "cpu": "atmega168", + "data-layout": "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8", + "eh-frame-header": false, + "exe-suffix": ".elf", + "executables": true, + "late-link-args": { + "gcc": [ + "-lgcc" + ] + }, + "linker": "avr-gcc", + "llvm-target": "avr-unknown-unknown", + "max-atomic-width": 8, + "no-default-libraries": false, + "pre-link-args": { + "gcc": [ + "-mmcu=atmega168" + ] + }, + "target-c-int-width": "16", + "target-pointer-width": "16" +} diff --git a/001-led_blink/avr-specs/avr-atmega2560.json b/001-led_blink/avr-specs/avr-atmega2560.json new file mode 100644 index 0000000..6fcefb2 --- /dev/null +++ b/001-led_blink/avr-specs/avr-atmega2560.json @@ -0,0 +1,25 @@ +{ + "arch": "avr", + "atomic-cas": false, + "cpu": "atmega2560", + "data-layout": "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8", + "eh-frame-header": false, + "exe-suffix": ".elf", + "executables": true, + "late-link-args": { + "gcc": [ + "-lgcc" + ] + }, + "linker": "avr-gcc", + "llvm-target": "avr-unknown-unknown", + "max-atomic-width": 8, + "no-default-libraries": false, + "pre-link-args": { + "gcc": [ + "-mmcu=atmega2560" + ] + }, + "target-c-int-width": "16", + "target-pointer-width": "16" +} diff --git a/001-led_blink/avr-specs/avr-atmega328p.json b/001-led_blink/avr-specs/avr-atmega328p.json new file mode 100644 index 0000000..ab3dcdf --- /dev/null +++ b/001-led_blink/avr-specs/avr-atmega328p.json @@ -0,0 +1,25 @@ +{ + "arch": "avr", + "atomic-cas": false, + "cpu": "atmega328p", + "data-layout": "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8", + "eh-frame-header": false, + "exe-suffix": ".elf", + "executables": true, + "late-link-args": { + "gcc": [ + "-lgcc" + ] + }, + "linker": "avr-gcc", + "llvm-target": "avr-unknown-unknown", + "max-atomic-width": 8, + "no-default-libraries": false, + "pre-link-args": { + "gcc": [ + "-mmcu=atmega328p" + ] + }, + "target-c-int-width": "16", + "target-pointer-width": "16" +} diff --git a/001-led_blink/avr-specs/avr-atmega32u4.json b/001-led_blink/avr-specs/avr-atmega32u4.json new file mode 100644 index 0000000..637dbe5 --- /dev/null +++ b/001-led_blink/avr-specs/avr-atmega32u4.json @@ -0,0 +1,25 @@ +{ + "arch": "avr", + "atomic-cas": false, + "cpu": "atmega32u4", + "data-layout": "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8", + "eh-frame-header": false, + "exe-suffix": ".elf", + "executables": true, + "late-link-args": { + "gcc": [ + "-lgcc" + ] + }, + "linker": "avr-gcc", + "llvm-target": "avr-unknown-unknown", + "max-atomic-width": 8, + "no-default-libraries": false, + "pre-link-args": { + "gcc": [ + "-mmcu=atmega32u4" + ] + }, + "target-c-int-width": "16", + "target-pointer-width": "16" +} diff --git a/001-led_blink/avr-specs/avr-atmega48p.json b/001-led_blink/avr-specs/avr-atmega48p.json new file mode 100644 index 0000000..0a2254e --- /dev/null +++ b/001-led_blink/avr-specs/avr-atmega48p.json @@ -0,0 +1,25 @@ +{ + "arch": "avr", + "atomic-cas": false, + "cpu": "atmega48p", + "data-layout": "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8", + "eh-frame-header": false, + "exe-suffix": ".elf", + "executables": true, + "late-link-args": { + "gcc": [ + "-lgcc" + ] + }, + "linker": "avr-gcc", + "llvm-target": "avr-unknown-unknown", + "max-atomic-width": 8, + "no-default-libraries": false, + "pre-link-args": { + "gcc": [ + "-mmcu=atmega48p" + ] + }, + "target-c-int-width": "16", + "target-pointer-width": "16" +} diff --git a/001-led_blink/avr-specs/avr-attiny85.json b/001-led_blink/avr-specs/avr-attiny85.json new file mode 100644 index 0000000..5d092a1 --- /dev/null +++ b/001-led_blink/avr-specs/avr-attiny85.json @@ -0,0 +1,25 @@ +{ + "arch": "avr", + "atomic-cas": false, + "cpu": "attiny85", + "data-layout": "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8", + "eh-frame-header": false, + "exe-suffix": ".elf", + "executables": true, + "late-link-args": { + "gcc": [ + "-lgcc" + ] + }, + "linker": "avr-gcc", + "llvm-target": "avr-unknown-unknown", + "max-atomic-width": 8, + "no-default-libraries": false, + "pre-link-args": { + "gcc": [ + "-mmcu=attiny85" + ] + }, + "target-c-int-width": "16", + "target-pointer-width": "16" +} diff --git a/001-led_blink/avr-specs/avr-attiny88.json b/001-led_blink/avr-specs/avr-attiny88.json new file mode 100644 index 0000000..0a330cd --- /dev/null +++ b/001-led_blink/avr-specs/avr-attiny88.json @@ -0,0 +1,25 @@ +{ + "arch": "avr", + "atomic-cas": false, + "cpu": "attiny88", + "data-layout": "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8", + "eh-frame-header": false, + "exe-suffix": ".elf", + "executables": true, + "late-link-args": { + "gcc": [ + "-lgcc" + ] + }, + "linker": "avr-gcc", + "llvm-target": "avr-unknown-unknown", + "max-atomic-width": 8, + "no-default-libraries": false, + "pre-link-args": { + "gcc": [ + "-mmcu=attiny88" + ] + }, + "target-c-int-width": "16", + "target-pointer-width": "16" +} diff --git a/001-led_blink/rust-toolchain.toml b/001-led_blink/rust-toolchain.toml new file mode 100644 index 0000000..71ef1c6 --- /dev/null +++ b/001-led_blink/rust-toolchain.toml @@ -0,0 +1,4 @@ +[toolchain] +channel = "nightly-2023-08-08" +components = ["rust-src"] +profile = "minimal" diff --git a/001-led_blink/src/main.rs b/001-led_blink/src/main.rs new file mode 100644 index 0000000..2521990 --- /dev/null +++ b/001-led_blink/src/main.rs @@ -0,0 +1,119 @@ +#![no_std] +#![no_main] + +use core::cell::RefCell; +use avr_device::interrupt; +use panic_halt as _; + +type Console = arduino_hal::hal::usart::Usart0; +static CONSOLE: interrupt::Mutex>> = interrupt::Mutex::new(RefCell::new(None)); + +macro_rules! println { + ($($t:tt)*) => { + interrupt::free( + |cs| + { + if let Some(console) = CONSOLE.borrow(cs).borrow_mut().as_mut() + { + let _ = ufmt::uwriteln!(console, $($t)*); + } + } + ) + + }; +} + +fn put_console(console:Console) + { + interrupt::free( + |cs| + { + *CONSOLE.borrow(cs).borrow_mut() = Some(console); + } + ) + } +#[arduino_hal::entry] +fn main() -> ! { + let dp = arduino_hal::Peripherals::take().unwrap(); + let pins = arduino_hal::pins!(dp); + let serial = arduino_hal::default_serial!(dp, pins, 57600); + put_console(serial); + println!("Hello World"); + + + let mut led02 = pins.d2.into_output(); + let mut led03 = pins.d3.into_output(); + let mut led04 = pins.d4.into_output(); + let mut led05 = pins.d5.into_output(); + let mut led06 = pins.d6.into_output(); + let mut led07 = pins.d7.into_output(); + //let mut led08 = pins.d8.into_output(); + let mut led09 = pins.d9.into_output(); + let mut led10 = pins.d10.into_output(); + let mut led11 = pins.d11.into_output(); + let mut led12 = pins.d12.into_output(); + let mut led13 = pins.d13.into_output(); + + loop { + led02.toggle(); + arduino_hal::delay_ms(50); + led02.toggle(); + led03.toggle(); + arduino_hal::delay_ms(50); + led03.toggle(); + led04.toggle(); + arduino_hal::delay_ms(50); + led04.toggle(); + led05.toggle(); + arduino_hal::delay_ms(50); + led05.toggle(); + led06.toggle(); + arduino_hal::delay_ms(50); + led06.toggle(); + led07.toggle(); + arduino_hal::delay_ms(50); + led07.toggle(); + led09.toggle(); + arduino_hal::delay_ms(50); + led09.toggle(); + led10.toggle(); + arduino_hal::delay_ms(50); + led10.toggle(); + led11.toggle(); + arduino_hal::delay_ms(50); + led11.toggle(); + led12.toggle(); + arduino_hal::delay_ms(50); + led12.toggle(); + led13.toggle(); + arduino_hal::delay_ms(50); + led13.toggle(); + led12.toggle(); + arduino_hal::delay_ms(50); + led12.toggle(); + led11.toggle(); + arduino_hal::delay_ms(50); + led11.toggle(); + led10.toggle(); + arduino_hal::delay_ms(50); + led10.toggle(); + led09.toggle(); + arduino_hal::delay_ms(50); + led09.toggle(); + led07.toggle(); + arduino_hal::delay_ms(50); + led07.toggle(); + led06.toggle(); + arduino_hal::delay_ms(50); + led06.toggle(); + led05.toggle(); + arduino_hal::delay_ms(50); + led05.toggle(); + led04.toggle(); + arduino_hal::delay_ms(50); + led04.toggle(); + led03.toggle(); + arduino_hal::delay_ms(50); + led03.toggle(); + } +} diff --git a/002-timer/.cargo/config.toml b/002-timer/.cargo/config.toml new file mode 100644 index 0000000..d502ee5 --- /dev/null +++ b/002-timer/.cargo/config.toml @@ -0,0 +1,8 @@ +[build] +target = "avr-specs/avr-atmega328p.json" + +[target.'cfg(target_arch = "avr")'] +runner = "ravedude uno -cb 57600" + +[unstable] +build-std = ["core"] diff --git a/002-timer/Cargo.toml b/002-timer/Cargo.toml new file mode 100644 index 0000000..dde92b6 --- /dev/null +++ b/002-timer/Cargo.toml @@ -0,0 +1,36 @@ +[package] +name = "rust-arduino" +version = "0.1.0" +authors = ["Ahmet Kaan GÜMÜŞ <96421894+Tahinli@users.noreply.github.com>"] +edition = "2021" +license = "MIT OR Apache-2.0 OR GPL-3.0" + +[[bin]] +name = "rust-arduino" +test = false +bench = false + +[dependencies] +panic-halt = "0.2.0" +ufmt = "0.2.0" +nb = "1.1.0" +embedded-hal = "1.0.0" +avr-device = "0.5.3" + +[dependencies.arduino-hal] +git = "https://github.com/rahix/avr-hal" +rev = "190f2c3cb8d29e10f71119352b912369dc5a1fb7" +features = ["arduino-uno"] + +# Configure the build for minimal size - AVRs have very little program memory +[profile.dev] +panic = "abort" +lto = true +opt-level = "s" + +[profile.release] +panic = "abort" +codegen-units = 1 +debug = false +lto = true +opt-level = "s" diff --git a/002-timer/avr-specs/avr-atmega1280.json b/002-timer/avr-specs/avr-atmega1280.json new file mode 100644 index 0000000..8253bb1 --- /dev/null +++ b/002-timer/avr-specs/avr-atmega1280.json @@ -0,0 +1,25 @@ +{ + "arch": "avr", + "atomic-cas": false, + "cpu": "atmega1280", + "data-layout": "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8", + "eh-frame-header": false, + "exe-suffix": ".elf", + "executables": true, + "late-link-args": { + "gcc": [ + "-lgcc" + ] + }, + "linker": "avr-gcc", + "llvm-target": "avr-unknown-unknown", + "max-atomic-width": 8, + "no-default-libraries": false, + "pre-link-args": { + "gcc": [ + "-mmcu=atmega1280" + ] + }, + "target-c-int-width": "16", + "target-pointer-width": "16" +} diff --git a/002-timer/avr-specs/avr-atmega168.json b/002-timer/avr-specs/avr-atmega168.json new file mode 100644 index 0000000..c6fbfec --- /dev/null +++ b/002-timer/avr-specs/avr-atmega168.json @@ -0,0 +1,25 @@ +{ + "arch": "avr", + "atomic-cas": false, + "cpu": "atmega168", + "data-layout": "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8", + "eh-frame-header": false, + "exe-suffix": ".elf", + "executables": true, + "late-link-args": { + "gcc": [ + "-lgcc" + ] + }, + "linker": "avr-gcc", + "llvm-target": "avr-unknown-unknown", + "max-atomic-width": 8, + "no-default-libraries": false, + "pre-link-args": { + "gcc": [ + "-mmcu=atmega168" + ] + }, + "target-c-int-width": "16", + "target-pointer-width": "16" +} diff --git a/002-timer/avr-specs/avr-atmega2560.json b/002-timer/avr-specs/avr-atmega2560.json new file mode 100644 index 0000000..6fcefb2 --- /dev/null +++ b/002-timer/avr-specs/avr-atmega2560.json @@ -0,0 +1,25 @@ +{ + "arch": "avr", + "atomic-cas": false, + "cpu": "atmega2560", + "data-layout": "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8", + "eh-frame-header": false, + "exe-suffix": ".elf", + "executables": true, + "late-link-args": { + "gcc": [ + "-lgcc" + ] + }, + "linker": "avr-gcc", + "llvm-target": "avr-unknown-unknown", + "max-atomic-width": 8, + "no-default-libraries": false, + "pre-link-args": { + "gcc": [ + "-mmcu=atmega2560" + ] + }, + "target-c-int-width": "16", + "target-pointer-width": "16" +} diff --git a/002-timer/avr-specs/avr-atmega328p.json b/002-timer/avr-specs/avr-atmega328p.json new file mode 100644 index 0000000..ab3dcdf --- /dev/null +++ b/002-timer/avr-specs/avr-atmega328p.json @@ -0,0 +1,25 @@ +{ + "arch": "avr", + "atomic-cas": false, + "cpu": "atmega328p", + "data-layout": "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8", + "eh-frame-header": false, + "exe-suffix": ".elf", + "executables": true, + "late-link-args": { + "gcc": [ + "-lgcc" + ] + }, + "linker": "avr-gcc", + "llvm-target": "avr-unknown-unknown", + "max-atomic-width": 8, + "no-default-libraries": false, + "pre-link-args": { + "gcc": [ + "-mmcu=atmega328p" + ] + }, + "target-c-int-width": "16", + "target-pointer-width": "16" +} diff --git a/002-timer/avr-specs/avr-atmega32u4.json b/002-timer/avr-specs/avr-atmega32u4.json new file mode 100644 index 0000000..637dbe5 --- /dev/null +++ b/002-timer/avr-specs/avr-atmega32u4.json @@ -0,0 +1,25 @@ +{ + "arch": "avr", + "atomic-cas": false, + "cpu": "atmega32u4", + "data-layout": "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8", + "eh-frame-header": false, + "exe-suffix": ".elf", + "executables": true, + "late-link-args": { + "gcc": [ + "-lgcc" + ] + }, + "linker": "avr-gcc", + "llvm-target": "avr-unknown-unknown", + "max-atomic-width": 8, + "no-default-libraries": false, + "pre-link-args": { + "gcc": [ + "-mmcu=atmega32u4" + ] + }, + "target-c-int-width": "16", + "target-pointer-width": "16" +} diff --git a/002-timer/avr-specs/avr-atmega48p.json b/002-timer/avr-specs/avr-atmega48p.json new file mode 100644 index 0000000..0a2254e --- /dev/null +++ b/002-timer/avr-specs/avr-atmega48p.json @@ -0,0 +1,25 @@ +{ + "arch": "avr", + "atomic-cas": false, + "cpu": "atmega48p", + "data-layout": "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8", + "eh-frame-header": false, + "exe-suffix": ".elf", + "executables": true, + "late-link-args": { + "gcc": [ + "-lgcc" + ] + }, + "linker": "avr-gcc", + "llvm-target": "avr-unknown-unknown", + "max-atomic-width": 8, + "no-default-libraries": false, + "pre-link-args": { + "gcc": [ + "-mmcu=atmega48p" + ] + }, + "target-c-int-width": "16", + "target-pointer-width": "16" +} diff --git a/002-timer/avr-specs/avr-attiny85.json b/002-timer/avr-specs/avr-attiny85.json new file mode 100644 index 0000000..5d092a1 --- /dev/null +++ b/002-timer/avr-specs/avr-attiny85.json @@ -0,0 +1,25 @@ +{ + "arch": "avr", + "atomic-cas": false, + "cpu": "attiny85", + "data-layout": "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8", + "eh-frame-header": false, + "exe-suffix": ".elf", + "executables": true, + "late-link-args": { + "gcc": [ + "-lgcc" + ] + }, + "linker": "avr-gcc", + "llvm-target": "avr-unknown-unknown", + "max-atomic-width": 8, + "no-default-libraries": false, + "pre-link-args": { + "gcc": [ + "-mmcu=attiny85" + ] + }, + "target-c-int-width": "16", + "target-pointer-width": "16" +} diff --git a/002-timer/avr-specs/avr-attiny88.json b/002-timer/avr-specs/avr-attiny88.json new file mode 100644 index 0000000..0a330cd --- /dev/null +++ b/002-timer/avr-specs/avr-attiny88.json @@ -0,0 +1,25 @@ +{ + "arch": "avr", + "atomic-cas": false, + "cpu": "attiny88", + "data-layout": "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8", + "eh-frame-header": false, + "exe-suffix": ".elf", + "executables": true, + "late-link-args": { + "gcc": [ + "-lgcc" + ] + }, + "linker": "avr-gcc", + "llvm-target": "avr-unknown-unknown", + "max-atomic-width": 8, + "no-default-libraries": false, + "pre-link-args": { + "gcc": [ + "-mmcu=attiny88" + ] + }, + "target-c-int-width": "16", + "target-pointer-width": "16" +} diff --git a/002-timer/rust-toolchain.toml b/002-timer/rust-toolchain.toml new file mode 100644 index 0000000..71ef1c6 --- /dev/null +++ b/002-timer/rust-toolchain.toml @@ -0,0 +1,4 @@ +[toolchain] +channel = "nightly-2023-08-08" +components = ["rust-src"] +profile = "minimal" diff --git a/002-timer/src/main.rs b/002-timer/src/main.rs new file mode 100644 index 0000000..fb291d3 --- /dev/null +++ b/002-timer/src/main.rs @@ -0,0 +1,56 @@ +#![no_std] +#![no_main] + +use core::cell::RefCell; +use avr_device::interrupt; +use panic_halt as _; + +type Console = arduino_hal::hal::usart::Usart0; +static CONSOLE: interrupt::Mutex>> = interrupt::Mutex::new(RefCell::new(None)); + +macro_rules! println { + ($($t:tt)*) => { + interrupt::free( + |cs| + { + if let Some(console) = CONSOLE.borrow(cs).borrow_mut().as_mut() + { + let _ = ufmt::uwriteln!(console, $($t)*); + } + } + ) + + }; +} + +fn put_console(console:Console) + { + interrupt::free( + |cs| + { + *CONSOLE.borrow(cs).borrow_mut() = Some(console); + } + ) + } +#[arduino_hal::entry] +fn main() -> ! { + let dp = arduino_hal::Peripherals::take().unwrap(); + let pins = arduino_hal::pins!(dp); + let serial = arduino_hal::default_serial!(dp, pins, 57600); + put_console(serial); + println!("Hello World"); + + + let mut pin2 = pins.d2.into_output(); + let mut pin13 = pins.d13.into_output(); + loop { + for i in 0..60 + { + println!("{}", i); + pin2.toggle(); + arduino_hal::delay_ms(1000); + pin13.toggle(); + } + println!("Minute"); + } +}