• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright 2025 The Pigweed Authors
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License. You may obtain a copy of
6 * the License at
7 *
8 *     https://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations under
14 * the License.
15 */
16
17/* This relatively simplified linker script will work with many ARMv7-M and
18 * ARMv8-M cores that have on-board memory-mapped RAM and FLASH. For more
19 * complex projects and devices, it's possible this linker script will not be
20 * sufficient as-is.
21 *
22 * This linker script is likely not suitable for a project with a bootloader.
23 */
24
25/* Note: This technically doesn't set the firmware's entry point. Setting the
26 *       firmware entry point is done by setting vector_table[1]
27 *       (Reset_Handler). However, this DOES tell the compiler how to optimize
28 *       when --gc-sections is enabled.
29 */
30ENTRY(Reset)
31
32MEMORY
33{
34  /* Vector Table (typically in flash) */
35  VECTOR_TABLE(rx) : ORIGIN = 0x10000000, LENGTH = 2048
36  /* Internal Flash */
37  FLASH(rx) : ORIGIN = 0x10000800, LENGTH = 2046K
38  /* Internal SRAM */
39  RAM(rwx) : ORIGIN = 0x20000000, LENGTH = 64K
40}
41
42# rp235x-pac crate handlers
43PROVIDE(TIMER0_IRQ_0 = DefaultHandler);
44PROVIDE(TIMER0_IRQ_1 = DefaultHandler);
45PROVIDE(TIMER0_IRQ_2 = DefaultHandler);
46PROVIDE(TIMER0_IRQ_3 = DefaultHandler);
47PROVIDE(TIMER1_IRQ_0 = DefaultHandler);
48PROVIDE(TIMER1_IRQ_1 = DefaultHandler);
49PROVIDE(TIMER1_IRQ_2 = DefaultHandler);
50PROVIDE(TIMER1_IRQ_3 = DefaultHandler);
51PROVIDE(PWM_IRQ_WRAP_0 = DefaultHandler);
52PROVIDE(PWM_IRQ_WRAP_1 = DefaultHandler);
53PROVIDE(DMA_IRQ_0 = DefaultHandler);
54PROVIDE(DMA_IRQ_1 = DefaultHandler);
55PROVIDE(DMA_IRQ_2 = DefaultHandler);
56PROVIDE(DMA_IRQ_3 = DefaultHandler);
57PROVIDE(USBCTRL_IRQ = DefaultHandler);
58PROVIDE(PIO0_IRQ_0 = DefaultHandler);
59PROVIDE(PIO0_IRQ_1 = DefaultHandler);
60PROVIDE(PIO1_IRQ_0 = DefaultHandler);
61PROVIDE(PIO1_IRQ_1 = DefaultHandler);
62PROVIDE(PIO2_IRQ_0 = DefaultHandler);
63PROVIDE(PIO2_IRQ_1 = DefaultHandler);
64PROVIDE(IO_IRQ_BANK0 = DefaultHandler);
65PROVIDE(IO_IRQ_BANK0_NS = DefaultHandler);
66PROVIDE(IO_IRQ_QSPI = DefaultHandler);
67PROVIDE(IO_IRQ_QSPI_NS = DefaultHandler);
68PROVIDE(SIO_IRQ_FIFO = DefaultHandler);
69PROVIDE(SIO_IRQ_BELL = DefaultHandler);
70PROVIDE(SIO_IRQ_FIFO_NS = DefaultHandler);
71PROVIDE(SIO_IRQ_BELL_NS = DefaultHandler);
72PROVIDE(SIO_IRQ_MTIMECMP = DefaultHandler);
73PROVIDE(CLOCKS_IRQ = DefaultHandler);
74PROVIDE(SPI0_IRQ = DefaultHandler);
75PROVIDE(SPI1_IRQ = DefaultHandler);
76PROVIDE(UART0_IRQ = DefaultHandler);
77PROVIDE(UART1_IRQ = DefaultHandler);
78PROVIDE(ADC_IRQ_FIFO = DefaultHandler);
79PROVIDE(I2C0_IRQ = DefaultHandler);
80PROVIDE(I2C1_IRQ = DefaultHandler);
81PROVIDE(OTP_IRQ = DefaultHandler);
82PROVIDE(TRNG_IRQ = DefaultHandler);
83PROVIDE(PLL_SYS_IRQ = DefaultHandler);
84PROVIDE(PLL_USB_IRQ = DefaultHandler);
85PROVIDE(POWMAN_IRQ_POW = DefaultHandler);
86PROVIDE(POWMAN_IRQ_TIMER  = DefaultHandler);
87