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