78 lines
2.1 KiB
C
78 lines
2.1 KiB
C
|
/******************************************************************************
|
||
|
* @brief provide generic high-level routines for ARM Cortex M0/M0+ processors.
|
||
|
*
|
||
|
*******************************************************************************/
|
||
|
|
||
|
#include "common.h"
|
||
|
|
||
|
/***********************************************************************/
|
||
|
/*
|
||
|
* Configures the ARM system control register for STOP (deep sleep) mode
|
||
|
* and then executes the WFI instruction to enter the mode.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* none
|
||
|
*
|
||
|
* Note: Might want to change this later to allow for passing in a parameter
|
||
|
* to optionally set the sleep on exit bit.
|
||
|
*/
|
||
|
|
||
|
void stop (void)
|
||
|
{
|
||
|
/* Set the SLEEPDEEP bit to enable deep sleep mode (STOP) */
|
||
|
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
|
||
|
|
||
|
/* WFI instruction will start entry into STOP mode */
|
||
|
#ifndef KEIL
|
||
|
// If not using KEIL's uVision use the standard assembly command
|
||
|
asm("WFI");
|
||
|
#else
|
||
|
// If using KEIL's uVision, use the CMSIS intrinsic
|
||
|
__wfi();
|
||
|
#endif
|
||
|
}
|
||
|
/***********************************************************************/
|
||
|
/*
|
||
|
* Configures the ARM system control register for WAIT (sleep) mode
|
||
|
* and then executes the WFI instruction to enter the mode.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* none
|
||
|
*
|
||
|
* Note: Might want to change this later to allow for passing in a parameter
|
||
|
* to optionally set the sleep on exit bit.
|
||
|
*/
|
||
|
|
||
|
void wait (void)
|
||
|
{
|
||
|
/* Clear the SLEEPDEEP bit to make sure we go into WAIT (sleep) mode instead
|
||
|
* of deep sleep.
|
||
|
*/
|
||
|
SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk;
|
||
|
|
||
|
/* WFI instruction will start entry into WAIT mode */
|
||
|
#ifndef KEIL
|
||
|
// If not using KEIL's uVision use the standard assembly command
|
||
|
asm("WFI");
|
||
|
#else
|
||
|
// If using KEIL's uVision, use the CMSIS intrinsic
|
||
|
__wfi();
|
||
|
#endif
|
||
|
}
|
||
|
/***********************************************************************/
|
||
|
/*
|
||
|
* Change the value of the vector table offset register to the specified value.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* vtor new value to write to the VTOR
|
||
|
*/
|
||
|
|
||
|
void write_vtor (int vtor)
|
||
|
{
|
||
|
/* Write the VTOR with the new value */
|
||
|
SCB->VTOR = vtor;
|
||
|
}
|
||
|
|
||
|
/***********************************************************************/
|
||
|
|