Migrate exti_irq stuff to macro tables.
This commit is contained in:
parent
75dc0fd542
commit
fe47f781be
@ -140,10 +140,10 @@ with open(output_file, 'w') as f:
|
|||||||
# if re.match('TIM[2345]$', name):
|
# if re.match('TIM[2345]$', name):
|
||||||
# f.write(f'impl_timer!({name});')
|
# f.write(f'impl_timer!({name});')
|
||||||
|
|
||||||
if block_mod == 'exti':
|
# if block_mod == 'exti':
|
||||||
for irq in chip['interrupts']:
|
# for irq in chip['interrupts']:
|
||||||
if re.match('EXTI', irq):
|
# if re.match('EXTI', irq):
|
||||||
exti_interrupts.append(irq)
|
# exti_interrupts.append(irq)
|
||||||
|
|
||||||
# if block_mod == 'dac':
|
# if block_mod == 'dac':
|
||||||
# f.write(f'impl_dac!({name});')
|
# f.write(f'impl_dac!({name});')
|
||||||
@ -160,4 +160,4 @@ with open(output_file, 'w') as f:
|
|||||||
f.write(f"embassy_extras::peripherals!({','.join(singletons)});")
|
f.write(f"embassy_extras::peripherals!({','.join(singletons)});")
|
||||||
|
|
||||||
# ========= exti interrupts
|
# ========= exti interrupts
|
||||||
f.write(f"impl_exti_irq!({','.join(exti_interrupts)});")
|
# f.write(f"impl_exti_irq!({','.join(exti_interrupts)});")
|
||||||
|
@ -214,6 +214,7 @@ impl_exti!(EXTI15, 15);
|
|||||||
|
|
||||||
pub(crate) unsafe fn init() {}
|
pub(crate) unsafe fn init() {}
|
||||||
|
|
||||||
|
/*
|
||||||
macro_rules! impl_exti_irq {
|
macro_rules! impl_exti_irq {
|
||||||
($($e:ident),+) => {
|
($($e:ident),+) => {
|
||||||
/// safety: must be called only once
|
/// safety: must be called only once
|
||||||
@ -234,3 +235,24 @@ macro_rules! impl_exti_irq {
|
|||||||
)+
|
)+
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// safety: must be called only once
|
||||||
|
pub(crate) unsafe fn init_exti() {
|
||||||
|
use embassy::interrupt::Interrupt;
|
||||||
|
use embassy::interrupt::InterruptExt;
|
||||||
|
|
||||||
|
crate::pac::exti_interrupts!(
|
||||||
|
($e:ident) => {
|
||||||
|
crate::interrupt::$e::steal().enable();
|
||||||
|
};
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
crate::pac::exti_interrupts!(
|
||||||
|
($e:ident) => {
|
||||||
|
unsafe fn $e() {
|
||||||
|
on_irq()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
);
|
||||||
|
@ -83,7 +83,7 @@ pub fn init(config: Config) -> Peripherals {
|
|||||||
|
|
||||||
#[cfg(dma)]
|
#[cfg(dma)]
|
||||||
dma::init();
|
dma::init();
|
||||||
generated::init_exti();
|
exti::init_exti();
|
||||||
rcc::init(config.rcc);
|
rcc::init(config.rcc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ macro_rules! {} {{
|
|||||||
",
|
",
|
||||||
name, name
|
name, name
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
for row in data {
|
for row in data {
|
||||||
write!(out, " __{}_inner!(({}));\n", name, row.join(",")).unwrap();
|
write!(out, " __{}_inner!(({}));\n", name, row.join(",")).unwrap();
|
||||||
@ -102,7 +102,7 @@ macro_rules! {} {{
|
|||||||
" }};
|
" }};
|
||||||
}}"
|
}}"
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
@ -176,16 +176,15 @@ fn main() {
|
|||||||
peripheral_pins_table.push(row);
|
peripheral_pins_table.push(row);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
cfgs.insert(bi.module.clone());
|
cfgs.insert(bi.module.clone());
|
||||||
cfgs.insert(format!("{}_{}", bi.module, bi.version));
|
cfgs.insert(format!("{}_{}", bi.module, bi.version));
|
||||||
let mut peripheral_row = Vec::new();
|
let mut peripheral_row = Vec::new();
|
||||||
peripheral_row.push( bi.module.clone() );
|
peripheral_row.push(bi.module.clone());
|
||||||
peripheral_row.push( name.clone() );
|
peripheral_row.push(name.clone());
|
||||||
peripherals_table.push( peripheral_row );
|
peripherals_table.push(peripheral_row);
|
||||||
|
|
||||||
if let Some(old_version) =
|
if let Some(old_version) =
|
||||||
peripheral_versions.insert(bi.module.clone(), bi.version.clone())
|
peripheral_versions.insert(bi.module.clone(), bi.version.clone())
|
||||||
{
|
{
|
||||||
if old_version != bi.version {
|
if old_version != bi.version {
|
||||||
panic!(
|
panic!(
|
||||||
@ -256,8 +255,15 @@ fn main() {
|
|||||||
.map(|(kind, version)| vec![kind.clone(), version.clone()])
|
.map(|(kind, version)| vec![kind.clone(), version.clone()])
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
|
let exti_interrupt_table = &interrupt_table
|
||||||
|
.iter()
|
||||||
|
.filter(|row| row[0].contains("EXTI"))
|
||||||
|
.map(|row| row.clone())
|
||||||
|
.collect();
|
||||||
|
|
||||||
make_table(&mut extra, "pins", &pin_table);
|
make_table(&mut extra, "pins", &pin_table);
|
||||||
make_table(&mut extra, "interrupts", &interrupt_table);
|
make_table(&mut extra, "interrupts", &interrupt_table);
|
||||||
|
make_table(&mut extra, "exti_interrupts", &exti_interrupt_table);
|
||||||
make_table(&mut extra, "peripherals", &peripherals_table);
|
make_table(&mut extra, "peripherals", &peripherals_table);
|
||||||
make_table(&mut extra, "peripheral_versions", &peripheral_version_table);
|
make_table(&mut extra, "peripheral_versions", &peripheral_version_table);
|
||||||
make_table(&mut extra, "peripheral_pins", &peripheral_pins_table);
|
make_table(&mut extra, "peripheral_pins", &peripheral_pins_table);
|
||||||
@ -282,7 +288,7 @@ fn main() {
|
|||||||
transform::NameKind::Enum => format!("{}::vals::{}", prefix, s),
|
transform::NameKind::Enum => format!("{}::vals::{}", prefix, s),
|
||||||
_ => s.to_string(),
|
_ => s.to_string(),
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
ir.merge(peri);
|
ir.merge(peri);
|
||||||
}
|
}
|
||||||
@ -311,7 +317,7 @@ fn main() {
|
|||||||
"PROVIDE({} = DefaultHandler);\n",
|
"PROVIDE({} = DefaultHandler);\n",
|
||||||
name.to_ascii_uppercase()
|
name.to_ascii_uppercase()
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
File::create(out.join("device.x"))
|
File::create(out.join("device.x"))
|
||||||
|
Loading…
Reference in New Issue
Block a user