53 lines
1.2 KiB
C
53 lines
1.2 KiB
C
#include "cpu.h"
|
|
|
|
uint32_t __attribute__((naked)) CPU_cpsie(void)
|
|
{
|
|
uint32_t ret;
|
|
|
|
//
|
|
// Read PRIMASK and enable interrupts.
|
|
//
|
|
__asm(" mrs r0, PRIMASK\n"
|
|
" cpsie i\n"
|
|
" bx lr\n"
|
|
: "=r" (ret));
|
|
|
|
//
|
|
// The return is handled in the inline assembly, but the compiler will
|
|
// still complain if there is not an explicit return here (despite the fact
|
|
// that this does not result in any code being produced because of the
|
|
// naked attribute).
|
|
//
|
|
return(ret);
|
|
}
|
|
|
|
uint32_t __attribute__((naked)) CPU_cpsid(void)
|
|
{
|
|
uint32_t ret;
|
|
|
|
//
|
|
// Read PRIMASK and disable interrupts.
|
|
//
|
|
__asm(" mrs r0, PRIMASK\n"
|
|
" cpsid i\n"
|
|
" bx lr\n"
|
|
: "=r" (ret));
|
|
|
|
//
|
|
// The return is handled in the inline assembly, but the compiler will
|
|
// still complain if there is not an explicit return here (despite the fact
|
|
// that this does not result in any code being produced because of the
|
|
// naked attribute).
|
|
//
|
|
return(ret);
|
|
}
|
|
|
|
void __attribute__((naked)) CPU_wfi(void)
|
|
{
|
|
//
|
|
// Wait for the next interrupt.
|
|
//
|
|
__asm(" wfi\n"
|
|
" bx lr\n");
|
|
}
|