]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/MSP430X_MSP430FR5969_LaunchPad_IAR_CCS/lnk_msp430fr5969.cmd
Update version number to 9.0.0rc2.
[freertos] / FreeRTOS / Demo / MSP430X_MSP430FR5969_LaunchPad_IAR_CCS / lnk_msp430fr5969.cmd
1 /* ============================================================================ */\r
2 /* Copyright (c) 2014, Texas Instruments Incorporated                           */\r
3 /*  All rights reserved.                                                        */\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 distribution.     */\r
15 /*                                                                              */\r
16 /*  *  Neither the name of Texas Instruments Incorporated nor the names of      */\r
17 /*     its contributors may be used to endorse or promote products derived      */\r
18 /*     from this software without specific prior written permission.            */\r
19 /*                                                                              */\r
20 /*  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" */\r
21 /*  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,       */\r
22 /*  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR      */\r
23 /*  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR            */\r
24 /*  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,       */\r
25 /*  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,         */\r
26 /*  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; */\r
27 /*  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,    */\r
28 /*  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR     */\r
29 /*  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,              */\r
30 /*  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                          */\r
31 /* ============================================================================ */\r
32 \r
33 /******************************************************************************/\r
34 /* lnk_msp430fr5969.cmd - LINKER COMMAND FILE FOR LINKING MSP430FR5969 PROGRAMS     */\r
35 /*                                                                            */\r
36 /*   Usage:  lnk430 <obj files...>    -o <out file> -m <map file> lnk.cmd     */\r
37 /*           cl430  <src files...> -z -o <out file> -m <map file> lnk.cmd     */\r
38 /*                                                                            */\r
39 /*----------------------------------------------------------------------------*/\r
40 /* These linker options are for command line linking only.  For IDE linking,  */\r
41 /* you should set your linker options in Project Properties                   */\r
42 /* -c                                               LINK USING C CONVENTIONS  */\r
43 /* -stack  0x0100                                   SOFTWARE STACK SIZE       */\r
44 /* -heap   0x0100                                   HEAP AREA SIZE            */\r
45 /*                                                                            */\r
46 /*----------------------------------------------------------------------------*/\r
47 /* Version: 1.159                                                             */\r
48 /*----------------------------------------------------------------------------*/\r
49 \r
50 /****************************************************************************/\r
51 /* Specify the system memory map                                            */\r
52 /****************************************************************************/\r
53 \r
54 MEMORY\r
55 {\r
56     SFR                     : origin = 0x0000, length = 0x0010\r
57     PERIPHERALS_8BIT        : origin = 0x0010, length = 0x00F0\r
58     PERIPHERALS_16BIT       : origin = 0x0100, length = 0x0100\r
59     RAM                     : origin = 0x1C00, length = 0x0800\r
60     INFOA                   : origin = 0x1980, length = 0x0080\r
61     INFOB                   : origin = 0x1900, length = 0x0080\r
62     INFOC                   : origin = 0x1880, length = 0x0080\r
63     INFOD                   : origin = 0x1800, length = 0x0080\r
64     FRAM                    : origin = 0x4400, length = 0xBB80\r
65     FRAM2                   : origin = 0x10000,length = 0x4000\r
66     JTAGSIGNATURE           : origin = 0xFF80, length = 0x0004, fill = 0xFFFF\r
67     BSLSIGNATURE            : origin = 0xFF84, length = 0x0004, fill = 0xFFFF\r
68     IPESIGNATURE            : origin = 0xFF88, length = 0x0008, fill = 0xFFFF\r
69     INT00                   : origin = 0xFF90, length = 0x0002\r
70     INT01                   : origin = 0xFF92, length = 0x0002\r
71     INT02                   : origin = 0xFF94, length = 0x0002\r
72     INT03                   : origin = 0xFF96, length = 0x0002\r
73     INT04                   : origin = 0xFF98, length = 0x0002\r
74     INT05                   : origin = 0xFF9A, length = 0x0002\r
75     INT06                   : origin = 0xFF9C, length = 0x0002\r
76     INT07                   : origin = 0xFF9E, length = 0x0002\r
77     INT08                   : origin = 0xFFA0, length = 0x0002\r
78     INT09                   : origin = 0xFFA2, length = 0x0002\r
79     INT10                   : origin = 0xFFA4, length = 0x0002\r
80     INT11                   : origin = 0xFFA6, length = 0x0002\r
81     INT12                   : origin = 0xFFA8, length = 0x0002\r
82     INT13                   : origin = 0xFFAA, length = 0x0002\r
83     INT14                   : origin = 0xFFAC, length = 0x0002\r
84     INT15                   : origin = 0xFFAE, length = 0x0002\r
85     INT16                   : origin = 0xFFB0, length = 0x0002\r
86     INT17                   : origin = 0xFFB2, length = 0x0002\r
87     INT18                   : origin = 0xFFB4, length = 0x0002\r
88     INT19                   : origin = 0xFFB6, length = 0x0002\r
89     INT20                   : origin = 0xFFB8, length = 0x0002\r
90     INT21                   : origin = 0xFFBA, length = 0x0002\r
91     INT22                   : origin = 0xFFBC, length = 0x0002\r
92     INT23                   : origin = 0xFFBE, length = 0x0002\r
93     INT24                   : origin = 0xFFC0, length = 0x0002\r
94     INT25                   : origin = 0xFFC2, length = 0x0002\r
95     INT26                   : origin = 0xFFC4, length = 0x0002\r
96     INT27                   : origin = 0xFFC6, length = 0x0002\r
97     INT28                   : origin = 0xFFC8, length = 0x0002\r
98     INT29                   : origin = 0xFFCA, length = 0x0002\r
99     INT30                   : origin = 0xFFCC, length = 0x0002\r
100     INT31                   : origin = 0xFFCE, length = 0x0002\r
101     INT32                   : origin = 0xFFD0, length = 0x0002\r
102     INT33                   : origin = 0xFFD2, length = 0x0002\r
103     INT34                   : origin = 0xFFD4, length = 0x0002\r
104     INT35                   : origin = 0xFFD6, length = 0x0002\r
105     INT36                   : origin = 0xFFD8, length = 0x0002\r
106     INT37                   : origin = 0xFFDA, length = 0x0002\r
107     INT38                   : origin = 0xFFDC, length = 0x0002\r
108     INT39                   : origin = 0xFFDE, length = 0x0002\r
109     INT40                   : origin = 0xFFE0, length = 0x0002\r
110     INT41                   : origin = 0xFFE2, length = 0x0002\r
111     INT42                   : origin = 0xFFE4, length = 0x0002\r
112     INT43                   : origin = 0xFFE6, length = 0x0002\r
113     INT44                   : origin = 0xFFE8, length = 0x0002\r
114     INT45                   : origin = 0xFFEA, length = 0x0002\r
115     INT46                   : origin = 0xFFEC, length = 0x0002\r
116     INT47                   : origin = 0xFFEE, length = 0x0002\r
117     INT48                   : origin = 0xFFF0, length = 0x0002\r
118     INT49                   : origin = 0xFFF2, length = 0x0002\r
119     INT50                   : origin = 0xFFF4, length = 0x0002\r
120     INT51                   : origin = 0xFFF6, length = 0x0002\r
121     INT52                   : origin = 0xFFF8, length = 0x0002\r
122     INT53                   : origin = 0xFFFA, length = 0x0002\r
123     INT54                   : origin = 0xFFFC, length = 0x0002\r
124     RESET                   : origin = 0xFFFE, length = 0x0002\r
125 }\r
126 \r
127 /****************************************************************************/\r
128 /* Specify the sections allocation into memory                              */\r
129 /****************************************************************************/\r
130 \r
131 SECTIONS\r
132 {\r
133     GROUP(READ_WRITE_MEMORY)\r
134     {\r
135        .TI.persistent : {}                  /* For #pragma persistent            */\r
136        .cio           : {}                  /* C I/O Buffer                      */\r
137        .sysmem        : {}                  /* Dynamic memory allocation area    */\r
138     } PALIGN(0x0400), RUN_END(fram_rx_start) > 0x4400\r
139 \r
140     .cinit            : {}  > FRAM          /* Initialization tables             */\r
141     .pinit            : {}  > FRAM          /* C++ Constructor tables            */\r
142     .init_array       : {}  > FRAM          /* C++ Constructor tables            */\r
143     .mspabi.exidx     : {}  > FRAM          /* C++ Constructor tables            */\r
144     .mspabi.extab     : {}  > FRAM          /* C++ Constructor tables            */\r
145 #ifndef __LARGE_DATA_MODEL__\r
146     .const            : {} >> FRAM          /* Constant data                     */\r
147 #else\r
148     .const            : {} >> FRAM | FRAM2  /* Constant data                     */\r
149 #endif\r
150 \r
151     .text:_isr        : {}  > FRAM          /* Code ISRs                         */\r
152 #ifndef __LARGE_DATA_MODEL__\r
153     .text             : {} >> FRAM          /* Code                              */\r
154 #else\r
155     .text             : {} >> FRAM2 | FRAM  /* Code                              */\r
156 #endif\r
157 \r
158     GROUP(IPENCAPSULATED_MEMORY)\r
159     {\r
160        .ipestruct     : {}                  /* IPE Data structure             */\r
161        .ipe           : {}                  /* IPE                            */\r
162        .ipe:_isr      : {}                  /* IPE ISRs                       */\r
163     } PALIGN(0x0400), RUN_START(fram_ipe_start) RUN_END(fram_ipe_end) > FRAM\r
164 \r
165     .jtagsignature : {} > JTAGSIGNATURE     /* JTAG Signature                    */\r
166     .bslsignature  : {} > BSLSIGNATURE      /* BSL Signature                     */\r
167 \r
168     GROUP(SIGNATURE_SHAREDMEMORY)\r
169     {\r
170        .ipesignature   : {}                 /* IPE Signature                     */\r
171        .jtagpassword   : {}                 /* JTAG Password                     */\r
172     } > IPESIGNATURE\r
173 \r
174     .bss        : {} > RAM                  /* Global & static vars              */\r
175     .data       : {} > RAM                  /* Global & static vars              */\r
176     .TI.noinit  : {} > RAM                  /* For #pragma noinit                */\r
177     .stack      : {} > RAM (HIGH)           /* Software system stack             */\r
178 \r
179     .infoA     : {} > INFOA              /* MSP430 INFO FRAM  Memory segments */\r
180     .infoB     : {} > INFOB\r
181     .infoC     : {} > INFOC\r
182     .infoD     : {} > INFOD\r
183 \r
184     /* MSP430 Interrupt vectors          */\r
185     .int00       : {}               > INT00\r
186     .int01       : {}               > INT01\r
187     .int02       : {}               > INT02\r
188     .int03       : {}               > INT03\r
189     .int04       : {}               > INT04\r
190     .int05       : {}               > INT05\r
191     .int06       : {}               > INT06\r
192     .int07       : {}               > INT07\r
193     .int08       : {}               > INT08\r
194     .int09       : {}               > INT09\r
195     .int10       : {}               > INT10\r
196     .int11       : {}               > INT11\r
197     .int12       : {}               > INT12\r
198     .int13       : {}               > INT13\r
199     .int14       : {}               > INT14\r
200     .int15       : {}               > INT15\r
201     .int16       : {}               > INT16\r
202     .int17       : {}               > INT17\r
203     .int18       : {}               > INT18\r
204     .int19       : {}               > INT19\r
205     .int20       : {}               > INT20\r
206     .int21       : {}               > INT21\r
207     .int22       : {}               > INT22\r
208     .int23       : {}               > INT23\r
209     .int24       : {}               > INT24\r
210     .int25       : {}               > INT25\r
211     .int26       : {}               > INT26\r
212     .int27       : {}               > INT27\r
213     .int28       : {}               > INT28\r
214     .int29       : {}               > INT29\r
215     AES256       : { * ( .int30 ) } > INT30 type = VECT_INIT\r
216     RTC          : { * ( .int31 ) } > INT31 type = VECT_INIT\r
217     PORT4        : { * ( .int32 ) } > INT32 type = VECT_INIT\r
218     PORT3        : { * ( .int33 ) } > INT33 type = VECT_INIT\r
219     TIMER3_A1    : { * ( .int34 ) } > INT34 type = VECT_INIT\r
220     TIMER3_A0    : { * ( .int35 ) } > INT35 type = VECT_INIT\r
221     PORT2        : { * ( .int36 ) } > INT36 type = VECT_INIT\r
222     TIMER2_A1    : { * ( .int37 ) } > INT37 type = VECT_INIT\r
223     TIMER2_A0    : { * ( .int38 ) } > INT38 type = VECT_INIT\r
224     PORT1        : { * ( .int39 ) } > INT39 type = VECT_INIT\r
225     TIMER1_A1    : { * ( .int40 ) } > INT40 type = VECT_INIT\r
226     TIMER1_A0    : { * ( .int41 ) } > INT41 type = VECT_INIT\r
227     DMA          : { * ( .int42 ) } > INT42 type = VECT_INIT\r
228     USCI_A1      : { * ( .int43 ) } > INT43 type = VECT_INIT\r
229     TIMER0_A1    : { * ( .int44 ) } > INT44 type = VECT_INIT\r
230     TIMER0_A0    : { * ( .int45 ) } > INT45 type = VECT_INIT\r
231     ADC12        : { * ( .int46 ) } > INT46 type = VECT_INIT\r
232     USCI_B0      : { * ( .int47 ) } > INT47 type = VECT_INIT\r
233     USCI_A0      : { * ( .int48 ) } > INT48 type = VECT_INIT\r
234     WDT          : { * ( .int49 ) } > INT49 type = VECT_INIT\r
235     TIMER0_B1    : { * ( .int50 ) } > INT50 type = VECT_INIT\r
236     TIMER0_B0    : { * ( .int51 ) } > INT51 type = VECT_INIT\r
237     COMP_E       : { * ( .int52 ) } > INT52 type = VECT_INIT\r
238     UNMI         : { * ( .int53 ) } > INT53 type = VECT_INIT\r
239     SYSNMI       : { * ( .int54 ) } > INT54 type = VECT_INIT\r
240     .reset       : {}               > RESET  /* MSP430 Reset vector         */ \r
241 }\r
242 \r
243 /****************************************************************************/\r
244 /* MPU/IPE Specific memory segment definitons                               */\r
245 /****************************************************************************/\r
246 \r
247 #ifdef _IPE_ENABLE\r
248    #define IPE_MPUIPLOCK 0x0080\r
249    #define IPE_MPUIPENA 0x0040\r
250    #define IPE_MPUIPPUC 0x0020\r
251 \r
252    // Evaluate settings for the control setting of IP Encapsulation\r
253    #if defined(_IPE_ASSERTPUC1)\r
254         #if defined(_IPE_LOCK ) && (_IPE_ASSERTPUC1 == 0x08))\r
255          fram_ipe_enable_value = (IPE_MPUIPENA | IPE_MPUIPPUC |IPE_MPUIPLOCK);\r
256         #elif defined(_IPE_LOCK )\r
257          fram_ipe_enable_value = (IPE_MPUIPENA | IPE_MPUIPLOCK);\r
258       #elif (_IPE_ASSERTPUC1 == 0x08)\r
259          fram_ipe_enable_value = (IPE_MPUIPENA | IPE_MPUIPPUC);\r
260       #else\r
261          fram_ipe_enable_value = (IPE_MPUIPENA);\r
262       #endif\r
263    #else\r
264       #if defined(_IPE_LOCK )\r
265          fram_ipe_enable_value = (IPE_MPUIPENA | IPE_MPUIPLOCK);\r
266       #else\r
267          fram_ipe_enable_value = (IPE_MPUIPENA);\r
268       #endif\r
269    #endif\r
270 \r
271    // Segment definitions\r
272    #ifdef _IPE_MANUAL                  // For custom sizes selected in the GUI\r
273       fram_ipe_border1 = (_IPE_SEGB1>>4);\r
274       fram_ipe_border2 = (_IPE_SEGB2>>4);\r
275    #else                           // Automated sizes generated by the Linker\r
276       fram_ipe_border2 = (fram_ipe_end + 0x400)>> 4;\r
277       fram_ipe_border1 = fram_ipe_start >> 4;\r
278    #endif\r
279 \r
280    fram_ipe_settings_struct_address = Ipe_settingsStruct >> 4;\r
281    fram_ipe_checksum = ~((fram_ipe_enable_value & fram_ipe_border2 & fram_ipe_border1) | (fram_ipe_enable_value & ~fram_ipe_border2 & ~fram_ipe_border1) | (~fram_ipe_enable_value & fram_ipe_border2 & ~fram_ipe_border1) | (~fram_ipe_enable_value & ~fram_ipe_border2 & fram_ipe_border1));\r
282 #endif\r
283 \r
284 #ifdef _MPU_ENABLE\r
285    #define MPUPW (0xA500)    /* MPU Access Password */\r
286    #define MPUENA (0x0001)   /* MPU Enable */\r
287    #define MPULOCK (0x0002)  /* MPU Lock */\r
288    #define MPUSEGIE (0x0010) /* MPU Enable NMI on Segment violation */\r
289 \r
290    __mpu_enable = 1;\r
291    // Segment definitions\r
292    #ifdef _MPU_MANUAL // For custom sizes selected in the GUI\r
293       mpu_segment_border1 = _MPU_SEGB1 >> 4;\r
294       mpu_segment_border2 = _MPU_SEGB2 >> 4;\r
295       mpu_sam_value = (_MPU_SAM0 << 12) | (_MPU_SAM3 << 8) | (_MPU_SAM2 << 4) | _MPU_SAM1;\r
296    #else // Automated sizes generated by Linker\r
297       mpu_segment_border1 = fram_rx_start >> 4;\r
298       mpu_segment_border2 = fram_rx_start >> 4;\r
299       mpu_sam_value = 0x1513; // Info R, Seg3 RX, Seg2 R, Seg1 RW\r
300    #endif\r
301    #ifdef _MPU_LOCK\r
302       #ifdef _MPU_ENABLE_NMI\r
303          mpu_ctl0_value = MPUPW | MPUENA | MPULOCK | MPUSEGIE;\r
304       #else\r
305          mpu_ctl0_value = MPUPW | MPUENA | MPULOCK;\r
306       #endif\r
307    #else\r
308       #ifdef _MPU_ENABLE_NMI\r
309          mpu_ctl0_value = MPUPW | MPUENA | MPUSEGIE;\r
310       #else\r
311          mpu_ctl0_value = MPUPW | MPUENA;\r
312       #endif\r
313    #endif\r
314 #endif\r
315 \r
316 /****************************************************************************/\r
317 /* Include peripherals memory map                                           */\r
318 /****************************************************************************/\r
319 \r
320 -l msp430fr5969.cmd\r
321 \r