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