Open
Description
I'd like to use Rust to develop for the ArduBoy, which uses an ATmega32U4, which I believe is the same mcu as used on the Arduino Leonardo. So there should be quite a lot of boards out there using it.
Ruduino's core_generator
chokes on the 16u4 and the 32u4 as-is because they have PDI
and PDO
pins in their SPI definition. I think these can be safely ignored as they are only used for in-circuit programming.
However, if we get over this hump, we get a more severe problem: registers that are defined "piecewise" at multiple locations in the packfile. For example, on the 32u4 ADCSRB
is defined in two modules, in AC
and in ADC
. With core_generator
's naive handling of registers, these end up as duplicate definitions in atmega32u4.rs
:
#[allow(non_camel_case_types)]
pub struct ADCSRB;
impl ADCSRB {
pub const ACME: RegisterBits<Self> = RegisterBits::new(0x40);
pub const ACME0: RegisterBits<Self> = RegisterBits::new(1<<6);
}
impl Register for ADCSRB {
type T = u8;
const ADDRESS: *mut u8 = 0x7b as *mut u8;
}
#[allow(non_camel_case_types)]
pub struct ADCSRB;
impl ADCSRB {
pub const ADHSM: RegisterBits<Self> = RegisterBits::new(0x80);
pub const ADHSM0: RegisterBits<Self> = RegisterBits::new(1<<7);
pub const MUX5: RegisterBits<Self> = RegisterBits::new(0x20);
pub const MUX50: RegisterBits<Self> = RegisterBits::new(1<<5);
pub const ADTS: RegisterBits<Self> = RegisterBits::new(0x17);
pub const ADTS0: RegisterBits<Self> = RegisterBits::new(1<<0);
pub const ADTS1: RegisterBits<Self> = RegisterBits::new(1<<1);
pub const ADTS2: RegisterBits<Self> = RegisterBits::new(1<<2);
pub const ADTS3: RegisterBits<Self> = RegisterBits::new(1<<4);
}
impl Register for ADCSRB {
type T = u8;
const ADDRESS: *mut u8 = 0x7b as *mut u8;
}
Metadata
Metadata
Assignees
Labels
No labels