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