xref: /btstack/port/msp432p401lp-cc256x/CMSIS/cmsis_ccs.h (revision 5fd0122a3e19d95e11e1f3eb8a08a2b2acb2557e)
1*5fd0122aSMatthias Ringwald //*****************************************************************************
2*5fd0122aSMatthias Ringwald //
3*5fd0122aSMatthias Ringwald // Copyright (C) 2012 - 2015 Texas Instruments Incorporated - http://www.ti.com/
4*5fd0122aSMatthias Ringwald //
5*5fd0122aSMatthias Ringwald // Redistribution and use in source and binary forms, with or without
6*5fd0122aSMatthias Ringwald // modification, are permitted provided that the following conditions
7*5fd0122aSMatthias Ringwald // are met:
8*5fd0122aSMatthias Ringwald //
9*5fd0122aSMatthias Ringwald //  Redistributions of source code must retain the above copyright
10*5fd0122aSMatthias Ringwald //  notice, this list of conditions and the following disclaimer.
11*5fd0122aSMatthias Ringwald //
12*5fd0122aSMatthias Ringwald //  Redistributions in binary form must reproduce the above copyright
13*5fd0122aSMatthias Ringwald //  notice, this list of conditions and the following disclaimer in the
14*5fd0122aSMatthias Ringwald //  documentation and/or other materials provided with the
15*5fd0122aSMatthias Ringwald //  distribution.
16*5fd0122aSMatthias Ringwald //
17*5fd0122aSMatthias Ringwald //  Neither the name of Texas Instruments Incorporated nor the names of
18*5fd0122aSMatthias Ringwald //  its contributors may be used to endorse or promote products derived
19*5fd0122aSMatthias Ringwald //  from this software without specific prior written permission.
20*5fd0122aSMatthias Ringwald //
21*5fd0122aSMatthias Ringwald // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22*5fd0122aSMatthias Ringwald // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23*5fd0122aSMatthias Ringwald // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24*5fd0122aSMatthias Ringwald // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25*5fd0122aSMatthias Ringwald // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26*5fd0122aSMatthias Ringwald // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27*5fd0122aSMatthias Ringwald // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28*5fd0122aSMatthias Ringwald // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29*5fd0122aSMatthias Ringwald // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30*5fd0122aSMatthias Ringwald // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31*5fd0122aSMatthias Ringwald // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32*5fd0122aSMatthias Ringwald //
33*5fd0122aSMatthias Ringwald // MSP432 Family CMSIS Definitions
34*5fd0122aSMatthias Ringwald //
35*5fd0122aSMatthias Ringwald //****************************************************************************
36*5fd0122aSMatthias Ringwald 
37*5fd0122aSMatthias Ringwald #ifndef CMSIS_CCS_H_
38*5fd0122aSMatthias Ringwald #define CMSIS_CCS_H_
39*5fd0122aSMatthias Ringwald 
40*5fd0122aSMatthias Ringwald //*****************************************************************************
41*5fd0122aSMatthias Ringwald // CMSIS-compatible instruction calls
42*5fd0122aSMatthias Ringwald //*****************************************************************************
43*5fd0122aSMatthias Ringwald 
44*5fd0122aSMatthias Ringwald #ifndef __cplusplus
45*5fd0122aSMatthias Ringwald // No Operation
__nop(void)46*5fd0122aSMatthias Ringwald __attribute__( ( always_inline ) ) static inline void __nop(void)
47*5fd0122aSMatthias Ringwald {
48*5fd0122aSMatthias Ringwald 	__asm("  nop");
49*5fd0122aSMatthias Ringwald }
50*5fd0122aSMatthias Ringwald 
__NOP(void)51*5fd0122aSMatthias Ringwald __attribute__( ( always_inline ) ) static inline void __NOP(void)
52*5fd0122aSMatthias Ringwald {
53*5fd0122aSMatthias Ringwald 	__asm("  nop");
54*5fd0122aSMatthias Ringwald }
55*5fd0122aSMatthias Ringwald 
56*5fd0122aSMatthias Ringwald // Wait For Interrupt
__wfi(void)57*5fd0122aSMatthias Ringwald __attribute__( ( always_inline ) ) static inline void __wfi(void)
58*5fd0122aSMatthias Ringwald {
59*5fd0122aSMatthias Ringwald 	__asm("  wfi");
60*5fd0122aSMatthias Ringwald }
61*5fd0122aSMatthias Ringwald 
62*5fd0122aSMatthias Ringwald // Wait For Event
__wfe(void)63*5fd0122aSMatthias Ringwald __attribute__( ( always_inline ) ) static inline void __wfe(void)
64*5fd0122aSMatthias Ringwald {
65*5fd0122aSMatthias Ringwald 	__asm("  wfe");
66*5fd0122aSMatthias Ringwald }
67*5fd0122aSMatthias Ringwald #endif
68*5fd0122aSMatthias Ringwald 
69*5fd0122aSMatthias Ringwald // Enable Interrupts
__enable_irq(void)70*5fd0122aSMatthias Ringwald __attribute__( ( always_inline ) ) static inline void __enable_irq(void)
71*5fd0122aSMatthias Ringwald {
72*5fd0122aSMatthias Ringwald 	__asm("  cpsie i");
73*5fd0122aSMatthias Ringwald }
74*5fd0122aSMatthias Ringwald 
75*5fd0122aSMatthias Ringwald // Disable Interrupts
__disable_irq(void)76*5fd0122aSMatthias Ringwald __attribute__( ( always_inline ) ) static inline void __disable_irq(void)
77*5fd0122aSMatthias Ringwald {
78*5fd0122aSMatthias Ringwald 	__asm("  cpsid i");
79*5fd0122aSMatthias Ringwald }
80*5fd0122aSMatthias Ringwald 
81*5fd0122aSMatthias Ringwald // Data Synchronization Barrier
__DSB(void)82*5fd0122aSMatthias Ringwald __attribute__( ( always_inline ) ) static inline void __DSB(void)
83*5fd0122aSMatthias Ringwald {
84*5fd0122aSMatthias Ringwald 	__asm("  dsb");
85*5fd0122aSMatthias Ringwald }
86*5fd0122aSMatthias Ringwald 
87*5fd0122aSMatthias Ringwald #if (0)
88*5fd0122aSMatthias Ringwald // Get Main Stack Pointer
__get_MSP(void)89*5fd0122aSMatthias Ringwald static inline uint32_t __get_MSP(void)
90*5fd0122aSMatthias Ringwald {
91*5fd0122aSMatthias Ringwald 	register uint32_t result;
92*5fd0122aSMatthias Ringwald 	//__asm ("  mrs result, msp");
93*5fd0122aSMatthias Ringwald 	return(result);
94*5fd0122aSMatthias Ringwald }
95*5fd0122aSMatthias Ringwald 
96*5fd0122aSMatthias Ringwald // Set Main Stack Pointer
__set_MSP(uint32_t topOfMainStack)97*5fd0122aSMatthias Ringwald static inline void __set_MSP(uint32_t topOfMainStack)
98*5fd0122aSMatthias Ringwald {
99*5fd0122aSMatthias Ringwald 	asm(" .global topOfMainStack");
100*5fd0122aSMatthias Ringwald 	__asm ("  msr msp, topOfMainStack");
101*5fd0122aSMatthias Ringwald }
102*5fd0122aSMatthias Ringwald 
103*5fd0122aSMatthias Ringwald 
104*5fd0122aSMatthias Ringwald // Get Priority Mask
__get_PRIMASK(void)105*5fd0122aSMatthias Ringwald static inline uint32_t __get_PRIMASK(void)
106*5fd0122aSMatthias Ringwald {
107*5fd0122aSMatthias Ringwald 	uint32_t result;
108*5fd0122aSMatthias Ringwald 	__asm ("  mrs result, primask");
109*5fd0122aSMatthias Ringwald 	return(result);
110*5fd0122aSMatthias Ringwald }
111*5fd0122aSMatthias Ringwald 
112*5fd0122aSMatthias Ringwald 
113*5fd0122aSMatthias Ringwald // Set Priority Mask
__set_PRIMASK(uint32_t priMask)114*5fd0122aSMatthias Ringwald static inline void __set_PRIMASK(uint32_t priMask)
115*5fd0122aSMatthias Ringwald {
116*5fd0122aSMatthias Ringwald 	__asm ("  msr primask, priMask");
117*5fd0122aSMatthias Ringwald }
118*5fd0122aSMatthias Ringwald #endif
119*5fd0122aSMatthias Ringwald 
120*5fd0122aSMatthias Ringwald 
121*5fd0122aSMatthias Ringwald //
122*5fd0122aSMatthias Ringwald // 	v5e, v6, Cortex-M3, Cortex-M4, Cortex-R4, and Cortex-A8 compiler intrinsics
123*5fd0122aSMatthias Ringwald //
124*5fd0122aSMatthias Ringwald #define __CLZ		_norm
125*5fd0122aSMatthias Ringwald #define __SXTB		_sxtb
126*5fd0122aSMatthias Ringwald #define __SXTH		_sxth
127*5fd0122aSMatthias Ringwald #define __UXTB		_uxtb
128*5fd0122aSMatthias Ringwald #define __UXTH		_uxth
129*5fd0122aSMatthias Ringwald //  CCS supports intrinsics to take advantage of the shift operand left/right
130*5fd0122aSMatthias Ringwald //	  before saturation extension of SSAT, but CMSIS does not take advantage
131*5fd0122aSMatthias Ringwald //	  of those, so tell the compiler to use a sat & shift left with a shift
132*5fd0122aSMatthias Ringwald //	  value of 0 whenever it encounters an SSAT
133*5fd0122aSMatthias Ringwald #define __SSAT(VAL, BITPOS) \
134*5fd0122aSMatthias Ringwald 	_ssatl(VAL , 0, BITPOS)
135*5fd0122aSMatthias Ringwald 
136*5fd0122aSMatthias Ringwald //
137*5fd0122aSMatthias Ringwald //  Only define M4 based intrinsics if we're not using an M4
138*5fd0122aSMatthias Ringwald //
139*5fd0122aSMatthias Ringwald #if defined (__TI_TMS470_V7M4__)
140*5fd0122aSMatthias Ringwald //
141*5fd0122aSMatthias Ringwald //	V5E, V6, Cortex-M4, Cortex-R4, and Cortex-A8 compiler intrinsics
142*5fd0122aSMatthias Ringwald //
143*5fd0122aSMatthias Ringwald #define __QADD		_sadd
144*5fd0122aSMatthias Ringwald #define __QDADD		_sdadd
145*5fd0122aSMatthias Ringwald #define __QDSUB		_sdsub
146*5fd0122aSMatthias Ringwald #define	__SMLABB	_smlabb
147*5fd0122aSMatthias Ringwald #define	__SMLABT	_smlabt
148*5fd0122aSMatthias Ringwald #define __SMLALBB	_smlalbb
149*5fd0122aSMatthias Ringwald #define __SMLALBT	_smlalbt
150*5fd0122aSMatthias Ringwald #define __SMLALTB	_smlaltb
151*5fd0122aSMatthias Ringwald #define __SMLALTT	_smlaltt
152*5fd0122aSMatthias Ringwald #define __SMLATB	_smlatb
153*5fd0122aSMatthias Ringwald #define __SMLATT	_smlatt
154*5fd0122aSMatthias Ringwald #define __SMLAWB	_smlawb
155*5fd0122aSMatthias Ringwald #define __SMLAWT	_smlawt
156*5fd0122aSMatthias Ringwald 
157*5fd0122aSMatthias Ringwald #define __SMULBB	_smulbb
158*5fd0122aSMatthias Ringwald #define __SMULBT	_smulbt
159*5fd0122aSMatthias Ringwald #define __SMULTB	_smultb
160*5fd0122aSMatthias Ringwald #define __SMULTT	_smultt
161*5fd0122aSMatthias Ringwald #define __SMULWB	_smulwb
162*5fd0122aSMatthias Ringwald #define __SMULWT	_smulwt
163*5fd0122aSMatthias Ringwald #define __QSUB		_ssub
164*5fd0122aSMatthias Ringwald #define __SUBC		_subc
165*5fd0122aSMatthias Ringwald 
166*5fd0122aSMatthias Ringwald //
167*5fd0122aSMatthias Ringwald //	v6, Cortex-M4, Cortex-R4, and Cortex-A8 compiler intrinsics
168*5fd0122aSMatthias Ringwald //
169*5fd0122aSMatthias Ringwald #define __SHASX		_shaddsubx
170*5fd0122aSMatthias Ringwald #define __SHSAX		_shsubaddx
171*5fd0122aSMatthias Ringwald #define __PKHBT		_pkhbt
172*5fd0122aSMatthias Ringwald #define __PKHTB		_pkhtb
173*5fd0122aSMatthias Ringwald #define __QADD16	_qadd16
174*5fd0122aSMatthias Ringwald #define __QADD8		_qadd8
175*5fd0122aSMatthias Ringwald #define __QSUB16	_qsub16
176*5fd0122aSMatthias Ringwald #define __QSUB8		_qsub8
177*5fd0122aSMatthias Ringwald #define __QASX		_saddsubx
178*5fd0122aSMatthias Ringwald #define __QSAX		_qsubaddx
179*5fd0122aSMatthias Ringwald #define __SADD16	_sadd16
180*5fd0122aSMatthias Ringwald #define __SADD8		_sadd8
181*5fd0122aSMatthias Ringwald #define __SASX		_saddsubx
182*5fd0122aSMatthias Ringwald #define __SEL		_sel
183*5fd0122aSMatthias Ringwald #define __SHADD16	_shadd16
184*5fd0122aSMatthias Ringwald #define __SHADD8	_shadd8
185*5fd0122aSMatthias Ringwald #define __SHSUB16	_shsub16
186*5fd0122aSMatthias Ringwald #define __SHSUB8	_shsub8
187*5fd0122aSMatthias Ringwald #define __SMLAD		_smlad
188*5fd0122aSMatthias Ringwald #define __SMLADX	_smladx
189*5fd0122aSMatthias Ringwald #define __SMLALD	_smlald
190*5fd0122aSMatthias Ringwald #define __SMLALDX	_smlaldx
191*5fd0122aSMatthias Ringwald #define __SMLSD		_smlsd
192*5fd0122aSMatthias Ringwald #define __SMLSDX	_smlsdx
193*5fd0122aSMatthias Ringwald #define __SMLSLD	_smlsld
194*5fd0122aSMatthias Ringwald #define __SMLSLDX	_smlsldx
195*5fd0122aSMatthias Ringwald #define __SMMLA		_smmla
196*5fd0122aSMatthias Ringwald #define __SMMLAR	_smmlar
197*5fd0122aSMatthias Ringwald #define __SMMLS		_smmls
198*5fd0122aSMatthias Ringwald #define __SMMLSR	_smmlsr
199*5fd0122aSMatthias Ringwald #define __SMMUL		_smmul
200*5fd0122aSMatthias Ringwald #define __SMMULR	_smmulr
201*5fd0122aSMatthias Ringwald #define __SMUAD		_smuad
202*5fd0122aSMatthias Ringwald #define __SMUADX	_smuadx
203*5fd0122aSMatthias Ringwald #define __SMUSD		_smusd
204*5fd0122aSMatthias Ringwald #define __SMUSDX	_smusdx
205*5fd0122aSMatthias Ringwald #define __SSAT16	_ssat16
206*5fd0122aSMatthias Ringwald #define __SSUB16	_ssub16
207*5fd0122aSMatthias Ringwald #define __SSUB8		_ssub8
208*5fd0122aSMatthias Ringwald #define __SSAX		_ssubaddx
209*5fd0122aSMatthias Ringwald #define __SXTAB		_sxtab
210*5fd0122aSMatthias Ringwald #define __SXTAB16	_sxtab16
211*5fd0122aSMatthias Ringwald #define __SXTAH		_sxtah
212*5fd0122aSMatthias Ringwald #define __UMAAL		_umaal
213*5fd0122aSMatthias Ringwald #define __UADD16	_uadd16
214*5fd0122aSMatthias Ringwald #define __UADD8		_uadd8
215*5fd0122aSMatthias Ringwald #define __UHADD16	_uhadd16
216*5fd0122aSMatthias Ringwald #define __UHADD8	_uhadd8
217*5fd0122aSMatthias Ringwald #define __UASX		_uaddsubx
218*5fd0122aSMatthias Ringwald #define __UHSUB16	_uhsub16
219*5fd0122aSMatthias Ringwald #define __UHSUB8	_uhsub8
220*5fd0122aSMatthias Ringwald #define __UQADD16	_uqadd16
221*5fd0122aSMatthias Ringwald #define __UQADD8	_uqadd8
222*5fd0122aSMatthias Ringwald #define __UQASX		_uqaddsubx
223*5fd0122aSMatthias Ringwald #define __UQSUB16	_uqsub16
224*5fd0122aSMatthias Ringwald #define __UQSUB8	_uqsub8
225*5fd0122aSMatthias Ringwald #define __UQSAX		_uqsubaddx
226*5fd0122aSMatthias Ringwald #define __USAD8		_usad8
227*5fd0122aSMatthias Ringwald #define __USAT16	_usat16
228*5fd0122aSMatthias Ringwald #define __USUB16	_usub16
229*5fd0122aSMatthias Ringwald #define __USUB8		_usub8
230*5fd0122aSMatthias Ringwald #define __USAX		_usubaddx
231*5fd0122aSMatthias Ringwald #define __UXTAB		_uxtab
232*5fd0122aSMatthias Ringwald #define __UXTAB16	_uxtab16
233*5fd0122aSMatthias Ringwald #define __UXTAH		_uxtah
234*5fd0122aSMatthias Ringwald #define __UXTB16	_uxtb16
235*5fd0122aSMatthias Ringwald #endif /*__TI_TMS470_V7M4__*/
236*5fd0122aSMatthias Ringwald 
237*5fd0122aSMatthias Ringwald #endif /*CMSIS_CCS_H_*/
238