]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M4F_MSP432_LaunchPad_IAR_CCS_Keil/driverlib/inc/msp_compatibility.h
commit 9f316c246baafa15c542a5aea81a94f26e3d6507
[freertos] / FreeRTOS / Demo / CORTEX_M4F_MSP432_LaunchPad_IAR_CCS_Keil / driverlib / inc / msp_compatibility.h
1 //*****************************************************************************\r
2 //\r
3 // Copyright (C) 2013 - 2015 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 /******************************************************************************\r
38 * Definitions for 8/16/32-bit wide memory access                              *\r
39 ******************************************************************************/\r
40 #define HWREG8(x)         (*((volatile uint8_t *)(x)))\r
41 #define HWREG16(x)        (*((volatile uint16_t *)(x)))\r
42 #define HWREG32(x)        (*((volatile uint32_t *)(x)))\r
43 #define HWREG(x)          (HWREG16(x))\r
44 #define HWREG8_L(x)       (*((volatile uint8_t *)((uint8_t *)&x)))\r
45 #define HWREG8_H(x)       (*((volatile uint8_t *)(((uint8_t *)&x)+1)))\r
46 #define HWREG16_L(x)      (*((volatile uint16_t *)((uint16_t *)&x)))\r
47 #define HWREG16_H(x)      (*((volatile uint16_t *)(((uint16_t *)&x)+1)))\r
48 \r
49 /******************************************************************************\r
50 * Definitions for 8/16/32-bit wide bit band access                            *\r
51 ******************************************************************************/\r
52 #define HWREGBIT8(x, b)   (HWREG8(((uint32_t)(x) & 0xF0000000) | 0x02000000 | (((uint32_t)(x) & 0x000FFFFF) << 5) | ((b) << 2)))\r
53 #define HWREGBIT16(x, b)  (HWREG16(((uint32_t)(x) & 0xF0000000) | 0x02000000 | (((uint32_t)(x) & 0x000FFFFF) << 5) | ((b) << 2)))\r
54 #define HWREGBIT32(x, b)  (HWREG32(((uint32_t)(x) & 0xF0000000) | 0x02000000 | (((uint32_t)(x) & 0x000FFFFF) << 5) | ((b) << 2)))\r
55 \r
56 // Intrinsics with ARM equivalents\r
57 #if defined ( __TI_ARM__ ) /* TI CGT Compiler */\r
58 \r
59 #include <cmsis_ccs.h>\r
60 \r
61 #define __sleep()                       __wfi()\r
62 #define __deep_sleep()                  { (*((volatile uint32_t *)(0xE000ED10))) |= 0x00000004; __wfi(); (*((volatile uint32_t *)(0xE000ED10))) &= ~0x00000004; }\r
63 #define __low_power_mode_off_on_exit()  { (*((volatile uint32_t *)(0xE000ED10))) &= ~0x00000002; }\r
64 #define __get_SP_register()             __get_MSP()\r
65 #define __set_SP_register(x)            __set_MSP(x)\r
66 #define __get_interrupt_state()         __get_PRIMASK()\r
67 #define __set_interrupt_state(x)        __set_PRIMASK(x)\r
68 #define __enable_interrupt()            _enable_interrupts()\r
69 #define __enable_interrupts()           _enable_interrupts()\r
70 #define __disable_interrupt()           _disable_interrupts()\r
71 #define __disable_interrupts()          _disable_interrupts()\r
72 #define __no_operation()                __asm("  nop")\r
73 \r
74 #elif defined ( __ICCARM__ )  /* IAR Compiler */\r
75 \r
76 #include <stdint.h>\r
77 \r
78 #define __INLINE                        inline\r
79 #include <cmsis_iar.h>\r
80 \r
81 #define __sleep()                       __WFI()\r
82 #define __deep_sleep()                  { (*((volatile uint32_t *)(0xE000ED10))) |= 0x00000004; __WFI(); (*((volatile uint32_t *)(0xE000ED10))) &= ~0x00000004; }\r
83 #define __low_power_mode_off_on_exit()  { (*((volatile uint32_t *)(0xE000ED10))) &= ~0x00000002; }\r
84 #define __get_SP_register()             __get_MSP()\r
85 #define __set_SP_register()             __set_MSP()\r
86 #define __get_interrupt_state()         __get_PRIMASK()\r
87 #define __set_interrupt_state(x)        __set_PRIMASK(x)\r
88 #define __enable_interrupt()            __asm("  cpsie i")\r
89 #define __enable_interrupts()           __asm("  cpsie i")\r
90 #define __disable_interrupt()           __asm("  cpsid i")\r
91 #define __disable_interrupts()          __asm("  cpsid i")\r
92 #define __no_operation()                __asm("  nop")\r
93 \r
94 // Intrinsics without ARM equivalents\r
95 #define __bcd_add_short(x,y)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
96 #define __bcd_add_long(x,y)             { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
97 #define __bcd_add_long_long(x,y)        { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
98 #define __even_in_range(x,y)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
99 #define __data20_write_char(x,y)        { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
100 #define __data20_write_short(x,y)       { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
101 #define __data20_write_long(x,y)        { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
102 #define __never_executed()              { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
103 #define __op_code()                     { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
104 #define __code_distance()               { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
105 #define __bic_SR_register(x)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
106 #define __bis_SR_register(x)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
107 #define __bis_SR_register_on_exit(x)    { while(1); /* Using not-supported MSP430 intrinsic. Recommended to write to SCS_SCR register. */ }\r
108 #define __bic_SR_register_on_exit(x)    { while(1); /* Using not-supported MSP430 intrinsic. Recommended to write to SCS_SCR register. */ }\r
109 #define __delay_cycles(x)               { while(1); /* Using not-supported MSP430 intrinsic. Recommended to use a timer or a custom for loop. */ }\r
110 \r
111 #elif defined ( __CC_ARM ) /* ARM Compiler */\r
112 \r
113 #define __sleep()                       __wfi\r
114 #define __deep_sleep()                  { (*((volatile uint32_t *)(0xE000ED10))) |= 0x00000004; __wfi(); (*((volatile uint32_t *)(0xE000ED10))) &= ~0x00000004; }\r
115 #define __low_power_mode_off_on_exit()  { (*((volatile uint32_t *)(0xE000ED10))) &= ~0x00000002; }\r
116 #define __get_SP_register()             __get_MSP()\r
117 #define __set_SP_register(x)            __set_MSP(x)\r
118 #define __get_interrupt_state()         __get_PRIMASK()\r
119 #define __set_interrupt_state(x)        __set_PRIMASK(x)\r
120 #define __enable_interrupt()            __asm("  cpsie i")\r
121 #define __enable_interrupts()           __asm("  cpsie i")\r
122 #define __disable_interrupt()           __asm("  cpsid i")\r
123 #define __disable_interrupts()          __asm("  cpsid i")\r
124 #define __no_operation()                __asm("  nop")\r
125 \r
126 // Intrinsics without ARM equivalents\r
127 #define __bcd_add_short(x,y)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
128 #define __bcd_add_long(x,y)             { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
129 #define __bcd_add_long_long(x,y)        { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
130 #define __even_in_range(x,y)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
131 #define __data20_write_char(x,y)        { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
132 #define __data20_write_short(x,y)       { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
133 #define __data20_write_long(x,y)        { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
134 #define __never_executed()              { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
135 #define __op_code()                     { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
136 #define __code_distance()               { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
137 #define __bic_SR_register(x)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
138 #define __bis_SR_register(x)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
139 #define __bis_SR_register_on_exit(x)    { while(1); /* Using not-supported MSP430 intrinsic. Recommended to write to SCS_SCR register. */ }\r
140 #define __bic_SR_register_on_exit(x)    { while(1); /* Using not-supported MSP430 intrinsic. Recommended to write to SCS_SCR register. */ }\r
141 #define __delay_cycles(x)               { while(1); /* Using not-supported MSP430 intrinsic. Recommended to use a timer or a custom for loop. */ }\r
142 \r
143 #elif defined ( __GNUC__ ) /* GCC Compiler */\r
144 #undef __wfi\r
145 #define __wfi()                         asm("  wfi")\r
146 #define __sleep()                       __wfi()\r
147 #define __deep_sleep()                  { (*((volatile uint32_t *)(0xE000ED10))) |= 0x00000004; __wfi(); (*((volatile uint32_t *)(0xE000ED10))) &= ~0x00000004; }\r
148 #define __low_power_mode_off_on_exit()  { (*((volatile uint32_t *)(0xE000ED10))) &= ~0x00000002; }\r
149 #define __get_SP_register()             __get_MSP()\r
150 #define __set_SP_register(x)            __set_MSP(x)\r
151 #define __get_interrupt_state()         __get_PRIMASK()\r
152 #define __set_interrupt_state(x)        __set_PRIMASK(x)\r
153 #define __enable_interrupt()            __asm("  cpsie i")\r
154 #define __enable_interrupts()           __asm("  cpsie i")\r
155 #define __disable_interrupt()           __asm("  cpsid i")\r
156 #define __disable_interrupts()          __asm("  cpsid i")\r
157 #define __no_operation()                __asm("  nop")\r
158 \r
159 // Intrinsics without ARM equivalents\r
160 #define __bcd_add_short(x,y)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
161 #define __bcd_add_long(x,y)             { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
162 #define __bcd_add_long_long(x,y)        { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
163 #define __even_in_range(x,y)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
164 #define __data20_write_char(x,y)        { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
165 #define __data20_write_short(x,y)       { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
166 #define __data20_write_long(x,y)        { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
167 #define __never_executed()              { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
168 #define __op_code()                     { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
169 #define __code_distance()               { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
170 #define __bic_SR_register(x)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
171 #define __bis_SR_register(x)            { while(1); /* Using not-supported MSP430 intrinsic. No replacement available. */ }\r
172 #define __bis_SR_register_on_exit(x)    { while(1); /* Using not-supported MSP430 intrinsic. Recommended to write to SCS_SCR register. */ }\r
173 #define __bic_SR_register_on_exit(x)    { while(1); /* Using not-supported MSP430 intrinsic. Recommended to write to SCS_SCR register. */ }\r
174 #define __delay_cycles(x)               { while(1); /* Using not-supported MSP430 intrinsic. Recommended to use a timer or a custom for loop. */ }\r
175 \r
176 #endif\r
177 \r
178 // Intrinsics without ARM equivalents\r
179 #define __low_power_mode_0()            { __sleep(); }\r
180 #define __low_power_mode_1()            { __sleep(); }\r
181 #define __low_power_mode_2()            { __sleep(); }\r
182 #define __low_power_mode_3()            { __deep_sleep(); }\r
183 #define __low_power_mode_4()            { __deep_sleep(); }\r
184 #define __data16_read_addr(x)           (*((volatile uint32_t *)(x)))\r
185 #define __data20_read_char(x)           (*((volatile uint8_t *)(x)))\r
186 #define __data20_read_short(x)          (*((volatile uint16_t *)(x)))\r
187 #define __data20_read_long(x)           (*((volatile uint32_t *)(x)))\r
188 #define __data16_write_addr(x,y)        { (*((volatile uint32_t *)(x))) }\r
189 #define __get_SR_register()             0\r
190 #define __get_SR_register_on_exit()     0\r