Add attiny841 and attiny861
Add basic support for ATmega4809
Add support for atmega328pb
Add basic support for ATmega644
Add support for the ATtiny84
Add atmega48p device support
Only emit inline-assembly when building for AVR
Make sure that we'll never emit AVR assembly on non-AVR targets.
Instead of failing the build, fail at runtime, to allow a potential
application testsuite to run even if those functions somehow get linked
in.
Signed-off-by: Rahix <rahix@rahix.de>
Add basic support for ATmega168
interrupt: Fix interrupt::free() reading wrong address
The SREG is at IO address 0x3F, not 0x35. Fix interrupt::free() to read
the correct register to make it work as advertised.
Signed-off-by: Rahix <rahix@rahix.de>
interrupt: Make interrupt::enable() unsafe
To bring this crate more in line with cortex-m, mark interrupt::enable()
as unsafe. This also fixes a soundness issue: When the function is
safe, one could call it inside a critical section in entirely safe rust.
This is problematic because lot's of code in critical sections relies on
the fact that interrupts are disabled and it thus can safely perform
non-atomic operations without anything interrupting it.
Signed-off-by: Rahix <rahix@rahix.de>
Add asm module for assembly instructions
Add a new module containing wrapper functions for various assembly
instructions. These functions are marked inline(always) to ensure they
will always just generate the single instruction as expected.
Signed-off-by: Rahix <rahix@rahix.de>
Add support for ATmega2560
Document #[interrupt] and #[entry]
Signed-off-by: Rahix <rahix@rahix.de>
macros: Add a #[entry] macro
Add a #[entry] macro for declaring the entry-point of the program,
similar to what cortex-m-rt is doing.
Signed-off-by: Rahix <rahix@rahix.de>
Use llvm_asm!() instead of asm!()
The asm!() feature was changed to a new syntax which this project did not yet
adopt. The old asm!() is now available as llvm_asm!(). Switch to that to
support nightly build.
See PR #27 for details.
Add basic support for ATmega64
Pull in the ATDF file from Microchip and add all the necessary plumbing
around the code-base to make it compile. Not tested against real
hardware and no device-specific patches are included yet.
Signed-off-by: Rahix <rahix@rahix.de>
Fix compatibility with svd2rust 1.16.1
svd2rust now generates a module containing generic descriptions which
the individual register definitions are based on. Fix the code
generation to deal with this module.
Signed-off-by: Rahix <rahix@rahix.de>
Implement interrupts
This commit adds a new feature-flag `rt` which, when enabled, adds the
`#[interrupt]` procedural macro to define an interrupt handler. Unlike
the implementation in cortex-m, this version needs an attribute which is
the name of the chip the interrupt is for. In code, an interrupt
handler might look like this:
#![feature(abi_avr_interrupt)]
#[avr_device::interrupt(atmega32u4)]
fn INT6() {
// Do Something
}
Closes #1.
Signed-off-by: Rahix <rahix@rahix.de>
Switch to a new design as outlined in #17
Signed-off-by: Rahix <rahix@rahix.de>