65 lines
1.4 KiB
C
65 lines
1.4 KiB
C
/** @file scb.c
|
|
* Module handling the System Control Block
|
|
*
|
|
* The module provides functions to configure miscelaneous options of the cortex
|
|
* m3, including sleep behavior, event handler priorities, resets and fault
|
|
* handlers
|
|
*/
|
|
|
|
//--includes--------------------------------------------------------------------
|
|
|
|
#include "scb.h"
|
|
#include "scb_regs.h"
|
|
|
|
|
|
//--local definitions-----------------------------------------------------------
|
|
|
|
//--local variables-------------------------------------------------------------
|
|
|
|
static volatile struct SCB* regs = (struct SCB*)SCB_BASE_ADDRESS;
|
|
|
|
|
|
//--public functions------------------------------------------------------------
|
|
|
|
uint16_t scb_pending_exception(void)
|
|
{
|
|
return regs->ICSR.VECTPENDING;
|
|
}
|
|
|
|
uint16_t scb_active_exception(void)
|
|
{
|
|
return regs->ICSR.VECTACTIVE;
|
|
}
|
|
|
|
void scb_configure_vector_table(uint32_t offset)
|
|
{
|
|
//TODO check that last LSB is 0 (alignement restrictions)
|
|
regs->VTOR.TABLEOFF = offset & 0x1FFFFF;
|
|
}
|
|
|
|
void scb_reset_system(void)
|
|
{
|
|
regs->AIRCR.SYSRESETREQ = 1;
|
|
}
|
|
|
|
void scb_configure_deepsleep(bool enable)
|
|
{
|
|
regs->SCR.SLEEPDEEP = enable;
|
|
}
|
|
|
|
void scb_configure_div0_fault(bool enable)
|
|
{
|
|
regs->CCR.DIV_0_TRP = enable;
|
|
}
|
|
|
|
void scb_configure_unalign_fault(bool enable)
|
|
{
|
|
regs->CCR.UNALIGN_TRP = enable;
|
|
}
|
|
|
|
|
|
//--local functions-------------------------------------------------------------
|
|
|
|
//--ISRs------------------------------------------------------------------------
|
|
|