mirror of
https://github.com/qmk/qmk_firmware.git
synced 2024-11-22 03:19:24 +00:00
Merge 0056a1f0d0
into 36b5559b99
This commit is contained in:
commit
1e093b670b
@ -3,9 +3,6 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
#define DEBUG_MATRIX_SCAN_RATE
|
|
||||||
|
|
||||||
#define QMK_WAITING_TEST_BUSY_PIN GP8
|
#define QMK_WAITING_TEST_BUSY_PIN GP8
|
||||||
#define QMK_WAITING_TEST_YIELD_PIN GP9
|
#define QMK_WAITING_TEST_YIELD_PIN GP9
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
"pin": "GP25"
|
"pin": "GP25"
|
||||||
},
|
},
|
||||||
"ws2812": {
|
"ws2812": {
|
||||||
|
"driver": "vendor",
|
||||||
"pin": "GP25"
|
"pin": "GP25"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,117 +0,0 @@
|
|||||||
/*
|
|
||||||
ChibiOS - Copyright (C) 2006..2021 Giovanni Di Sirio
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* RP2040 memory setup.
|
|
||||||
*/
|
|
||||||
MEMORY
|
|
||||||
{
|
|
||||||
flash0 (rx) : org = 0x00000000, len = 16k /* ROM */
|
|
||||||
flash1 (rx) : org = 0x10000000, len = DEFINED(FLASH_LEN) ? FLASH_LEN : 2048k /* XIP */
|
|
||||||
flash2 (rx) : org = 0x00000000, len = 0
|
|
||||||
flash3 (rx) : org = 0x00000000, len = 0
|
|
||||||
flash4 (rx) : org = 0x00000000, len = 0
|
|
||||||
flash5 (rx) : org = 0x00000000, len = 0
|
|
||||||
flash6 (rx) : org = 0x00000000, len = 0
|
|
||||||
flash7 (rx) : org = 0x00000000, len = 0
|
|
||||||
ram0 (wx) : org = 0x20000000, len = 256k /* SRAM0 striped */
|
|
||||||
ram1 (wx) : org = 0x00000000, len = 256k /* SRAM0 non striped */
|
|
||||||
ram2 (wx) : org = 0x00000000, len = 0
|
|
||||||
ram3 (wx) : org = 0x00000000, len = 0
|
|
||||||
ram4 (wx) : org = 0x20040000, len = 4k /* SRAM4 */
|
|
||||||
ram5 (wx) : org = 0x20041000, len = 4k /* SRAM5 */
|
|
||||||
ram6 (wx) : org = 0x00000000, len = 0
|
|
||||||
ram7 (wx) : org = 0x20041f00, len = 256 /* SRAM5 boot */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* For each data/text section two region are defined, a virtual region
|
|
||||||
and a load region (_LMA suffix).*/
|
|
||||||
|
|
||||||
/* Flash region to be used for exception vectors.*/
|
|
||||||
REGION_ALIAS("VECTORS_FLASH", flash1);
|
|
||||||
REGION_ALIAS("VECTORS_FLASH_LMA", flash1);
|
|
||||||
|
|
||||||
/* Flash region to be used for constructors and destructors.*/
|
|
||||||
REGION_ALIAS("XTORS_FLASH", flash1);
|
|
||||||
REGION_ALIAS("XTORS_FLASH_LMA", flash1);
|
|
||||||
|
|
||||||
/* Flash region to be used for code text.*/
|
|
||||||
REGION_ALIAS("TEXT_FLASH", flash1);
|
|
||||||
REGION_ALIAS("TEXT_FLASH_LMA", flash1);
|
|
||||||
|
|
||||||
/* Flash region to be used for read only data.*/
|
|
||||||
REGION_ALIAS("RODATA_FLASH", flash1);
|
|
||||||
REGION_ALIAS("RODATA_FLASH_LMA", flash1);
|
|
||||||
|
|
||||||
/* Flash region to be used for various.*/
|
|
||||||
REGION_ALIAS("VARIOUS_FLASH", flash1);
|
|
||||||
REGION_ALIAS("VARIOUS_FLASH_LMA", flash1);
|
|
||||||
|
|
||||||
/* Flash region to be used for RAM(n) initialization data.*/
|
|
||||||
REGION_ALIAS("RAM_INIT_FLASH_LMA", flash1);
|
|
||||||
|
|
||||||
/* RAM region to be used for Main stack. This stack accommodates the processing
|
|
||||||
of all exceptions and interrupts.*/
|
|
||||||
REGION_ALIAS("MAIN_STACK_RAM", ram4);
|
|
||||||
|
|
||||||
/* RAM region to be used for the process stack. This is the stack used by
|
|
||||||
the main() function.*/
|
|
||||||
REGION_ALIAS("PROCESS_STACK_RAM", ram4);
|
|
||||||
|
|
||||||
/* RAM region to be used for Main stack. This stack accommodates the processing
|
|
||||||
of all exceptions and interrupts.*/
|
|
||||||
REGION_ALIAS("C1_MAIN_STACK_RAM", ram5);
|
|
||||||
|
|
||||||
/* RAM region to be used for the process stack. This is the stack used by
|
|
||||||
the main() function.*/
|
|
||||||
REGION_ALIAS("C1_PROCESS_STACK_RAM", ram5);
|
|
||||||
|
|
||||||
/* RAM region to be used for data segment.*/
|
|
||||||
REGION_ALIAS("DATA_RAM", ram0);
|
|
||||||
REGION_ALIAS("DATA_RAM_LMA", flash1);
|
|
||||||
|
|
||||||
/* RAM region to be used for BSS segment.*/
|
|
||||||
REGION_ALIAS("BSS_RAM", ram0);
|
|
||||||
|
|
||||||
/* RAM region to be used for the default heap.*/
|
|
||||||
REGION_ALIAS("HEAP_RAM", ram0);
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
.flash_begin : {
|
|
||||||
__flash_binary_start = .;
|
|
||||||
} > flash1
|
|
||||||
|
|
||||||
.boot2 : {
|
|
||||||
__boot2_start__ = .;
|
|
||||||
KEEP (*(.boot2))
|
|
||||||
__boot2_end__ = .;
|
|
||||||
} > flash1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Generic rules inclusion.*/
|
|
||||||
INCLUDE rules_stacks.ld
|
|
||||||
INCLUDE rules_stacks_c1.ld
|
|
||||||
INCLUDE RP2040_rules_code_with_boot2.ld
|
|
||||||
INCLUDE RP2040_rules_data_with_timecrit.ld
|
|
||||||
INCLUDE rules_memory.ld
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
.flash_end : {
|
|
||||||
__flash_binary_end = .;
|
|
||||||
} > flash1
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
/*
|
|
||||||
ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
.data : ALIGN(4)
|
|
||||||
{
|
|
||||||
PROVIDE(_textdata = LOADADDR(.data));
|
|
||||||
PROVIDE(_data = .);
|
|
||||||
__textdata_base__ = LOADADDR(.data);
|
|
||||||
__data_base__ = .;
|
|
||||||
*(vtable)
|
|
||||||
*(.time_critical*)
|
|
||||||
. = ALIGN(4);
|
|
||||||
*(.data)
|
|
||||||
*(.data.*)
|
|
||||||
*(.ramtext)
|
|
||||||
. = ALIGN(4);
|
|
||||||
PROVIDE(_edata = .);
|
|
||||||
__data_end__ = .;
|
|
||||||
} > DATA_RAM AT > DATA_RAM_LMA
|
|
||||||
|
|
||||||
.bss (NOLOAD) : ALIGN(4)
|
|
||||||
{
|
|
||||||
__bss_base__ = .;
|
|
||||||
*(.bss)
|
|
||||||
*(.bss.*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN(4);
|
|
||||||
__bss_end__ = .;
|
|
||||||
PROVIDE(end = .);
|
|
||||||
} > BSS_RAM
|
|
||||||
}
|
|
@ -6,6 +6,7 @@
|
|||||||
#include "gpio.h"
|
#include "gpio.h"
|
||||||
#include "wait.h"
|
#include "wait.h"
|
||||||
#include "pico/bootrom.h"
|
#include "pico/bootrom.h"
|
||||||
|
#include "pico/runtime_init.h"
|
||||||
|
|
||||||
#if !defined(RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED)
|
#if !defined(RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED)
|
||||||
# define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED_MASK 0U
|
# define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED_MASK 0U
|
||||||
@ -39,7 +40,7 @@ const uint32_t magic_token = 0xCAFEB0BA;
|
|||||||
void __late_init(void) {
|
void __late_init(void) {
|
||||||
// All clocks have to be enabled before jumping to the bootloader function,
|
// All clocks have to be enabled before jumping to the bootloader function,
|
||||||
// otherwise the bootrom will be stuck infinitely.
|
// otherwise the bootrom will be stuck infinitely.
|
||||||
clocks_init();
|
runtime_init_clocks();
|
||||||
|
|
||||||
if (magic_location != magic_token) {
|
if (magic_location != magic_token) {
|
||||||
magic_location = magic_token;
|
magic_location = magic_token;
|
||||||
|
@ -159,8 +159,8 @@ ifneq ($(findstring RP2040, $(MCU)),)
|
|||||||
# Linker script to use
|
# Linker script to use
|
||||||
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
|
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
|
||||||
# or <keyboard_dir>/ld/
|
# or <keyboard_dir>/ld/
|
||||||
|
MCU_LDSCRIPT ?= RP2040_FLASH
|
||||||
STARTUPLD_CONTRIB = $(CHIBIOS_CONTRIB)/os/common/startup/ARMCMx/compilers/GCC/ld
|
STARTUPLD_CONTRIB = $(CHIBIOS_CONTRIB)/os/common/startup/ARMCMx/compilers/GCC/ld
|
||||||
MCU_LDSCRIPT ?= RP2040_FLASH_TIMECRIT
|
|
||||||
LDFLAGS += -L $(STARTUPLD_CONTRIB)
|
LDFLAGS += -L $(STARTUPLD_CONTRIB)
|
||||||
|
|
||||||
# Startup code to use
|
# Startup code to use
|
||||||
|
@ -302,11 +302,14 @@ EXTRAINCDIRS += $(CHIBIOS)/os/license \
|
|||||||
# QMK specific MCU family support selection.
|
# QMK specific MCU family support selection.
|
||||||
##############################################################################
|
##############################################################################
|
||||||
ifneq ("$(wildcard $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)/$(MCU_SERIES).mk)","")
|
ifneq ("$(wildcard $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)/$(MCU_SERIES).mk)","")
|
||||||
# Either by MCU series e.g. STM32/STM32F1xx.mk or...
|
# MCU series e.g. STM32/STM32F1xx.mk
|
||||||
include $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)/$(MCU_SERIES).mk
|
include $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)/$(MCU_SERIES).mk
|
||||||
else ifneq ("$(wildcard $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)/$(MCU_FAMILY).mk)","")
|
else ifneq ("$(wildcard $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)/$(MCU_FAMILY).mk)","")
|
||||||
# By MCU family e.g. STM32/STM32.mk
|
# MCU family e.g. STM32/STM32.mk
|
||||||
include $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)/$(MCU_FAMILY).mk
|
include $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)/$(MCU_FAMILY).mk
|
||||||
|
else ifneq ("$(wildcard $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)/$(MCU_SERIES)/$(MCU_SERIES).mk)","")
|
||||||
|
# MCU series in subfolders e.g. RP/RP2040/RP2040.mk
|
||||||
|
include $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)/$(MCU_SERIES)/$(MCU_SERIES).mk
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#
|
#
|
||||||
|
101
platforms/chibios/vendors/RP/RP2040.mk
vendored
101
platforms/chibios/vendors/RP/RP2040.mk
vendored
@ -1,101 +0,0 @@
|
|||||||
#
|
|
||||||
# Raspberry Pi RP2040 specific drivers
|
|
||||||
##############################################################################
|
|
||||||
COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/vendor/$(MCU_FAMILY)/$(MCU_SERIES)
|
|
||||||
|
|
||||||
ifeq ($(strip $(WS2812_DRIVER)), vendor)
|
|
||||||
OPT_DEFS += -DRP_DMA_REQUIRED=TRUE
|
|
||||||
endif
|
|
||||||
|
|
||||||
#
|
|
||||||
# Raspberry Pi Pico SDK Support
|
|
||||||
##############################################################################
|
|
||||||
ADEFS += -DCRT0_VTOR_INIT=1 \
|
|
||||||
-DCRT0_EXTRA_CORES_NUMBER=0 \
|
|
||||||
-DCRT0_INIT_VECTORS=1
|
|
||||||
|
|
||||||
CFLAGS += -DPICO_NO_FPGA_CHECK \
|
|
||||||
-DNDEBUG
|
|
||||||
|
|
||||||
#
|
|
||||||
# Pico SDK source and header files needed by QMK and ChibiOS
|
|
||||||
##############################################################################
|
|
||||||
PICOSDKROOT := $(TOP_DIR)/lib/pico-sdk
|
|
||||||
|
|
||||||
PICOSDKSRC = $(PICOSDKROOT)/src/rp2_common/hardware_clocks/clocks.c \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_pll/pll.c \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_pio/pio.c \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_timer/timer.c \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_flash/flash.c \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_gpio/gpio.c \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_claim/claim.c \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_watchdog/watchdog.c \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_xosc/xosc.c \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/pico_bootrom/bootrom.c
|
|
||||||
|
|
||||||
PICOSDKINC = $(CHIBIOS)//os/various/pico_bindings/dumb/include \
|
|
||||||
$(PICOSDKROOT)/src/common/pico_base/include \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/pico_platform/include \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_base/include \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_clocks/include \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_claim/include \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_flash/include \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_gpio/include \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_irq/include \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_pll/include \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_pio/include \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_sync/include \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_timer/include \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_resets/include \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_watchdog/include \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_xosc/include \
|
|
||||||
$(PICOSDKROOT)/src/rp2040/hardware_regs/include \
|
|
||||||
$(PICOSDKROOT)/src/rp2040/hardware_structs/include \
|
|
||||||
$(PICOSDKROOT)/src/boards/include \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/pico_bootrom/include
|
|
||||||
|
|
||||||
PLATFORM_SRC += $(PICOSDKSRC)
|
|
||||||
EXTRAINCDIRS += $(PICOSDKINC)
|
|
||||||
|
|
||||||
PLATFORM_RP2040_PATH := $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)
|
|
||||||
|
|
||||||
PLATFORM_SRC += $(PLATFORM_RP2040_PATH)/stage2_bootloaders.c \
|
|
||||||
$(PLATFORM_RP2040_PATH)/pico_sdk_shims.c
|
|
||||||
|
|
||||||
EXTRAINCDIRS += $(PLATFORM_RP2040_PATH)
|
|
||||||
|
|
||||||
#
|
|
||||||
# RP2040 optimized compiler intrinsics
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
# The RP2040 sdk provides optimized compiler intrinsics which override the GCC
|
|
||||||
# built-ins. Some of these functions are located in the bootrom of the RP2040.
|
|
||||||
# Execution of these functions is realized via a vtable that is populated on
|
|
||||||
# bootup. This mechanism needs startup code and linker script support from
|
|
||||||
# ChibiOS, which is currently not implemented thus these functions are disabled
|
|
||||||
# ATM.
|
|
||||||
PICOSDKINTRINSICSSRC = $(PICOSDKROOT)/src/rp2_common/pico_divider/divider.S \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S
|
|
||||||
|
|
||||||
PICOSDKINTRINSICSINC = $(PICOSDKROOT)/src/common/pico_base/include \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/pico_platfrom/include \
|
|
||||||
$(PICOSDKROOT)/src/rp2_common/hardware_divider/include
|
|
||||||
|
|
||||||
# integer division intrinsics utilizing the RP2040 hardware divider
|
|
||||||
OPT_DEFS += -DPICO_DIVIDER_IN_RAM=1
|
|
||||||
OPT_DEFS += -DPICO_DIVIDER_DISABLE_INTERRUPTS=1
|
|
||||||
|
|
||||||
CFLAGS += -Wl,--wrap=__aeabi_idiv
|
|
||||||
CFLAGS += -Wl,--wrap=__aeabi_idivmod
|
|
||||||
CFLAGS += -Wl,--wrap=__aeabi_ldivmod
|
|
||||||
CFLAGS += -Wl,--wrap=__aeabi_uidiv
|
|
||||||
CFLAGS += -Wl,--wrap=__aeabi_uidivmod
|
|
||||||
CFLAGS += -Wl,--wrap=__aeabi_uldivmod
|
|
||||||
|
|
||||||
# 64bit integer intrinsics
|
|
||||||
OPT_DEFS += -DPICO_INT64_OPS_IN_RAM=1
|
|
||||||
|
|
||||||
CFLAGS += -Wl,--wrap=__aeabi_lmul
|
|
||||||
|
|
||||||
PLATFORM_SRC += $(PICOSDKINTRINSICSSRC)
|
|
||||||
EXTRAINCDIRS += $(PICOSDKINTRINSICSINC)
|
|
52
platforms/chibios/vendors/RP/RP2040/RP2040.mk
vendored
Normal file
52
platforms/chibios/vendors/RP/RP2040/RP2040.mk
vendored
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
PLATFORM_RP_PATH := $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)
|
||||||
|
PLATFORM_RP2040_PATH := $(PLATFORM_RP_PATH)/$(MCU_SERIES)
|
||||||
|
|
||||||
|
include $(PLATFORM_RP_PATH)/rp_common.mk
|
||||||
|
|
||||||
|
#
|
||||||
|
# RP2040 specific source and header files needed by QMK and ChibiOS
|
||||||
|
##############################################################################
|
||||||
|
RP2040_INC = $(PICOSDKROOT)/src/rp2040/hardware_regs/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2040/hardware_structs/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2040/pico_platform/include \
|
||||||
|
$(PLATFORM_RP2040_PATH)
|
||||||
|
|
||||||
|
RP2040_SRC = $(PLATFORM_RP2040_PATH)/stage2_bootloaders.c
|
||||||
|
|
||||||
|
CFLAGS += -DPICO_RP2040=1
|
||||||
|
|
||||||
|
#
|
||||||
|
# RP2040 optimized compiler intrinsics
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
# The RP2040 sdk provides optimized compiler intrinsics which override the GCC
|
||||||
|
# built-ins. Some of these functions are located in the bootrom of the RP2040.
|
||||||
|
# Execution of these functions is realized via a vtable that is populated on
|
||||||
|
# bootup. This mechanism needs startup code and linker script support from
|
||||||
|
# ChibiOS, which is currently not implemented thus these functions are disabled
|
||||||
|
# ATM.
|
||||||
|
RP2040_SRC += $(PICOSDKROOT)/src/rp2_common/hardware_divider/divider.S \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/pico_divider/divider_hardware.S \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S
|
||||||
|
|
||||||
|
RP2040_INC += $(PICOSDKROOT)/src/rp2_common/hardware_divider/include \
|
||||||
|
$(PICOSDKROOT)/src/common/pico_divider_headers/include
|
||||||
|
|
||||||
|
# integer division intrinsics utilizing the RP2040 hardware divider
|
||||||
|
OPT_DEFS += -DPICO_DIVIDER_IN_RAM=1
|
||||||
|
OPT_DEFS += -DPICO_DIVIDER_DISABLE_INTERRUPTS=1
|
||||||
|
|
||||||
|
CFLAGS += -Wl,--wrap=__aeabi_idiv
|
||||||
|
CFLAGS += -Wl,--wrap=__aeabi_idivmod
|
||||||
|
CFLAGS += -Wl,--wrap=__aeabi_ldivmod
|
||||||
|
CFLAGS += -Wl,--wrap=__aeabi_uidiv
|
||||||
|
CFLAGS += -Wl,--wrap=__aeabi_uidivmod
|
||||||
|
CFLAGS += -Wl,--wrap=__aeabi_uldivmod
|
||||||
|
|
||||||
|
# 64bit integer intrinsics
|
||||||
|
OPT_DEFS += -DPICO_INT64_OPS_IN_RAM=1
|
||||||
|
|
||||||
|
CFLAGS += -Wl,--wrap=__aeabi_lmul
|
||||||
|
|
||||||
|
PLATFORM_SRC += $(RP2040_SRC)
|
||||||
|
EXTRAINCDIRS += $(RP2040_INC)
|
12
platforms/chibios/vendors/RP/pico_sdk_shims.h
vendored
Normal file
12
platforms/chibios/vendors/RP/pico_sdk_shims.h
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// Copyright 2024 Stefan Kerkmann
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLER__
|
||||||
|
|
||||||
|
#define __not_in_flash(group) __attribute__((section(".ramtext." group)))
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define RAM_SECTION_NAME(x) .ramtext.##x
|
||||||
|
|
||||||
|
#endif
|
74
platforms/chibios/vendors/RP/rp_common.mk
vendored
Normal file
74
platforms/chibios/vendors/RP/rp_common.mk
vendored
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
#
|
||||||
|
# Raspberry Pi specific drivers, same for all RP2xxx based boards
|
||||||
|
##############################################################################
|
||||||
|
COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/vendor/$(MCU_FAMILY)/rp2040
|
||||||
|
|
||||||
|
ifeq ($(strip $(WS2812_DRIVER)), vendor)
|
||||||
|
OPT_DEFS += -DRP_DMA_REQUIRED=TRUE
|
||||||
|
endif
|
||||||
|
|
||||||
|
#
|
||||||
|
# Raspberry Pi Pico SDK Support
|
||||||
|
##############################################################################
|
||||||
|
ADEFS += -DCRT0_VTOR_INIT=1 \
|
||||||
|
-DCRT0_EXTRA_CORES_NUMBER=0 \
|
||||||
|
-DCRT0_INIT_VECTORS=1 \
|
||||||
|
-DPICO_CONFIG_RTOS_ADAPTER_HEADER=$(PLATFORM_RP_PATH)/pico_sdk_shims.h
|
||||||
|
|
||||||
|
CFLAGS += -DNDEBUG \
|
||||||
|
-DPICO_CONFIG_RTOS_ADAPTER_HEADER=$(PLATFORM_RP_PATH)/pico_sdk_shims.h
|
||||||
|
|
||||||
|
#
|
||||||
|
# Pico SDK source and header files needed by QMK and ChibiOS
|
||||||
|
##############################################################################
|
||||||
|
PICOSDKROOT := $(TOP_DIR)/lib/pico-sdk
|
||||||
|
|
||||||
|
PICOSDKSRC = $(PICOSDKROOT)/src/common/hardware_claim/claim.c \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_clocks/clocks.c \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_flash/flash.c \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_gpio/gpio.c \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_pio/pio.c \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_pll/pll.c \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_ticks/ticks.c \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_timer/timer.c \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_watchdog/watchdog.c \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_xosc/xosc.c \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/pico_bootrom/bootrom.c \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/pico_runtime_init/runtime_init_clocks.c \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/pico_runtime_init/runtime_init.c
|
||||||
|
|
||||||
|
PICOSDKINC = $(CHIBIOS)/os/various/pico_bindings/dumb/include \
|
||||||
|
$(PICOSDKROOT)/src/boards/include \
|
||||||
|
$(PICOSDKROOT)/src/common/boot_picobin_headers/include \
|
||||||
|
$(PICOSDKROOT)/src/common/boot_picoboot_headers/include \
|
||||||
|
$(PICOSDKROOT)/src/common/hardware_claim/include \
|
||||||
|
$(PICOSDKROOT)/src/common/pico_base_headers/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/boot_bootrom_headers/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_base/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_boot_lock/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_clocks/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_flash/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_gpio/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_irq/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_pio/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_pll/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_resets/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_sync_spin_lock/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_sync/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_ticks/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_timer/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_watchdog/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/hardware_xosc/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/pico_bootrom/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/pico_flash/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/pico_platform_compiler/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/pico_platform_panic/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/pico_platform_sections/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/pico_runtime_init/include \
|
||||||
|
$(PICOSDKROOT)/src/rp2_common/pico_runtime/include
|
||||||
|
|
||||||
|
PICOSDKSRC += $(PLATFORM_RP_PATH)/pico_sdk_shims.c
|
||||||
|
PICOSDKINC += $(PLATFORM_RP_PATH)
|
||||||
|
|
||||||
|
PLATFORM_SRC += $(PICOSDKSRC)
|
||||||
|
EXTRAINCDIRS += $(PICOSDKINC)
|
Loading…
Reference in New Issue
Block a user