forked from mirrors/qmk_userspace
[Core] Add Raspberry Pi RP2040 support (#14877)
* Disable RESET keycode because of naming conflicts * Add Pico SDK as submodule * Add RP2040 build support to QMK * Adjust USB endpoint structs for RP2040 * Add RP2040 bootloader and double-tap reset routine * Add generic and pro micro RP2040 boards * Add RP2040 onekey keyboard * Add WS2812 PIO DMA enabled driver and documentation Supports regular and open-drain output configuration. RP2040 GPIOs are sadly not 5V tolerant, so this is a bit use-less or needs extra hardware or you take the risk to fry your hardware. * Adjust SIO Driver for RP2040 * Adjust I2C Driver for RP2040 * Adjust SPI Driver for RP2040 * Add PIO serial driver and documentation * Add general RP2040 documentation * Apply suggestions from code review Co-authored-by: Nick Brassel <nick@tzarc.org> Co-authored-by: Nick Brassel <nick@tzarc.org>
This commit is contained in:
parent
d206c1791e
commit
d717396708
43 changed files with 2026 additions and 96 deletions
|
@ -0,0 +1,9 @@
|
|||
# List of all the board related files.
|
||||
BOARDSRC = $(CHIBIOS)/os/hal/boards/RP_PICO_RP2040/board.c
|
||||
|
||||
# Required include directories
|
||||
BOARDINC = $(CHIBIOS)/os/hal/boards/RP_PICO_RP2040
|
||||
|
||||
# Shared variables
|
||||
ALLCSRC += $(BOARDSRC)
|
||||
ALLINC += $(BOARDINC)
|
|
@ -0,0 +1,12 @@
|
|||
// Copyright 2022 Stefan Kerkmann
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include_next "board.h"
|
||||
|
||||
#undef BOARD_RP_PICO_RP2040
|
||||
#define BOARD_GENERIC_PROMICRO_RP2040
|
||||
|
||||
#undef BOARD_NAME
|
||||
#define BOARD_NAME "Pro Micro RP2040"
|
|
@ -0,0 +1,13 @@
|
|||
// Copyright 2022 Stefan Kerkmann
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#define CH_CFG_SMP_MODE TRUE
|
||||
#define CH_CFG_ST_RESOLUTION 32
|
||||
#define CH_CFG_ST_FREQUENCY 1000000
|
||||
#define CH_CFG_INTERVALS_SIZE 32
|
||||
#define CH_CFG_TIME_TYPES_SIZE 32
|
||||
#define CH_CFG_ST_TIMEDELTA 20
|
||||
|
||||
#include_next <chconf.h>
|
|
@ -0,0 +1,62 @@
|
|||
// Copyright 2022 Stefan Kerkmann
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
/**======================
|
||||
** I2C Driver
|
||||
*========================**/
|
||||
|
||||
#if !defined(I2C_DRIVER)
|
||||
# define I2C_DRIVER I2CD2
|
||||
#endif
|
||||
|
||||
#if !defined(I2C1_SDA_PIN)
|
||||
# define I2C1_SDA_PIN GP2
|
||||
#endif
|
||||
|
||||
#if !defined(I2C1_SCL_PIN)
|
||||
# define I2C1_SCL_PIN GP3
|
||||
#endif
|
||||
|
||||
/**======================
|
||||
** SPI Driver
|
||||
*========================**/
|
||||
|
||||
#if !defined(SPI_DRIVER)
|
||||
# define SPI_DRIVER SPID0
|
||||
#endif
|
||||
|
||||
#if !defined(SPI_SCK_PIN)
|
||||
# define SPI_SCK_PIN GP18
|
||||
#endif
|
||||
|
||||
#if !defined(SPI_MISO_PIN)
|
||||
# define SPI_MISO_PIN GP20
|
||||
#endif
|
||||
|
||||
#if !defined(SPI_MOSI_PIN)
|
||||
# define SPI_MOSI_PIN GP19
|
||||
#endif
|
||||
|
||||
/**======================
|
||||
** SERIAL Driver
|
||||
*========================**/
|
||||
|
||||
#if !defined(SERIAL_USART_DRIVER)
|
||||
# define SERIAL_USART_DRIVER SIOD0
|
||||
#endif
|
||||
|
||||
#if !defined(SERIAL_USART_TX_PIN) && !defined(SOFT_SERIAL_PIN)
|
||||
# define SERIAL_USART_TX_PIN GP0
|
||||
#endif
|
||||
|
||||
#if !defined(SERIAL_USART_RX_PIN)
|
||||
# define SERIAL_USART_RX_PIN GP1
|
||||
#endif
|
||||
|
||||
/**======================
|
||||
** Double-tap
|
||||
*========================**/
|
||||
|
||||
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
|
|
@ -0,0 +1,98 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
#ifndef MCUCONF_H
|
||||
#define MCUCONF_H
|
||||
|
||||
/*
|
||||
* RP2040_MCUCONF drivers configuration.
|
||||
*
|
||||
* IRQ priorities:
|
||||
* 3...0 Lowest...Highest.
|
||||
*
|
||||
* DMA priorities:
|
||||
* 0...1 Lowest...Highest.
|
||||
*/
|
||||
|
||||
#define RP2040_MCUCONF
|
||||
|
||||
/*
|
||||
* HAL driver system settings.
|
||||
*/
|
||||
#define RP_NO_INIT FALSE
|
||||
#define RP_CORE1_START FALSE
|
||||
#define RP_CORE1_VECTORS_TABLE _vectors
|
||||
#define RP_CORE1_ENTRY_POINT _crt0_c1_entry
|
||||
#define RP_CORE1_STACK_END __c1_main_stack_end__
|
||||
|
||||
/*
|
||||
* IRQ system settings.
|
||||
*/
|
||||
#define RP_IRQ_SYSTICK_PRIORITY 2
|
||||
#define RP_IRQ_TIMER_ALARM0_PRIORITY 2
|
||||
#define RP_IRQ_TIMER_ALARM1_PRIORITY 2
|
||||
#define RP_IRQ_TIMER_ALARM2_PRIORITY 2
|
||||
#define RP_IRQ_TIMER_ALARM3_PRIORITY 2
|
||||
#define RP_IRQ_UART0_PRIORITY 3
|
||||
#define RP_IRQ_UART1_PRIORITY 3
|
||||
#define RP_IRQ_SPI0_PRIORITY 2
|
||||
#define RP_IRQ_SPI1_PRIORITY 2
|
||||
#define RP_IRQ_USB0_PRIORITY 3
|
||||
#define RP_IRQ_I2C0_PRIORITY 2
|
||||
#define RP_IRQ_I2C1_PRIORITY 2
|
||||
|
||||
/*
|
||||
* ADC driver system settings.
|
||||
*/
|
||||
#define RP_ADC_USE_ADC1 FALSE
|
||||
|
||||
/*
|
||||
* SIO driver system settings.
|
||||
*/
|
||||
#define RP_SIO_USE_UART0 TRUE
|
||||
#define RP_SIO_USE_UART1 FALSE
|
||||
|
||||
/*
|
||||
* SPI driver system settings.
|
||||
*/
|
||||
#define RP_SPI_USE_SPI0 TRUE
|
||||
#define RP_SPI_USE_SPI1 FALSE
|
||||
#define RP_SPI_SPI0_RX_DMA_CHANNEL RP_DMA_CHANNEL_ID_ANY
|
||||
#define RP_SPI_SPI0_TX_DMA_CHANNEL RP_DMA_CHANNEL_ID_ANY
|
||||
#define RP_SPI_SPI1_RX_DMA_CHANNEL RP_DMA_CHANNEL_ID_ANY
|
||||
#define RP_SPI_SPI1_TX_DMA_CHANNEL RP_DMA_CHANNEL_ID_ANY
|
||||
#define RP_SPI_SPI0_DMA_PRIORITY 1
|
||||
#define RP_SPI_SPI1_DMA_PRIORITY 1
|
||||
#define RP_SPI_DMA_ERROR_HOOK(spip)
|
||||
|
||||
/*
|
||||
* I2C driver system settings.
|
||||
*/
|
||||
#define RP_I2C_USE_I2C0 FALSE
|
||||
#define RP_I2C_USE_I2C1 TRUE
|
||||
#define RP_I2C_BUSY_TIMEOUT 50
|
||||
#define RP_I2C_ADDRESS_MODE_10BIT FALSE
|
||||
|
||||
/*
|
||||
* USB driver system settings.
|
||||
*/
|
||||
#define RP_USB_USE_USBD0 TRUE
|
||||
#define RP_USB_FORCE_VBUS_DETECT TRUE
|
||||
#define RP_USE_EXTERNAL_VBUS_DETECT FALSE
|
||||
#define RP_USB_USE_SOF_INTR TRUE
|
||||
#define RP_USB_USE_ERROR_DATA_SEQ_INTR FALSE
|
||||
|
||||
#endif /* MCUCONF_H */
|
|
@ -0,0 +1,9 @@
|
|||
# List of all the board related files.
|
||||
BOARDSRC = $(CHIBIOS)/os/hal/boards/RP_PICO_RP2040/board.c
|
||||
|
||||
# Required include directories
|
||||
BOARDINC = $(CHIBIOS)/os/hal/boards/RP_PICO_RP2040
|
||||
|
||||
# Shared variables
|
||||
ALLCSRC += $(BOARDSRC)
|
||||
ALLINC += $(BOARDINC)
|
12
platforms/chibios/boards/GENERIC_RP_RP2040/configs/board.h
Normal file
12
platforms/chibios/boards/GENERIC_RP_RP2040/configs/board.h
Normal file
|
@ -0,0 +1,12 @@
|
|||
// Copyright 2022 Stefan Kerkmann
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include_next "board.h"
|
||||
|
||||
#undef BOARD_RP_PICO_RP2040
|
||||
#define BOARD_GENERIC_RP2040
|
||||
|
||||
#undef BOARD_NAME
|
||||
#define BOARD_NAME "Generic Raspberry Pi RP2040"
|
13
platforms/chibios/boards/GENERIC_RP_RP2040/configs/chconf.h
Normal file
13
platforms/chibios/boards/GENERIC_RP_RP2040/configs/chconf.h
Normal file
|
@ -0,0 +1,13 @@
|
|||
// Copyright 2022 Stefan Kerkmann
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#define CH_CFG_SMP_MODE TRUE
|
||||
#define CH_CFG_ST_RESOLUTION 32
|
||||
#define CH_CFG_ST_FREQUENCY 1000000
|
||||
#define CH_CFG_INTERVALS_SIZE 32
|
||||
#define CH_CFG_TIME_TYPES_SIZE 32
|
||||
#define CH_CFG_ST_TIMEDELTA 20
|
||||
|
||||
#include_next <chconf.h>
|
98
platforms/chibios/boards/GENERIC_RP_RP2040/configs/mcuconf.h
Normal file
98
platforms/chibios/boards/GENERIC_RP_RP2040/configs/mcuconf.h
Normal file
|
@ -0,0 +1,98 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
#ifndef MCUCONF_H
|
||||
#define MCUCONF_H
|
||||
|
||||
/*
|
||||
* RP2040_MCUCONF drivers configuration.
|
||||
*
|
||||
* IRQ priorities:
|
||||
* 3...0 Lowest...Highest.
|
||||
*
|
||||
* DMA priorities:
|
||||
* 0...1 Lowest...Highest.
|
||||
*/
|
||||
|
||||
#define RP2040_MCUCONF
|
||||
|
||||
/*
|
||||
* HAL driver system settings.
|
||||
*/
|
||||
#define RP_NO_INIT FALSE
|
||||
#define RP_CORE1_START FALSE
|
||||
#define RP_CORE1_VECTORS_TABLE _vectors
|
||||
#define RP_CORE1_ENTRY_POINT _crt0_c1_entry
|
||||
#define RP_CORE1_STACK_END __c1_main_stack_end__
|
||||
|
||||
/*
|
||||
* IRQ system settings.
|
||||
*/
|
||||
#define RP_IRQ_SYSTICK_PRIORITY 2
|
||||
#define RP_IRQ_TIMER_ALARM0_PRIORITY 2
|
||||
#define RP_IRQ_TIMER_ALARM1_PRIORITY 2
|
||||
#define RP_IRQ_TIMER_ALARM2_PRIORITY 2
|
||||
#define RP_IRQ_TIMER_ALARM3_PRIORITY 2
|
||||
#define RP_IRQ_UART0_PRIORITY 3
|
||||
#define RP_IRQ_UART1_PRIORITY 3
|
||||
#define RP_IRQ_SPI0_PRIORITY 2
|
||||
#define RP_IRQ_SPI1_PRIORITY 2
|
||||
#define RP_IRQ_USB0_PRIORITY 3
|
||||
#define RP_IRQ_I2C0_PRIORITY 2
|
||||
#define RP_IRQ_I2C1_PRIORITY 2
|
||||
|
||||
/*
|
||||
* ADC driver system settings.
|
||||
*/
|
||||
#define RP_ADC_USE_ADC1 FALSE
|
||||
|
||||
/*
|
||||
* SIO driver system settings.
|
||||
*/
|
||||
#define RP_SIO_USE_UART0 FALSE
|
||||
#define RP_SIO_USE_UART1 FALSE
|
||||
|
||||
/*
|
||||
* SPI driver system settings.
|
||||
*/
|
||||
#define RP_SPI_USE_SPI0 FALSE
|
||||
#define RP_SPI_USE_SPI1 FALSE
|
||||
#define RP_SPI_SPI0_RX_DMA_CHANNEL RP_DMA_CHANNEL_ID_ANY
|
||||
#define RP_SPI_SPI0_TX_DMA_CHANNEL RP_DMA_CHANNEL_ID_ANY
|
||||
#define RP_SPI_SPI1_RX_DMA_CHANNEL RP_DMA_CHANNEL_ID_ANY
|
||||
#define RP_SPI_SPI1_TX_DMA_CHANNEL RP_DMA_CHANNEL_ID_ANY
|
||||
#define RP_SPI_SPI0_DMA_PRIORITY 1
|
||||
#define RP_SPI_SPI1_DMA_PRIORITY 1
|
||||
#define RP_SPI_DMA_ERROR_HOOK(spip)
|
||||
|
||||
/*
|
||||
* I2C driver system settings.
|
||||
*/
|
||||
#define RP_I2C_USE_I2C0 FALSE
|
||||
#define RP_I2C_USE_I2C1 FALSE
|
||||
#define RP_I2C_BUSY_TIMEOUT 50
|
||||
#define RP_I2C_ADDRESS_MODE_10BIT FALSE
|
||||
|
||||
/*
|
||||
* USB driver system settings.
|
||||
*/
|
||||
#define RP_USB_USE_USBD0 TRUE
|
||||
#define RP_USB_FORCE_VBUS_DETECT TRUE
|
||||
#define RP_USE_EXTERNAL_VBUS_DETECT FALSE
|
||||
#define RP_USB_USE_SOF_INTR TRUE
|
||||
#define RP_USB_USE_ERROR_DATA_SEQ_INTR FALSE
|
||||
|
||||
#endif /* MCUCONF_H */
|
Loading…
Add table
Add a link
Reference in a new issue