]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M4F_MSP432_LaunchPad_IAR_CCS_Keil/driverlib/inc/msp_compatibility.h
Final V8.2.1 release ready for tagging:
[freertos] / FreeRTOS / Demo / CORTEX_M4F_MSP432_LaunchPad_IAR_CCS_Keil / driverlib / inc / msp_compatibility.h
1 //*****************************************************************************\r
2 //\r
3 // Copyright (C) 2013 - 2014 Texas Instruments Incorporated - http://www.ti.com/\r
4 //\r
5 // Redistribution and use in source and binary forms, with or without\r
6 // modification, are permitted provided that the following conditions\r
7 // are met:\r
8 //\r
9 //  Redistributions of source code must retain the above copyright\r
10 //  notice, this list of conditions and the following disclaimer.\r
11 //\r
12 //  Redistributions in binary form must reproduce the above copyright\r
13 //  notice, this list of conditions and the following disclaimer in the\r
14 //  documentation and/or other materials provided with the\r
15 //  distribution.\r
16 //\r
17 //  Neither the name of Texas Instruments Incorporated nor the names of\r
18 //  its contributors may be used to endorse or promote products derived\r
19 //  from this software without specific prior written permission.\r
20 //\r
21 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
22 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
23 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
24 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
25 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
26 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
27 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
28 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
29 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
30 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
31 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
32 //\r
33 // MSP430 intrinsic redefinitions for use with MSP432 Family Devices\r
34 //\r
35 //****************************************************************************\r
36 \r
37 // Intrinsics with ARM equivalents\r
38 #if defined ( __TMS470__ ) /* TI CGT Compiler */\r
39 \r
40 #include <cmsis_ccs.h>\r
41 \r
42 #define __sleep()                       __wfi()\r
43 #define __deep_sleep()                  { (*((volatile uint32_t *)(0xE000ED10))) |= 0x00000004; __wfi(); (*((volatile uint32_t *)(0xE000ED10))) &= ~0x00000004; }\r
44 #define __low_power_mode_off_on_exit()  { (*((volatile uint32_t *)(0xE000ED10))) &= ~0x00000002; }\r
45 #define __get_SP_register()             __get_MSP()\r
46 #define __set_SP_register(x)            __set_MSP(x)\r
47 #define __get_interrupt_state()         __get_PRIMASK()\r
48 #define __set_interrupt_state(x)        __set_PRIMASK(x)\r
49 #define __enable_interrupt()            _enable_interrupts()\r
50 #define __enable_interrupts()           _enable_interrupts()\r
51 #define __disable_interrupt()           _disable_interrupts()\r
52 #define __disable_interrupts()          _disable_interrupts()\r
53 #define __no_operation()                __asm("  nop")\r
54 \r
55 #elif defined ( __ICCARM__ )  /* IAR Compiler */\r
56 \r
57 #include <stdint.h>\r
58 \r
59 #define __INLINE                        inline\r
60 #include <cmsis_iar.h>\r
61 \r
62 #define __sleep()                       __WFI()\r
63 #define __deep_sleep()                  { (*((volatile uint32_t *)(0xE000ED10))) |= 0x00000004; __WFI(); (*((volatile uint32_t *)(0xE000ED10))) &= ~0x00000004; }\r
64 #define __low_power_mode_off_on_exit()  { (*((volatile uint32_t *)(0xE000ED10))) &= ~0x00000002; }\r
65 #define __get_SP_register()             __get_MSP()\r
66 #define __set_SP_register()             __set_MSP()\r
67 #define __get_interrupt_state()         __get_PRIMASK()\r
68 #define __set_interrupt_state(x)        __set_PRIMASK(x)\r
69 #define __enable_interrupt()            __asm("  cpsie i")\r
70 #define __enable_interrupts()           __asm("  cpsie i")\r
71 #define __disable_interrupt()           __asm("  cpsid i")\r
72 #define __disable_interrupts()          __asm("  cpsid i")\r
73 #define __no_operation()                __asm("  nop")\r
74 \r
75 // Intrinsics without ARM equivalents\r
76 #define __bcd_add_short(x,y)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
77 #define __bcd_add_long(x,y)             { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
78 #define __bcd_add_long_long(x,y)        { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
79 #define __even_in_range(x,y)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
80 #define __data20_write_char(x,y)        { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
81 #define __data20_write_short(x,y)       { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
82 #define __data20_write_long(x,y)        { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
83 #define __never_executed()              { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
84 #define __op_code()                     { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
85 #define __code_distance()               { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
86 #define __bic_SR_register(x)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
87 #define __bis_SR_register(x)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
88 #define __bis_SR_register_on_exit(x)    { while(1); /* Using not-supported MSP430 intrinsic. Recommended to write to SCS_SCR register. */ }\r
89 #define __bic_SR_register_on_exit(x)    { while(1); /* Using not-supported MSP430 intrinsic. Recommended to write to SCS_SCR register. */ }\r
90 \r
91 #elif defined ( __CC_ARM ) /* ARM Compiler */\r
92 \r
93 #define __sleep()                       __wfi\r
94 #define __deep_sleep()                  { (*((volatile uint32_t *)(0xE000ED10))) |= 0x00000004; __wfi(); (*((volatile uint32_t *)(0xE000ED10))) &= ~0x00000004; }\r
95 #define __low_power_mode_off_on_exit()  { (*((volatile uint32_t *)(0xE000ED10))) &= ~0x00000002; }\r
96 #define __get_SP_register()             __get_MSP()\r
97 #define __set_SP_register(x)            __set_MSP(x)\r
98 #define __get_interrupt_state()         __get_PRIMASK()\r
99 #define __set_interrupt_state(x)        __set_PRIMASK(x)\r
100 #define __enable_interrupt()            __asm("  cpsie i")\r
101 #define __enable_interrupts()           __asm("  cpsie i")\r
102 #define __disable_interrupt()           __asm("  cpsid i")\r
103 #define __disable_interrupts()          __asm("  cpsid i")\r
104 #define __no_operation()                __asm("  nop")\r
105 \r
106 // Intrinsics without ARM equivalents\r
107 #define __bcd_add_short(x,y)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
108 #define __bcd_add_long(x,y)             { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
109 #define __bcd_add_long_long(x,y)        { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
110 #define __even_in_range(x,y)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
111 #define __data20_write_char(x,y)        { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
112 #define __data20_write_short(x,y)       { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
113 #define __data20_write_long(x,y)        { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
114 #define __never_executed()              { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
115 #define __op_code()                     { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
116 #define __code_distance()               { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
117 #define __bic_SR_register(x)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
118 #define __bis_SR_register(x)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
119 #define __bis_SR_register_on_exit(x)    { while(1); /* Using not-supported MSP430 intrinsic. Recommended to write to SCS_SCR register. */ }\r
120 #define __bic_SR_register_on_exit(x)    { while(1); /* Using not-supported MSP430 intrinsic. Recommended to write to SCS_SCR register. */ }\r
121 \r
122 #elif defined ( __GNUC__ ) /* GCC Compiler */\r
123 \r
124 #define __sleep()                       __wfi()\r
125 #define __deep_sleep()                  { (*((volatile uint32_t *)(0xE000ED10))) |= 0x00000004; __wfi(); (*((volatile uint32_t *)(0xE000ED10))) &= ~0x00000004; }\r
126 #define __low_power_mode_off_on_exit()  { (*((volatile uint32_t *)(0xE000ED10))) &= ~0x00000002; }\r
127 #define __get_SP_register()             __get_MSP()\r
128 #define __set_SP_register(x)            __set_MSP(x)\r
129 #define __get_interrupt_state()         __get_PRIMASK()\r
130 #define __set_interrupt_state(x)        __set_PRIMASK(x)\r
131 #define __enable_interrupt()            __asm("  cpsie i")\r
132 #define __enable_interrupts()           __asm("  cpsie i")\r
133 #define __disable_interrupt()           __asm("  cpsid i")\r
134 #define __disable_interrupts()          __asm("  cpsid i")\r
135 #define __no_operation()                __asm("  nop")\r
136 \r
137 // Intrinsics without ARM equivalents\r
138 #define __bcd_add_short(x,y)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
139 #define __bcd_add_long(x,y)             { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
140 #define __bcd_add_long_long(x,y)        { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
141 #define __even_in_range(x,y)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
142 #define __data20_write_char(x,y)        { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
143 #define __data20_write_short(x,y)       { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
144 #define __data20_write_long(x,y)        { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
145 #define __never_executed()              { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
146 #define __op_code()                     { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
147 #define __code_distance()               { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
148 #define __bic_SR_register(x)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
149 #define __bis_SR_register(x)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
150 #define __bis_SR_register_on_exit(x)    { while(1); /* Using not-supported MSP430 intrinsic. Recommended to write to SCS_SCR register. */ }\r
151 #define __bic_SR_register_on_exit(x)    { while(1); /* Using not-supported MSP430 intrinsic. Recommended to write to SCS_SCR register. */ }\r
152 \r
153 #endif\r
154 \r
155 // Intrinsics without ARM equivalents\r
156 #define __low_power_mode_0()            { __sleep(); }\r
157 #define __low_power_mode_1()            { __sleep(); }\r
158 #define __low_power_mode_2()            { __sleep(); }\r
159 #define __low_power_mode_3()            { __deep_sleep(); }\r
160 #define __low_power_mode_4()            { __deep_sleep(); }\r
161 #define __data16_read_addr(x)           (*((volatile uint32_t *)(x)))\r
162 #define __data20_read_char(x)           (*((volatile uint8_t *)(x)))\r
163 #define __data20_read_short(x)          (*((volatile uint16_t *)(x)))\r
164 #define __data20_read_long(x)           (*((volatile uint32_t *)(x)))\r
165 #define __data16_write_addr(x,y)        { (*((volatile uint32_t *)(x))) }\r
166 #define __get_SR_register()             0\r
167 #define __get_SR_register_on_exit()     0\r