libcortex_a9: add interrupt exit support for interrupt_handler macro #107
@ -56,8 +56,8 @@ macro_rules! interrupt_handler {
|
|||||||
asm!(
|
asm!(
|
||||||
// setup SP, depending on CPU 0 or 1
|
// setup SP, depending on CPU 0 or 1
|
||||||
// and preserve registers
|
// and preserve registers
|
||||||
"SUB lr, lr, #4",
|
"sub lr, lr, #4",
|
||||||
"STMFD sp!, {{r0-r12, lr}}",
|
"stmfd sp!, {{r0-r12, lr}}",
|
||||||
"mrc p15, #0, r0, c0, c0, #5",
|
"mrc p15, #0, r0, c0, c0, #5",
|
||||||
concat!("movw r1, :lower16:", stringify!($stack0)),
|
concat!("movw r1, :lower16:", stringify!($stack0)),
|
||||||
concat!("movt r1, :upper16:", stringify!($stack0)),
|
concat!("movt r1, :upper16:", stringify!($stack0)),
|
||||||
@ -70,7 +70,7 @@ macro_rules! interrupt_handler {
|
|||||||
concat!("bl ", stringify!($name2)),
|
concat!("bl ", stringify!($name2)),
|
||||||
"pop {{r0, r1}}",
|
"pop {{r0, r1}}",
|
||||||
"mov sp, r0",
|
"mov sp, r0",
|
||||||
"LDMFD sp!, {{r0-r12, pc}}^", // caret ^ : copy SPSR to the CPSR
|
"ldmfd sp!, {{r0-r12, pc}}^", // caret ^ : copy SPSR to the CPSR
|
||||||
options(noreturn)
|
options(noreturn)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user