added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
JojoS
Date:
Sat Sep 10 15:32:04 2016 +0000
Revision:
147:ba84b7dc41a7
Parent:
121:7f86b4238bec
added prescaler for 16 bit timers (solution as in LPC11xx), default prescaler 31 for max 28 ms period time

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 121:7f86b4238bec 1 /*
mbed_official 121:7f86b4238bec 2 ** ###################################################################
mbed_official 121:7f86b4238bec 3 ** Processors: MKL27Z64VDA4
mbed_official 121:7f86b4238bec 4 ** MKL27Z64VFM4
mbed_official 121:7f86b4238bec 5 ** MKL27Z64VFT4
mbed_official 121:7f86b4238bec 6 ** MKL27Z64VLH4
mbed_official 121:7f86b4238bec 7 ** MKL27Z64VMP4
mbed_official 121:7f86b4238bec 8 **
mbed_official 121:7f86b4238bec 9 ** Compiler: GNU C Compiler
mbed_official 121:7f86b4238bec 10 ** Reference manual: KL27P64M48SF2RM, Rev. 1, Sep 2014
mbed_official 121:7f86b4238bec 11 ** Version: rev. 1.4, 2014-09-22
mbed_official 121:7f86b4238bec 12 ** Build: b151217
mbed_official 121:7f86b4238bec 13 **
mbed_official 121:7f86b4238bec 14 ** Abstract:
mbed_official 121:7f86b4238bec 15 ** Linker file for the GNU C Compiler
mbed_official 121:7f86b4238bec 16 **
mbed_official 121:7f86b4238bec 17 ** Copyright (c) 2015 Freescale Semiconductor, Inc.
mbed_official 121:7f86b4238bec 18 ** All rights reserved.
mbed_official 121:7f86b4238bec 19 **
mbed_official 121:7f86b4238bec 20 ** Redistribution and use in source and binary forms, with or without modification,
mbed_official 121:7f86b4238bec 21 ** are permitted provided that the following conditions are met:
mbed_official 121:7f86b4238bec 22 **
mbed_official 121:7f86b4238bec 23 ** o Redistributions of source code must retain the above copyright notice, this list
mbed_official 121:7f86b4238bec 24 ** of conditions and the following disclaimer.
mbed_official 121:7f86b4238bec 25 **
mbed_official 121:7f86b4238bec 26 ** o Redistributions in binary form must reproduce the above copyright notice, this
mbed_official 121:7f86b4238bec 27 ** list of conditions and the following disclaimer in the documentation and/or
mbed_official 121:7f86b4238bec 28 ** other materials provided with the distribution.
mbed_official 121:7f86b4238bec 29 **
mbed_official 121:7f86b4238bec 30 ** o Neither the name of Freescale Semiconductor, Inc. nor the names of its
mbed_official 121:7f86b4238bec 31 ** contributors may be used to endorse or promote products derived from this
mbed_official 121:7f86b4238bec 32 ** software without specific prior written permission.
mbed_official 121:7f86b4238bec 33 **
mbed_official 121:7f86b4238bec 34 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
mbed_official 121:7f86b4238bec 35 ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
mbed_official 121:7f86b4238bec 36 ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 121:7f86b4238bec 37 ** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
mbed_official 121:7f86b4238bec 38 ** ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
mbed_official 121:7f86b4238bec 39 ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
mbed_official 121:7f86b4238bec 40 ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
mbed_official 121:7f86b4238bec 41 ** ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
mbed_official 121:7f86b4238bec 42 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
mbed_official 121:7f86b4238bec 43 ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 121:7f86b4238bec 44 **
mbed_official 121:7f86b4238bec 45 ** http: www.freescale.com
mbed_official 121:7f86b4238bec 46 ** mail: support@freescale.com
mbed_official 121:7f86b4238bec 47 **
mbed_official 121:7f86b4238bec 48 ** ###################################################################
mbed_official 121:7f86b4238bec 49 */
mbed_official 121:7f86b4238bec 50
mbed_official 121:7f86b4238bec 51 /* Entry Point */
mbed_official 121:7f86b4238bec 52 ENTRY(Reset_Handler)
mbed_official 121:7f86b4238bec 53
mbed_official 121:7f86b4238bec 54 __ram_vector_table__ = 1;
mbed_official 121:7f86b4238bec 55
mbed_official 121:7f86b4238bec 56 /* Heap 1/4 of ram and stack 1/8 */
mbed_official 121:7f86b4238bec 57 __stack_size__ = 0x800;
mbed_official 121:7f86b4238bec 58 __heap_size__ = 0x1000;
mbed_official 121:7f86b4238bec 59
mbed_official 121:7f86b4238bec 60 HEAP_SIZE = DEFINED(__heap_size__) ? __heap_size__ : 0x0400;
mbed_official 121:7f86b4238bec 61 STACK_SIZE = DEFINED(__stack_size__) ? __stack_size__ : 0x0400;
mbed_official 121:7f86b4238bec 62 M_VECTOR_RAM_SIZE = DEFINED(__ram_vector_table__) ? 0x0200 : 0x0;
mbed_official 121:7f86b4238bec 63
mbed_official 121:7f86b4238bec 64 /* Specify the memory areas */
mbed_official 121:7f86b4238bec 65 MEMORY
mbed_official 121:7f86b4238bec 66 {
mbed_official 121:7f86b4238bec 67 m_interrupts (RX) : ORIGIN = 0x00000000, LENGTH = 0x00000200
mbed_official 121:7f86b4238bec 68 m_flash_config (RX) : ORIGIN = 0x00000400, LENGTH = 0x00000010
mbed_official 121:7f86b4238bec 69 m_text (RX) : ORIGIN = 0x00000410, LENGTH = 0x0000FBF0
mbed_official 121:7f86b4238bec 70 m_data (RW) : ORIGIN = 0x1FFFF000, LENGTH = 0x00004000
mbed_official 121:7f86b4238bec 71 }
mbed_official 121:7f86b4238bec 72
mbed_official 121:7f86b4238bec 73 /* Define output sections */
mbed_official 121:7f86b4238bec 74 SECTIONS
mbed_official 121:7f86b4238bec 75 {
mbed_official 121:7f86b4238bec 76 /* The startup code goes first into internal flash */
mbed_official 121:7f86b4238bec 77 .interrupts :
mbed_official 121:7f86b4238bec 78 {
mbed_official 121:7f86b4238bec 79 __VECTOR_TABLE = .;
mbed_official 121:7f86b4238bec 80 . = ALIGN(4);
mbed_official 121:7f86b4238bec 81 KEEP(*(.isr_vector)) /* Startup code */
mbed_official 121:7f86b4238bec 82 . = ALIGN(4);
mbed_official 121:7f86b4238bec 83 } > m_interrupts
mbed_official 121:7f86b4238bec 84
mbed_official 121:7f86b4238bec 85 .flash_config :
mbed_official 121:7f86b4238bec 86 {
mbed_official 121:7f86b4238bec 87 . = ALIGN(4);
mbed_official 121:7f86b4238bec 88 KEEP(*(.FlashConfig)) /* Flash Configuration Field (FCF) */
mbed_official 121:7f86b4238bec 89 . = ALIGN(4);
mbed_official 121:7f86b4238bec 90 } > m_flash_config
mbed_official 121:7f86b4238bec 91
mbed_official 121:7f86b4238bec 92 /* The program code and other data goes into internal flash */
mbed_official 121:7f86b4238bec 93 .text :
mbed_official 121:7f86b4238bec 94 {
mbed_official 121:7f86b4238bec 95 . = ALIGN(4);
mbed_official 121:7f86b4238bec 96 *(.text) /* .text sections (code) */
mbed_official 121:7f86b4238bec 97 *(.text*) /* .text* sections (code) */
mbed_official 121:7f86b4238bec 98 *(.rodata) /* .rodata sections (constants, strings, etc.) */
mbed_official 121:7f86b4238bec 99 *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
mbed_official 121:7f86b4238bec 100 *(.glue_7) /* glue arm to thumb code */
mbed_official 121:7f86b4238bec 101 *(.glue_7t) /* glue thumb to arm code */
mbed_official 121:7f86b4238bec 102 *(.eh_frame)
mbed_official 121:7f86b4238bec 103 KEEP (*(.init))
mbed_official 121:7f86b4238bec 104 KEEP (*(.fini))
mbed_official 121:7f86b4238bec 105 . = ALIGN(4);
mbed_official 121:7f86b4238bec 106 } > m_text
mbed_official 121:7f86b4238bec 107
mbed_official 121:7f86b4238bec 108 .ARM.extab :
mbed_official 121:7f86b4238bec 109 {
mbed_official 121:7f86b4238bec 110 *(.ARM.extab* .gnu.linkonce.armextab.*)
mbed_official 121:7f86b4238bec 111 } > m_text
mbed_official 121:7f86b4238bec 112
mbed_official 121:7f86b4238bec 113 .ARM :
mbed_official 121:7f86b4238bec 114 {
mbed_official 121:7f86b4238bec 115 __exidx_start = .;
mbed_official 121:7f86b4238bec 116 *(.ARM.exidx*)
mbed_official 121:7f86b4238bec 117 __exidx_end = .;
mbed_official 121:7f86b4238bec 118 } > m_text
mbed_official 121:7f86b4238bec 119
mbed_official 121:7f86b4238bec 120 .ctors :
mbed_official 121:7f86b4238bec 121 {
mbed_official 121:7f86b4238bec 122 __CTOR_LIST__ = .;
mbed_official 121:7f86b4238bec 123 /* gcc uses crtbegin.o to find the start of
mbed_official 121:7f86b4238bec 124 the constructors, so we make sure it is
mbed_official 121:7f86b4238bec 125 first. Because this is a wildcard, it
mbed_official 121:7f86b4238bec 126 doesn't matter if the user does not
mbed_official 121:7f86b4238bec 127 actually link against crtbegin.o; the
mbed_official 121:7f86b4238bec 128 linker won't look for a file to match a
mbed_official 121:7f86b4238bec 129 wildcard. The wildcard also means that it
mbed_official 121:7f86b4238bec 130 doesn't matter which directory crtbegin.o
mbed_official 121:7f86b4238bec 131 is in. */
mbed_official 121:7f86b4238bec 132 KEEP (*crtbegin.o(.ctors))
mbed_official 121:7f86b4238bec 133 KEEP (*crtbegin?.o(.ctors))
mbed_official 121:7f86b4238bec 134 /* We don't want to include the .ctor section from
mbed_official 121:7f86b4238bec 135 from the crtend.o file until after the sorted ctors.
mbed_official 121:7f86b4238bec 136 The .ctor section from the crtend file contains the
mbed_official 121:7f86b4238bec 137 end of ctors marker and it must be last */
mbed_official 121:7f86b4238bec 138 KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors))
mbed_official 121:7f86b4238bec 139 KEEP (*(SORT(.ctors.*)))
mbed_official 121:7f86b4238bec 140 KEEP (*(.ctors))
mbed_official 121:7f86b4238bec 141 __CTOR_END__ = .;
mbed_official 121:7f86b4238bec 142 } > m_text
mbed_official 121:7f86b4238bec 143
mbed_official 121:7f86b4238bec 144 .dtors :
mbed_official 121:7f86b4238bec 145 {
mbed_official 121:7f86b4238bec 146 __DTOR_LIST__ = .;
mbed_official 121:7f86b4238bec 147 KEEP (*crtbegin.o(.dtors))
mbed_official 121:7f86b4238bec 148 KEEP (*crtbegin?.o(.dtors))
mbed_official 121:7f86b4238bec 149 KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors))
mbed_official 121:7f86b4238bec 150 KEEP (*(SORT(.dtors.*)))
mbed_official 121:7f86b4238bec 151 KEEP (*(.dtors))
mbed_official 121:7f86b4238bec 152 __DTOR_END__ = .;
mbed_official 121:7f86b4238bec 153 } > m_text
mbed_official 121:7f86b4238bec 154
mbed_official 121:7f86b4238bec 155 .preinit_array :
mbed_official 121:7f86b4238bec 156 {
mbed_official 121:7f86b4238bec 157 PROVIDE_HIDDEN (__preinit_array_start = .);
mbed_official 121:7f86b4238bec 158 KEEP (*(.preinit_array*))
mbed_official 121:7f86b4238bec 159 PROVIDE_HIDDEN (__preinit_array_end = .);
mbed_official 121:7f86b4238bec 160 } > m_text
mbed_official 121:7f86b4238bec 161
mbed_official 121:7f86b4238bec 162 .init_array :
mbed_official 121:7f86b4238bec 163 {
mbed_official 121:7f86b4238bec 164 PROVIDE_HIDDEN (__init_array_start = .);
mbed_official 121:7f86b4238bec 165 KEEP (*(SORT(.init_array.*)))
mbed_official 121:7f86b4238bec 166 KEEP (*(.init_array*))
mbed_official 121:7f86b4238bec 167 PROVIDE_HIDDEN (__init_array_end = .);
mbed_official 121:7f86b4238bec 168 } > m_text
mbed_official 121:7f86b4238bec 169
mbed_official 121:7f86b4238bec 170 .fini_array :
mbed_official 121:7f86b4238bec 171 {
mbed_official 121:7f86b4238bec 172 PROVIDE_HIDDEN (__fini_array_start = .);
mbed_official 121:7f86b4238bec 173 KEEP (*(SORT(.fini_array.*)))
mbed_official 121:7f86b4238bec 174 KEEP (*(.fini_array*))
mbed_official 121:7f86b4238bec 175 PROVIDE_HIDDEN (__fini_array_end = .);
mbed_official 121:7f86b4238bec 176 } > m_text
mbed_official 121:7f86b4238bec 177
mbed_official 121:7f86b4238bec 178 __etext = .; /* define a global symbol at end of code */
mbed_official 121:7f86b4238bec 179 __DATA_ROM = .; /* Symbol is used by startup for data initialization */
mbed_official 121:7f86b4238bec 180
mbed_official 121:7f86b4238bec 181 /* reserve MTB memory at the beginning of m_data */
mbed_official 121:7f86b4238bec 182 .mtb : /* MTB buffer address as defined by the hardware */
mbed_official 121:7f86b4238bec 183 {
mbed_official 121:7f86b4238bec 184 . = ALIGN(8);
mbed_official 121:7f86b4238bec 185 _mtb_start = .;
mbed_official 121:7f86b4238bec 186 KEEP(*(.mtb_buf)) /* need to KEEP Micro Trace Buffer as not referenced by application */
mbed_official 121:7f86b4238bec 187 . = ALIGN(8);
mbed_official 121:7f86b4238bec 188 _mtb_end = .;
mbed_official 121:7f86b4238bec 189 } > m_data
mbed_official 121:7f86b4238bec 190
mbed_official 121:7f86b4238bec 191 .interrupts_ram :
mbed_official 121:7f86b4238bec 192 {
mbed_official 121:7f86b4238bec 193 . = ALIGN(4);
mbed_official 121:7f86b4238bec 194 __VECTOR_RAM__ = .;
mbed_official 121:7f86b4238bec 195 __interrupts_ram_start__ = .; /* Create a global symbol at data start */
mbed_official 121:7f86b4238bec 196 *(.m_interrupts_ram) /* This is a user defined section */
mbed_official 121:7f86b4238bec 197 . += M_VECTOR_RAM_SIZE;
mbed_official 121:7f86b4238bec 198 . = ALIGN(4);
mbed_official 121:7f86b4238bec 199 __interrupts_ram_end__ = .; /* Define a global symbol at data end */
mbed_official 121:7f86b4238bec 200 } > m_data
mbed_official 121:7f86b4238bec 201
mbed_official 121:7f86b4238bec 202 __VECTOR_RAM = DEFINED(__ram_vector_table__) ? __VECTOR_RAM__ : ORIGIN(m_interrupts);
mbed_official 121:7f86b4238bec 203 __RAM_VECTOR_TABLE_SIZE_BYTES = DEFINED(__ram_vector_table__) ? (__interrupts_ram_end__ - __interrupts_ram_start__) : 0x0;
mbed_official 121:7f86b4238bec 204
mbed_official 121:7f86b4238bec 205 .data : AT(__DATA_ROM)
mbed_official 121:7f86b4238bec 206 {
mbed_official 121:7f86b4238bec 207 . = ALIGN(4);
mbed_official 121:7f86b4238bec 208 __DATA_RAM = .;
mbed_official 121:7f86b4238bec 209 __data_start__ = .; /* create a global symbol at data start */
mbed_official 121:7f86b4238bec 210 *(.data) /* .data sections */
mbed_official 121:7f86b4238bec 211 *(.data*) /* .data* sections */
mbed_official 121:7f86b4238bec 212 KEEP(*(.jcr*))
mbed_official 121:7f86b4238bec 213 . = ALIGN(4);
mbed_official 121:7f86b4238bec 214 __data_end__ = .; /* define a global symbol at data end */
mbed_official 121:7f86b4238bec 215 } > m_data
mbed_official 121:7f86b4238bec 216
mbed_official 121:7f86b4238bec 217 __DATA_END = __DATA_ROM + (__data_end__ - __data_start__);
mbed_official 121:7f86b4238bec 218 text_end = ORIGIN(m_text) + LENGTH(m_text);
mbed_official 121:7f86b4238bec 219 ASSERT(__DATA_END <= text_end, "region m_text overflowed with text and data")
mbed_official 121:7f86b4238bec 220
mbed_official 121:7f86b4238bec 221 USB_RAM_GAP = DEFINED(__usb_ram_size__) ? __usb_ram_size__ : 0x800;
mbed_official 121:7f86b4238bec 222 /* Uninitialized data section */
mbed_official 121:7f86b4238bec 223 .bss :
mbed_official 121:7f86b4238bec 224 {
mbed_official 121:7f86b4238bec 225 /* This is used by the startup in order to initialize the .bss section */
mbed_official 121:7f86b4238bec 226 . = ALIGN(4);
mbed_official 121:7f86b4238bec 227 __START_BSS = .;
mbed_official 121:7f86b4238bec 228 __bss_start__ = .;
mbed_official 121:7f86b4238bec 229 *(.bss)
mbed_official 121:7f86b4238bec 230 *(.bss*)
mbed_official 121:7f86b4238bec 231 . = ALIGN(512);
mbed_official 121:7f86b4238bec 232 USB_RAM_START = .;
mbed_official 121:7f86b4238bec 233 . += USB_RAM_GAP;
mbed_official 121:7f86b4238bec 234 *(COMMON)
mbed_official 121:7f86b4238bec 235 . = ALIGN(4);
mbed_official 121:7f86b4238bec 236 __bss_end__ = .;
mbed_official 121:7f86b4238bec 237 __END_BSS = .;
mbed_official 121:7f86b4238bec 238 } > m_data
mbed_official 121:7f86b4238bec 239
mbed_official 121:7f86b4238bec 240 .heap :
mbed_official 121:7f86b4238bec 241 {
mbed_official 121:7f86b4238bec 242 . = ALIGN(8);
mbed_official 121:7f86b4238bec 243 __end__ = .;
mbed_official 121:7f86b4238bec 244 PROVIDE(end = .);
mbed_official 121:7f86b4238bec 245 __HeapBase = .;
mbed_official 121:7f86b4238bec 246 . += HEAP_SIZE;
mbed_official 121:7f86b4238bec 247 __HeapLimit = .;
mbed_official 121:7f86b4238bec 248 __heap_limit = .; /* Add for _sbrk */
mbed_official 121:7f86b4238bec 249 } > m_data
mbed_official 121:7f86b4238bec 250
mbed_official 121:7f86b4238bec 251 .stack :
mbed_official 121:7f86b4238bec 252 {
mbed_official 121:7f86b4238bec 253 . = ALIGN(8);
mbed_official 121:7f86b4238bec 254 . += STACK_SIZE;
mbed_official 121:7f86b4238bec 255 } > m_data
mbed_official 121:7f86b4238bec 256
mbed_official 121:7f86b4238bec 257 m_usb_bdt USB_RAM_START (NOLOAD) :
mbed_official 121:7f86b4238bec 258 {
mbed_official 121:7f86b4238bec 259 *(m_usb_bdt)
mbed_official 121:7f86b4238bec 260 USB_RAM_BDT_END = .;
mbed_official 121:7f86b4238bec 261 }
mbed_official 121:7f86b4238bec 262
mbed_official 121:7f86b4238bec 263 m_usb_global USB_RAM_BDT_END (NOLOAD) :
mbed_official 121:7f86b4238bec 264 {
mbed_official 121:7f86b4238bec 265 *(m_usb_global)
mbed_official 121:7f86b4238bec 266 }
mbed_official 121:7f86b4238bec 267
mbed_official 121:7f86b4238bec 268 /* Initializes stack on the end of block */
mbed_official 121:7f86b4238bec 269 __StackTop = ORIGIN(m_data) + LENGTH(m_data);
mbed_official 121:7f86b4238bec 270 __StackLimit = __StackTop - STACK_SIZE;
mbed_official 121:7f86b4238bec 271 PROVIDE(__stack = __StackTop);
mbed_official 121:7f86b4238bec 272
mbed_official 121:7f86b4238bec 273 .ARM.attributes 0 : { *(.ARM.attributes) }
mbed_official 121:7f86b4238bec 274
mbed_official 121:7f86b4238bec 275 ASSERT(__StackLimit >= __HeapLimit, "region m_data overflowed with stack and heap")
mbed_official 121:7f86b4238bec 276 }
mbed_official 121:7f86b4238bec 277