Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
dwf1m12
soclabs-cortexm0-mcu
Commits
b99de5a2
Commit
b99de5a2
authored
Nov 24, 2021
by
dwf1m12
Browse files
Initial commit
parents
Changes
230
Expand all
Hide whitespace changes
Inline
Side-by-side
Cortex-M0/soclabs_demo/software/cmsis/CMSIS/Include/core_cm0.h
0 → 100644
View file @
b99de5a2
This diff is collapsed.
Click to expand it.
Cortex-M0/soclabs_demo/software/cmsis/CMSIS/Include/core_cm0plus.h
0 → 100644
View file @
b99de5a2
This diff is collapsed.
Click to expand it.
Cortex-M0/soclabs_demo/software/cmsis/CMSIS/Include/core_cmFunc.h
0 → 100644
View file @
b99de5a2
/**************************************************************************//**
* @file core_cmFunc.h
* @brief CMSIS Cortex-M Core Function Access Header File
* @version V3.20
* @date 25. February 2013
*
* @note
*
******************************************************************************/
/* Copyright (c) 2009 - 2013 ARM LIMITED
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name of ARM nor the names of its contributors may be used
to endorse or promote products derived from this software without
specific prior written permission.
*
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------*/
#ifndef __CORE_CMFUNC_H
#define __CORE_CMFUNC_H
/* ########################### Core Function Access ########################### */
/** \ingroup CMSIS_Core_FunctionInterface
\defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions
@{
*/
#if defined ( __CC_ARM )
/*------------------RealView Compiler -----------------*/
/* ARM armcc specific functions */
#if (__ARMCC_VERSION < 400677)
#error "Please use ARM Compiler Toolchain V4.0.677 or later!"
#endif
/* intrinsic void __enable_irq(); */
/* intrinsic void __disable_irq(); */
/** \brief Get Control Register
This function returns the content of the Control Register.
\return Control Register value
*/
__STATIC_INLINE
uint32_t
__get_CONTROL
(
void
)
{
register
uint32_t
__regControl
__ASM
(
"control"
);
return
(
__regControl
);
}
/** \brief Set Control Register
This function writes the given value to the Control Register.
\param [in] control Control Register value to set
*/
__STATIC_INLINE
void
__set_CONTROL
(
uint32_t
control
)
{
register
uint32_t
__regControl
__ASM
(
"control"
);
__regControl
=
control
;
}
/** \brief Get IPSR Register
This function returns the content of the IPSR Register.
\return IPSR Register value
*/
__STATIC_INLINE
uint32_t
__get_IPSR
(
void
)
{
register
uint32_t
__regIPSR
__ASM
(
"ipsr"
);
return
(
__regIPSR
);
}
/** \brief Get APSR Register
This function returns the content of the APSR Register.
\return APSR Register value
*/
__STATIC_INLINE
uint32_t
__get_APSR
(
void
)
{
register
uint32_t
__regAPSR
__ASM
(
"apsr"
);
return
(
__regAPSR
);
}
/** \brief Get xPSR Register
This function returns the content of the xPSR Register.
\return xPSR Register value
*/
__STATIC_INLINE
uint32_t
__get_xPSR
(
void
)
{
register
uint32_t
__regXPSR
__ASM
(
"xpsr"
);
return
(
__regXPSR
);
}
/** \brief Get Process Stack Pointer
This function returns the current value of the Process Stack Pointer (PSP).
\return PSP Register value
*/
__STATIC_INLINE
uint32_t
__get_PSP
(
void
)
{
register
uint32_t
__regProcessStackPointer
__ASM
(
"psp"
);
return
(
__regProcessStackPointer
);
}
/** \brief Set Process Stack Pointer
This function assigns the given value to the Process Stack Pointer (PSP).
\param [in] topOfProcStack Process Stack Pointer value to set
*/
__STATIC_INLINE
void
__set_PSP
(
uint32_t
topOfProcStack
)
{
register
uint32_t
__regProcessStackPointer
__ASM
(
"psp"
);
__regProcessStackPointer
=
topOfProcStack
;
}
/** \brief Get Main Stack Pointer
This function returns the current value of the Main Stack Pointer (MSP).
\return MSP Register value
*/
__STATIC_INLINE
uint32_t
__get_MSP
(
void
)
{
register
uint32_t
__regMainStackPointer
__ASM
(
"msp"
);
return
(
__regMainStackPointer
);
}
/** \brief Set Main Stack Pointer
This function assigns the given value to the Main Stack Pointer (MSP).
\param [in] topOfMainStack Main Stack Pointer value to set
*/
__STATIC_INLINE
void
__set_MSP
(
uint32_t
topOfMainStack
)
{
register
uint32_t
__regMainStackPointer
__ASM
(
"msp"
);
__regMainStackPointer
=
topOfMainStack
;
}
/** \brief Get Priority Mask
This function returns the current state of the priority mask bit from the Priority Mask Register.
\return Priority Mask value
*/
__STATIC_INLINE
uint32_t
__get_PRIMASK
(
void
)
{
register
uint32_t
__regPriMask
__ASM
(
"primask"
);
return
(
__regPriMask
);
}
/** \brief Set Priority Mask
This function assigns the given value to the Priority Mask Register.
\param [in] priMask Priority Mask
*/
__STATIC_INLINE
void
__set_PRIMASK
(
uint32_t
priMask
)
{
register
uint32_t
__regPriMask
__ASM
(
"primask"
);
__regPriMask
=
(
priMask
);
}
#if (__CORTEX_M >= 0x03)
/** \brief Enable FIQ
This function enables FIQ interrupts by clearing the F-bit in the CPSR.
Can only be executed in Privileged modes.
*/
#define __enable_fault_irq __enable_fiq
/** \brief Disable FIQ
This function disables FIQ interrupts by setting the F-bit in the CPSR.
Can only be executed in Privileged modes.
*/
#define __disable_fault_irq __disable_fiq
/** \brief Get Base Priority
This function returns the current value of the Base Priority register.
\return Base Priority register value
*/
__STATIC_INLINE
uint32_t
__get_BASEPRI
(
void
)
{
register
uint32_t
__regBasePri
__ASM
(
"basepri"
);
return
(
__regBasePri
);
}
/** \brief Set Base Priority
This function assigns the given value to the Base Priority register.
\param [in] basePri Base Priority value to set
*/
__STATIC_INLINE
void
__set_BASEPRI
(
uint32_t
basePri
)
{
register
uint32_t
__regBasePri
__ASM
(
"basepri"
);
__regBasePri
=
(
basePri
&
0xff
);
}
/** \brief Get Fault Mask
This function returns the current value of the Fault Mask register.
\return Fault Mask register value
*/
__STATIC_INLINE
uint32_t
__get_FAULTMASK
(
void
)
{
register
uint32_t
__regFaultMask
__ASM
(
"faultmask"
);
return
(
__regFaultMask
);
}
/** \brief Set Fault Mask
This function assigns the given value to the Fault Mask register.
\param [in] faultMask Fault Mask value to set
*/
__STATIC_INLINE
void
__set_FAULTMASK
(
uint32_t
faultMask
)
{
register
uint32_t
__regFaultMask
__ASM
(
"faultmask"
);
__regFaultMask
=
(
faultMask
&
(
uint32_t
)
1
);
}
#endif
/* (__CORTEX_M >= 0x03) */
#if (__CORTEX_M == 0x04)
/** \brief Get FPSCR
This function returns the current value of the Floating Point Status/Control register.
\return Floating Point Status/Control register value
*/
__STATIC_INLINE
uint32_t
__get_FPSCR
(
void
)
{
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
register
uint32_t
__regfpscr
__ASM
(
"fpscr"
);
return
(
__regfpscr
);
#else
return
(
0
);
#endif
}
/** \brief Set FPSCR
This function assigns the given value to the Floating Point Status/Control register.
\param [in] fpscr Floating Point Status/Control value to set
*/
__STATIC_INLINE
void
__set_FPSCR
(
uint32_t
fpscr
)
{
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
register
uint32_t
__regfpscr
__ASM
(
"fpscr"
);
__regfpscr
=
(
fpscr
);
#endif
}
#endif
/* (__CORTEX_M == 0x04) */
#elif defined ( __ICCARM__ )
/*------------------ ICC Compiler -------------------*/
/* IAR iccarm specific functions */
#include
<cmsis_iar.h>
#elif defined ( __TMS470__ )
/*---------------- TI CCS Compiler ------------------*/
/* TI CCS specific functions */
#include
<cmsis_ccs.h>
#elif defined ( __GNUC__ )
/*------------------ GNU Compiler ---------------------*/
/* GNU gcc specific functions */
/** \brief Enable IRQ Interrupts
This function enables IRQ interrupts by clearing the I-bit in the CPSR.
Can only be executed in Privileged modes.
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
void
__enable_irq
(
void
)
{
__ASM
volatile
(
"cpsie i"
:
:
:
"memory"
);
}
/** \brief Disable IRQ Interrupts
This function disables IRQ interrupts by setting the I-bit in the CPSR.
Can only be executed in Privileged modes.
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
void
__disable_irq
(
void
)
{
__ASM
volatile
(
"cpsid i"
:
:
:
"memory"
);
}
/** \brief Get Control Register
This function returns the content of the Control Register.
\return Control Register value
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
uint32_t
__get_CONTROL
(
void
)
{
uint32_t
result
;
__ASM
volatile
(
"MRS %0, control"
:
"=r"
(
result
)
);
return
(
result
);
}
/** \brief Set Control Register
This function writes the given value to the Control Register.
\param [in] control Control Register value to set
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
void
__set_CONTROL
(
uint32_t
control
)
{
__ASM
volatile
(
"MSR control, %0"
:
:
"r"
(
control
)
:
"memory"
);
}
/** \brief Get IPSR Register
This function returns the content of the IPSR Register.
\return IPSR Register value
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
uint32_t
__get_IPSR
(
void
)
{
uint32_t
result
;
__ASM
volatile
(
"MRS %0, ipsr"
:
"=r"
(
result
)
);
return
(
result
);
}
/** \brief Get APSR Register
This function returns the content of the APSR Register.
\return APSR Register value
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
uint32_t
__get_APSR
(
void
)
{
uint32_t
result
;
__ASM
volatile
(
"MRS %0, apsr"
:
"=r"
(
result
)
);
return
(
result
);
}
/** \brief Get xPSR Register
This function returns the content of the xPSR Register.
\return xPSR Register value
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
uint32_t
__get_xPSR
(
void
)
{
uint32_t
result
;
__ASM
volatile
(
"MRS %0, xpsr"
:
"=r"
(
result
)
);
return
(
result
);
}
/** \brief Get Process Stack Pointer
This function returns the current value of the Process Stack Pointer (PSP).
\return PSP Register value
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
uint32_t
__get_PSP
(
void
)
{
register
uint32_t
result
;
__ASM
volatile
(
"MRS %0, psp
\n
"
:
"=r"
(
result
)
);
return
(
result
);
}
/** \brief Set Process Stack Pointer
This function assigns the given value to the Process Stack Pointer (PSP).
\param [in] topOfProcStack Process Stack Pointer value to set
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
void
__set_PSP
(
uint32_t
topOfProcStack
)
{
__ASM
volatile
(
"MSR psp, %0
\n
"
:
:
"r"
(
topOfProcStack
)
:
"sp"
);
}
/** \brief Get Main Stack Pointer
This function returns the current value of the Main Stack Pointer (MSP).
\return MSP Register value
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
uint32_t
__get_MSP
(
void
)
{
register
uint32_t
result
;
__ASM
volatile
(
"MRS %0, msp
\n
"
:
"=r"
(
result
)
);
return
(
result
);
}
/** \brief Set Main Stack Pointer
This function assigns the given value to the Main Stack Pointer (MSP).
\param [in] topOfMainStack Main Stack Pointer value to set
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
void
__set_MSP
(
uint32_t
topOfMainStack
)
{
__ASM
volatile
(
"MSR msp, %0
\n
"
:
:
"r"
(
topOfMainStack
)
:
"sp"
);
}
/** \brief Get Priority Mask
This function returns the current state of the priority mask bit from the Priority Mask Register.
\return Priority Mask value
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
uint32_t
__get_PRIMASK
(
void
)
{
uint32_t
result
;
__ASM
volatile
(
"MRS %0, primask"
:
"=r"
(
result
)
);
return
(
result
);
}
/** \brief Set Priority Mask
This function assigns the given value to the Priority Mask Register.
\param [in] priMask Priority Mask
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
void
__set_PRIMASK
(
uint32_t
priMask
)
{
__ASM
volatile
(
"MSR primask, %0"
:
:
"r"
(
priMask
)
:
"memory"
);
}
#if (__CORTEX_M >= 0x03)
/** \brief Enable FIQ
This function enables FIQ interrupts by clearing the F-bit in the CPSR.
Can only be executed in Privileged modes.
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
void
__enable_fault_irq
(
void
)
{
__ASM
volatile
(
"cpsie f"
:
:
:
"memory"
);
}
/** \brief Disable FIQ
This function disables FIQ interrupts by setting the F-bit in the CPSR.
Can only be executed in Privileged modes.
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
void
__disable_fault_irq
(
void
)
{
__ASM
volatile
(
"cpsid f"
:
:
:
"memory"
);
}
/** \brief Get Base Priority
This function returns the current value of the Base Priority register.
\return Base Priority register value
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
uint32_t
__get_BASEPRI
(
void
)
{
uint32_t
result
;
__ASM
volatile
(
"MRS %0, basepri_max"
:
"=r"
(
result
)
);
return
(
result
);
}
/** \brief Set Base Priority
This function assigns the given value to the Base Priority register.
\param [in] basePri Base Priority value to set
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
void
__set_BASEPRI
(
uint32_t
value
)
{
__ASM
volatile
(
"MSR basepri, %0"
:
:
"r"
(
value
)
:
"memory"
);
}
/** \brief Get Fault Mask
This function returns the current value of the Fault Mask register.
\return Fault Mask register value
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
uint32_t
__get_FAULTMASK
(
void
)
{
uint32_t
result
;
__ASM
volatile
(
"MRS %0, faultmask"
:
"=r"
(
result
)
);
return
(
result
);
}
/** \brief Set Fault Mask
This function assigns the given value to the Fault Mask register.
\param [in] faultMask Fault Mask value to set
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
void
__set_FAULTMASK
(
uint32_t
faultMask
)
{
__ASM
volatile
(
"MSR faultmask, %0"
:
:
"r"
(
faultMask
)
:
"memory"
);
}
#endif
/* (__CORTEX_M >= 0x03) */
#if (__CORTEX_M == 0x04)
/** \brief Get FPSCR
This function returns the current value of the Floating Point Status/Control register.
\return Floating Point Status/Control register value
*/
__attribute__
(
(
always_inline
)
)
__STATIC_INLINE
uint32_t
__get_FPSCR
(
void
)
{
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
uint32_t
result
;
/* Empty asm statement works as a scheduling barrier */
__ASM
volatile
(
""
);
__ASM
volatile
(
"VMRS %0, fpscr"
:
"=r"
(
result
)
);
__ASM
volatile
(
""
);
return
(
result
);
#else
return
(
0
);
#endif
}