|
enum | Peripheral {
BitBang,
Adc,
Busctrl,
Clocks,
Dma,
I2c0,
I2c1,
Jtag,
Pio0,
Pio1,
Ppb,
Psm,
Pwm,
Resets,
Rosc,
Rtc,
Sio,
Spi0,
Spi1,
Ssi,
Syscfg,
Sysinfo,
Tbman,
Timer,
Uart0,
Uart1,
Usb,
UsbDpram,
VregAndChipReset,
Watchdog,
Xip
} |
|
lbuild module: modm:platform:core
This module specializes the generic modm:platform:cortex-m
module with RP2040-specific startup code and linkerscripts.
- Note
- Second-stage Bootloader The external Flash memory requires additional setup, which is provided by the second-stage bootloader called boot2. You can select a pre-defined configuration via the
modm:platform:core:boot2
option.
Startup
The __modm_initialize_platform()
callback resets all hardware to a known initial state.
Linkerscript
The RP2040 currently only has one linkerscript template for internal SRAM and external Flash. You can place static objects in sections via the modm_section
attribute:
uint64_t
data = 0x1234567812345678ull;
uint8_t buffer[1024];
uint8_t display_buffer[480][320];
Dual-Core Static RAM (SRAM)
The RP2040 memory map consists out of the main RAM (SRAM0-3 with striped bank access) and the dedicated memories for each core (SRAM4-5). Note that the stack size for both cores is the same and can be changed with the modm:platform:cortex-m:main_stack_size
option, however, the main stack for CPU1 is only added if modm is build with the modm:platform:multicore
module to free up the unused memory.
┌────────────────────────┐◄ __core0_end
│ .noinit_core0 │
│ .bss_core0 │
│ .data_core0 │
CORE0 │ +MAIN_STACK_SIZE │◄ __main_stack_top
0x2004 1000 ├────────────────────────┤◄ __core1_end, __core0_start
│ .noinit_core1 │
│ .bss_core1 │
│ .data_core1 │
CORE1 │ (+MAIN_STACK_SIZE) │◄ __main1_stack_top (only with :platform:multicore)
0x2004 0000 ├────────────────────────┤◄ __ram_end, __core1_start
│ +HEAP_RAM │
│ .noinit_ram │
│ .noinit │
│ .faststack │
│ .bss_ram │
│ .bss │
│ .data_ram │
│ .data │
│ .fastdata │
│ .fastcode │
RAM │ (.vector_ram) │◄ only if remapped into RAM
0x2000 0000 └────────────────────────┘◄ __ram_start
┌────────────────────────┐◄ __flash_end
│ (unused) │
├────────────────────────┤◄ __rom_end
│ .table.heap │
│ .table.copy.extern │
tables │ .table.zero.extern │
│ .table.copy.intern │
│ .table.zero.intern │
│ │
│ .data_core1 │
│ .data_core0 │
copy │ .data_ram │
only │ .data │
│ .fastcode │
│ .fastdata │
│ │
│ .note.gnu.build-id │
│ .assertion │
│ .hardware_init │
│ (.eh_frame) │
read │ (.ARM.exidx) │ only with C++ exceptions enabled
only │ (.ARM.extab) │
│ .init_array │
│ .init │
│ .rodata │
│ .text │
│ .vector_rom │
FLASH │ .boot2 │◄ see :platform:core:boot2 option
0x1000 0000 └────────────────────────┘◄ __rom_start, __flash_start
Module Options
modm:platform:core:boot2: Second-stage bootloader variant
Generated with: generic_03h in [at25sf128a, generic_03h, is25lp080, w25q080, w25x10cl]
modm:platform:core:boot2_size: Specify the size of external QSPI FLASH chip
Generated with: 2Mi (2097152) in [0 .. 2Mi .. 16Mi]