Skip to content

RASPBERRYPI: Add support for RP2040 MCU #14488

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 58 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
e0b8a49
RASPBERRYPI: import pico-sdk
facchinm May 3, 2021
fbefa36
RP2040: add NANO_RP2040_CONNECT target
facchinm May 3, 2021
2f05c24
RP2040: add placeholder files for includes like pico/*.h
facchinm Feb 12, 2021
0ac2f32
RP2040: implement serial api
facchinm Feb 12, 2021
f9e2f19
RP2040: add pinmap for i2c, spi, pwm
facchinm Feb 12, 2021
3c9855b
RP2040: Mark .init section as KEEP
facchinm Feb 15, 2021
0b6c929
RP2040: implement mbed api analogin.
aentinger Feb 15, 2021
af01b08
RP2040: add SPI support
aentinger Feb 15, 2021
ab4745c
RP2040: prefix pico-sdk's i2c_init function with a '_'
aentinger Feb 16, 2021
e0c8dcc
RP2040: add I2C peripheral support
aentinger Feb 16, 2021
b229502
RP2040: implement USBDevice
facchinm Feb 23, 2021
12a5a1a
RP2040: avoid float.h first level inclusion
facchinm Feb 23, 2021
7240a91
RP2040: don't initalize contructors during runtime_init()
facchinm Feb 23, 2021
4f9fb42
RP2040: add pwm driver
facchinm Feb 23, 2021
2422c49
RP2040: add flow control to SERIAL object
facchinm Feb 23, 2021
38572f9
RP2040: add lp and us timer
facchinm Feb 23, 2021
89588d9
RP2040: implement gpio_is_connected()
facchinm Feb 26, 2021
ba2e249
RP2040: adapt linker script to mbed
facchinm Mar 5, 2021
a58efad
RP2040: Start adding Flash support
giulcioffi Feb 25, 2021
83244b2
RP2040: Protect flash operations in critical sections + fix addresses
giulcioffi Mar 3, 2021
91a1013
RP2040: Check alignment + avoid passing const buf to flash_range_prog…
giulcioffi Mar 4, 2021
168fc5d
RP2040: Rename pico-sdk's gpio_irq_handler with a '_' to avoid clashe…
giulcioffi Mar 5, 2021
541f7bf
RP2040: Add gpio interrupt support
giulcioffi Mar 5, 2021
707dde7
RP2040: usb: fix USB_DEVICE_ENUMERATION_FIX linking
facchinm Mar 8, 2021
8eb2f86
RP2040: usb: make all unhandled conditions a no-op
facchinm Mar 8, 2021
735055b
RP2040: i2c: fix addressing mismatch
facchinm Mar 8, 2021
2886c2b
RP2040: SPI: check SS correctness only if declared
facchinm Mar 8, 2021
6c1d95f
RP2040: Add I2C slave
giulcioffi Feb 25, 2021
a19a3d9
RP2040: PWM: fix asserts
facchinm Mar 15, 2021
4932950
RP2040: restore GPIO15 functionality after USB_DEVICE_ENUMERATION_FIX
facchinm Mar 15, 2021
1c5ff0d
RP2040: nano connect: fix pinmap
facchinm Mar 15, 2021
2b0002f
RP2040: add Raspberry Pico target
facchinm Mar 15, 2021
3fe1390
RP2040: fix analogin_read_u16 to report full range
facchinm Mar 15, 2021
21fe03e
RP2040: fix PwmOut enable command
facchinm Mar 16, 2021
4300f07
RP2040: Implement watchdog
giulcioffi Mar 15, 2021
182e49c
RP2040: Implement reset reasons
giulcioffi Mar 15, 2021
26d5512
RP2040: fix spi.h spurious inclusion in case insensitive filesystems
facchinm Mar 16, 2021
24c925b
RP2040: UART: baud can't be changed at runtime
facchinm Mar 24, 2021
08963ec
RP2040: i2c: remove debug prints
facchinm Mar 16, 2021
e4c84ed
Add CONSOLE_*X defines
facchinm Apr 13, 2021
51bda63
RP2040: FLASH: fix multipage write
facchinm Apr 13, 2021
b2cada1
RP2040: fix include paths
facchinm May 3, 2021
5a5bd5b
RP2040: silence nasty warning
facchinm May 3, 2021
69a5f6e
RP2040: start fixing CMake files for mbed cli 2
facchinm May 3, 2021
1820aad
RP2040: fix and update Raspberry Pi Pico target
facchinm May 3, 2021
9e74619
RP2040: USBPhy: implement stall() and unstall()
facchinm May 7, 2021
4f54781
RP2040: include multicore library in build
facchinm May 11, 2021
71f9df3
RP2040: USB: retry handling irqs if some went missing
facchinm May 12, 2021
45445a4
Nano RP2040 Connect: force flash size to 16MB
facchinm May 24, 2021
0d1e7e4
Save watchdog timeout in a static variable accessible from Arduino APIs
giulcioffi Jun 4, 2021
7cba010
RP2040: us_ticker: fix missing interrupts after 32bit wrap
giulcioffi Jun 30, 2021
d7ccde9
Nano RP2040 connect: use standard W25Q080 2nd stage
facchinm Jun 18, 2021
f01600a
RP2040: Add weak aliases for ISR handlers
facchinm Aug 2, 2021
0bd14a1
RP2040: optimize flash/ram occupation
facchinm Aug 2, 2021
b637f77
RP2040: enable led indication on mbed_die()
facchinm Aug 10, 2021
c19d206
Revert "RP2040: restore GPIO15 functionality after USB_DEVICE_ENUMERA…
facchinm Nov 15, 2021
b7b6781
RP2040: backport rp2040_usb_device_enumeration fix
facchinm Nov 15, 2021
9556b50
RP2040: correct system clock frequency
facchinm Dec 6, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions targets/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ add_subdirectory(TARGET_NORDIC EXCLUDE_FROM_ALL)
add_subdirectory(TARGET_NUVOTON EXCLUDE_FROM_ALL)
add_subdirectory(TARGET_NXP EXCLUDE_FROM_ALL)
add_subdirectory(TARGET_RENESAS EXCLUDE_FROM_ALL)
add_subdirectory(TARGET_RASPBERRYPI EXCLUDE_FROM_ALL)
add_subdirectory(TARGET_Samsung EXCLUDE_FROM_ALL)
add_subdirectory(TARGET_Silicon_Labs EXCLUDE_FROM_ALL)
add_subdirectory(TARGET_STM EXCLUDE_FROM_ALL)
Expand Down
18 changes: 18 additions & 0 deletions targets/TARGET_RASPBERRYPI/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright (c) 2020-2021 ARM Limited. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

add_subdirectory(TARGET_RP2040 EXCLUDE_FROM_ALL)

add_library(mbed-raspberrypi INTERFACE)

target_include_directories(mbed-raspberrypi
INTERFACE
.
)

target_sources(mbed-raspberrypi
INTERFACE
.
)

target_link_libraries(mbed-raspberrypi INTERFACE mbed-cmsis-cortex-m)
23 changes: 23 additions & 0 deletions targets/TARGET_RASPBERRYPI/TARGET_RP2040/.mbedignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
pico-sdk/common/pico_stdlib/include/pico/*
pico-sdk/common/pico_time/include/pico/*
pico-sdk/rp2_common/pico_stdio*
pico-sdk/rp2_common/pico_printf*
pico-sdk/boards/include/boards/*
pico-sdk/common/pico_base/include/pico/*
pico-sdk/rp2_common/boot_stage2/*
pico-sdk/rp2_common/pico_malloc/*
pico-sdk/rp2_common/pico_stdlib/
pico-sdk/rp2_common/pico_mem_ops/*
pico-sdk/rp2_common/pico_double/double_aeabi.S
pico-sdk/rp2_common/pico_double/double_none.S
pico-sdk/rp2_common/pico_float/float_aeabi.S
pico-sdk/rp2_common/pico_float/float_none.S
pico-sdk/rp2_common/pico_float/include/pico/*
pico-sdk/rp2_common/pico_standard_link/new_delete.cpp
pico-sdk/rp2_common/pico_standard_link/*.ld
pico-sdk/rp2_common/pico_unique_id/*
pico-sdk/rp2_common/hardware_divider/*
pico-sdk/rp2_common/hardware_spi/include/hardware/*
pico-sdk/rp2040/hardware_structs/include/hardware/structs/*
pico-sdk/rp2040/hardware_regs/include/hardware/regs/*
pico-sdk/host/*
79 changes: 79 additions & 0 deletions targets/TARGET_RASPBERRYPI/TARGET_RP2040/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# Copyright (c) 2020 ARM Limited. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

add_subdirectory(TARGET_NANO_RP2040_CONNECT EXCLUDE_FROM_ALL)
add_subdirectory(TARGET_RASPBERRY_PI_PICO EXCLUDE_FROM_ALL)

add_library(mbed-rp2040 INTERFACE)

target_include_directories(mbed-rp2040
INTERFACE
pico-sdk/rp2_common/hardware_adc/include
pico-sdk/rp2_common/hardware_gpio/include
pico-sdk/rp2_common/hardware_resets/include
pico-sdk/rp2_common/hardware_pwm/include
pico-sdk/rp2_common/hardware_base/include
pico-sdk/rp2_common/hardware_uart/include
pico-sdk/rp2_common/hardware_spi/include
pico-sdk/rp2_common/hardware_i2c/include
pico-sdk/rp2_common/hardware_irq/include
pico-sdk/rp2_common/hardware_flash/include
pico-sdk/rp2_common/hardware_clocks/include
pico-sdk/rp2_common/hardware_rtc/include
pico-sdk/rp2_common/hardware_watchdog/include
pico-sdk/rp2_common/hardware_timer/include
pico-sdk/rp2_common/hardware_pll/include
pico-sdk/rp2_common/hardware_sync/include
pico-sdk/rp2_common/hardware_xosc/include
pico-sdk/rp2_common/pico_platform/include
pico-sdk/rp2_common/pico_fix/rp2040_usb_device_enumeration/include/pico/fix
pico-sdk/rp2_common/pico_bootrom/include
pico-sdk/rp2_common/hardware_claim/include
pico-sdk/rp2040/hardware_structs/include
pico-sdk/rp2040/hardware_regs/include
pico-sdk/common/pico_sync/include
pico-sdk/common/pico_time/include
pico-sdk/common/pico_base/include
pico-sdk/common/pico_binary_info/include
pico-sdk/common/pico_util/include
pico-sdk/boards/include
pico-sdk/generated
.
)

target_sources(mbed-rp2040
INTERFACE
analogin_api.c
flash_api.c
gpio_api.c
i2c_api.c
lp_ticker.c
mbed_overrides.c
PeripheralPins.c
pwmout_api.c
reset_reason.c
serial_api.c
spi_api.c
us_ticker.c
USBPhy_RP2040.cpp
watchdog_api.c
pico-sdk/rp2_common/pico_standard_link/crt0.S
pico-sdk/rp2_common/hardware_flash/flash.c
pico-sdk/rp2_common/hardware_uart/uart.c
pico-sdk/rp2_common/hardware_spi/spi.c
pico-sdk/rp2_common/hardware_gpio/gpio.c
pico-sdk/rp2_common/hardware_xosc/xosc.c
pico-sdk/rp2_common/hardware_irq/irq.c
pico-sdk/rp2_common/hardware_pll/pll.c
pico-sdk/rp2_common/hardware_watchdog/watchdog.c
pico-sdk/rp2_common/hardware_clocks/clocks.c
pico-sdk/rp2_common/hardware_sync/sync.c
pico-sdk/rp2_common/pico_bootrom/bootrom.c
pico-sdk/rp2_common/pico_runtime/runtime.c
pico-sdk/rp2_common/pico_platform/platform.c
pico-sdk/common/pico_sync/mutex.c
pico-sdk/common/pico_time/time.c
pico-sdk/common/pico_sync/lock_core.c
)

target_link_libraries(mbed-rp2040 INTERFACE mbed-raspberrypi)
101 changes: 101 additions & 0 deletions targets/TARGET_RASPBERRYPI/TARGET_RP2040/PeripheralNames.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
/* mbed Microcontroller Library
* Copyright (c) 2006-2013 ARM Limited
* SPDX-License-Identifier: Apache-2.0
*
* 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 MBED_PERIPHERALNAMES_H
#define MBED_PERIPHERALNAMES_H

#include "cmsis.h"
#include "PinNames.h"

typedef enum {
UART_0 = 0,
UART_1,
} UARTName;

typedef enum {
ADC0 = 0,
} ADCName;

typedef enum {
SPI_0 = 0,
SPI_1
} SPIName;

typedef enum {
I2C_0 = 0,
I2C_1
} I2CName;

typedef enum {
PWM_0 = 0,
PWM_1,
PWM_2,
PWM_3,
PWM_4,
PWM_5,
PWM_6,
PWM_7
} PWMName;

/* Defines to be used by application */
typedef enum {
PIN_INPUT = 0,
PIN_OUTPUT
} PinDirection;

typedef enum {
PullNone = 0,
PullUp = 1,
PullDown = 2,
OpenDrainPullUp = 3,
OpenDrainNoPull = 4,
OpenDrainPullDown = 5,
PushPullNoPull = PullNone,
PushPullPullUp = PullUp,
PushPullPullDown = PullDown,
OpenDrain = OpenDrainPullUp,
PullDefault = PullNone
} PinMode;

#define STDIO_UART_TX CONSOLE_TX
#define STDIO_UART_RX CONSOLE_RX
#define STDIO_UART uart0

// Default peripherals
#define MBED_SPI0 p5, p6, p7, p8
#define MBED_SPI1 p11, p12, p13, p14

#define MBED_UART0 p9, p10
#define MBED_UART1 p13, p14
#define MBED_UART2 p28, p27
#define MBED_UARTUSB CONSOLE_TX, CONSOLE_RX

#define MBED_I2C0 p28, p27
#define MBED_I2C1 p9, p10

#define MBED_ANALOGIN0 p15
#define MBED_ANALOGIN1 p16
#define MBED_ANALOGIN2 p17
#define MBED_ANALOGIN3 p18

#define MBED_PWMOUT0 p26
#define MBED_PWMOUT1 p25
#define MBED_PWMOUT2 p24
#define MBED_PWMOUT3 p23
#define MBED_PWMOUT4 p22
#define MBED_PWMOUT5 p21

#endif
Loading