Compare commits

...
13 Commits
Author SHA1 Message Date
Earle F. Philhower, III d67329a2b8 Rename assembly dir to boot2, only has boot2.Ss (#230) 2021-06-30 08:42:13 -07:00
Ha Thach 3a9703fc20 Update tinyusb 1.3.0 (#228)
* update included tinyusb to 1.2.0

move tusb_config.h from core to library for more portability

* pump tinyusb

* update tinyusb to 1.3.0

* try to fix ci warning
2021-06-30 08:22:36 -07:00
Earle F. Philhower, III 856b105ab9 Clean up include paths, remove duplicates/invalids (#229) 2021-06-30 08:13:19 -07:00
Earle F. Philhower, III 03e740a511 Add CPU cycle counter accessors (#226)
Use the 24-bit SYSTICK peripheral, wrapped in logic to extend it to a
full 32 or 64bits.  W/o the wrapper, SYSTICK will wrap around in ~100ms.

Adds rp2040.getCycleCount() and rp2040.getCycleCount64()

Clean up the libpico build process as crt0.S from the pico-sdk should
be directly used.

Clean up the keywords file.
2021-06-28 20:53:40 -07:00
Earle F. Philhower, III e628c8e211 Upgrade Newlib to include 64-bit/8-bit %llu/%hhd (#227) 2021-06-28 20:46:08 -07:00
Ha Thach 7eca6c609f Use correct tusb_config.h for built-in usb (pico-sdk) (#219)
Fix issue with usbd_desc_cfg value may not be initialized as zero.
2021-06-26 09:37:41 -07:00
Earle F. Philhower, III f299120798 Remove accidental debug message 2021-06-25 18:47:02 -07:00
Earle F. Philhower, III aac8146f00 Clear I2C status on short slave reads
Fixes #222

The HW needs to have the TXC_ABRT flag cleared when a slave transmission is
cut short by the master, or else it will effectively break the I2C bus and
never recover.
2021-06-25 18:39:44 -07:00
Earle F. Philhower, III 35c974d4c0 Fix file creation on SD and SDFS (#216)
The O_CREAT/etc. flags on the Pico are a full 32-bits in size, but the
core was generating a flag for SdFat using an 8-bit type, so all the
O_CREAT, O_TRUNC, O_APPEND, etc. flags got cut off.

Fix the flag size.

Fixes #214
2021-06-19 12:15:11 -07:00
Earle F. Philhower, III 27476815ab Fix SerialUART flush (#215)
Serial1.flush/Serial2.flush was not waiting for the proper FIFO to clear.
Use the proper call from the Pico SDK.

Thanks to Peter Remias for noting it.
2021-06-16 08:25:24 -07:00
Earle F. Philhower, III b02b9c4be8 Add PDM library for Arduino Nano RP2040 Connect (#213)
* Add PDM library for Arduino Nano RP2040 Connect

* No PDM test in CI, only works on Arduino Nano RP2040
2021-06-16 08:17:09 -07:00
Earle F. Philhower, III 6afcf5881d Initial Arduino Nano RP2040 Connect support (#212)
Thanks to @Claupio for the bringup!
Reference #208
2021-06-14 08:59:52 -07:00
Earle F. Philhower, III 30704a7c5e Obey timeout value on SerialUART.read/.peek (#211)
Fixes a hang when reading from the Serial UART ports because before the
core would pause indefinitely for the next character.

Now, wait up to Serial.setTimeout() milliseconds and if it times out
return -1 to the app.

Fixes #210
2021-06-13 14:11:23 -07:00
43 changed files with 2004 additions and 647 deletions
+1
View File
@@ -17,6 +17,7 @@ See https://arduino-pico.readthedocs.io/en/latest/ along with the examples for m
* Adafruit QTPy RP2040
* Adafruit STEMMA Friend RP2040
* Adafruit Trinkey RP2040 QT
* Arduino Nano RP2040 Connect (preliminary)
* SparkFun ProMicro RP2040
* Generic (configurable flash, I/O pins)
-315
View File
@@ -1,315 +0,0 @@
/*
* Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "hardware/regs/m0plus.h"
#include "hardware/platform_defs.h"
#include "hardware/regs/addressmap.h"
#include "hardware/regs/sio.h"
#include "pico/binary_info/defs.h"
#ifdef NDEBUG
#ifndef COLLAPSE_IRQS
#define COLLAPSE_IRQS
#endif
#endif
.syntax unified
.cpu cortex-m0plus
.thumb
.section .vectors, "ax"
.align 2
.global __vectors
__vectors:
.word __StackTop
.word _reset_handler
.word isr_nmi
.word isr_hardfault
.word isr_invalid // Reserved, should never fire
.word isr_invalid // Reserved, should never fire
.word isr_invalid // Reserved, should never fire
.word isr_invalid // Reserved, should never fire
.word isr_invalid // Reserved, should never fire
.word isr_invalid // Reserved, should never fire
.word isr_invalid // Reserved, should never fire
.word isr_svcall
.word isr_invalid // Reserved, should never fire
.word isr_invalid // Reserved, should never fire
.word isr_pendsv
.word isr_systick
.word isr_irq0
.word isr_irq1
.word isr_irq2
.word isr_irq3
.word isr_irq4
.word isr_irq5
.word isr_irq6
.word isr_irq7
.word isr_irq8
.word isr_irq9
.word isr_irq10
.word isr_irq11
.word isr_irq12
.word isr_irq13
.word isr_irq14
.word isr_irq15
.word isr_irq16
.word isr_irq17
.word isr_irq18
.word isr_irq19
.word isr_irq20
.word isr_irq21
.word isr_irq22
.word isr_irq23
.word isr_irq24
.word isr_irq25
.word isr_irq26
.word isr_irq27
.word isr_irq28
.word isr_irq29
.word isr_irq30
.word isr_irq31
// Declare a weak symbol for each ISR.
// By default, they will fall through to the undefined IRQ handler below (breakpoint),
// but can be overridden by C functions with correct name.
.macro decl_isr_bkpt name
.weak \name
.type \name,%function
.thumb_func
\name:
bkpt #0
.endm
// these are separated out for clarity
decl_isr_bkpt isr_invalid
decl_isr_bkpt isr_nmi
decl_isr_bkpt isr_hardfault
decl_isr_bkpt isr_svcall
decl_isr_bkpt isr_pendsv
decl_isr_bkpt isr_systick
.macro decl_isr name
.weak \name
.type \name,%function
.thumb_func
\name:
.endm
decl_isr isr_irq0
decl_isr isr_irq1
decl_isr isr_irq2
decl_isr isr_irq3
decl_isr isr_irq4
decl_isr isr_irq5
decl_isr isr_irq6
decl_isr isr_irq7
decl_isr isr_irq8
decl_isr isr_irq9
decl_isr isr_irq10
decl_isr isr_irq11
decl_isr isr_irq12
decl_isr isr_irq13
decl_isr isr_irq14
decl_isr isr_irq15
decl_isr isr_irq16
decl_isr isr_irq17
decl_isr isr_irq18
decl_isr isr_irq19
decl_isr isr_irq20
decl_isr isr_irq21
decl_isr isr_irq22
decl_isr isr_irq23
decl_isr isr_irq24
decl_isr isr_irq25
decl_isr isr_irq26
decl_isr isr_irq27
decl_isr isr_irq28
decl_isr isr_irq29
decl_isr isr_irq30
decl_isr isr_irq31
// All unhandled USER IRQs fall through to here
.global __unhandled_user_irq
.thumb_func
__unhandled_user_irq:
bl __get_current_exception
subs r0, #16
.global unhandled_user_irq_num_in_r0
unhandled_user_irq_num_in_r0:
bkpt #0
.section .reset, "ax"
// This is the beginning of the image, which is entered from stage2 or bootrom USB MSD watchdog reboot
// note if we are NO_FLASH then start: below is currently identical anyway, so save 4 bytes
#if !PICO_NO_FLASH
// We simply install our own vector table and redirect through it
ldr r0, =__vectors
b __vector_entry
#endif
// ELF entry point generally called when we load an ELF via debugger
.type _entry_point,%function
.thumb_func
.global _entry_point
_entry_point:
#if PICO_NO_FLASH
// non flash
ldr r0, =__vectors
#else
// todo clear watchdog?
// When using flash, we install and use the ROM vector table to go thru regular bootrom/stage2 flash sequence
movs r0, #0
#endif
__vector_entry:
ldr r1, =(PPB_BASE + M0PLUS_CPUID_OFFSET)
str r0, [r1, #8]
ldmia r0!, {r1, r2}
msr msp, r1
bx r2
// ----------------------------------------------------------------------------
// Reset handler:
// - initialises .data
// - clears .bss
// - calls runtime_init
// - calls main
// - calls exit (which should eventually hang the processor via _exit)
.type _reset_handler,%function
.thumb_func
_reset_handler:
// Hang all cores except core 0
ldr r0, =(SIO_BASE + SIO_CPUID_OFFSET)
ldr r0, [r0]
cmp r0, #0
bne wait_for_vector
adr r4, data_cpy_table
// assume there is at least one entry
1:
ldmia r4!, {r1-r3}
cmp r1, #0
beq 2f
bl data_cpy
b 1b
2:
// Zero out the BSS
ldr r1, =__bss_start__
ldr r2, =__bss_end__
movs r0, #0
b bss_fill_test
bss_fill_loop:
stm r1!, {r0}
bss_fill_test:
cmp r1, r2
bne bss_fill_loop
platform_entry: // symbol for stack traces
// Use 32-bit jumps, in case these symbols are moved out of branch range
// (e.g. if main is in SRAM and crt0 in flash)
ldr r1, =runtime_init
blx r1
ldr r1, =main
blx r1
ldr r1, =exit
blx r1
// exit should not return. If it does, hang the core.
// (fall thru into our hang _exit impl
.weak _exit
.type _exit,%function
.thumb_func
_exit:
1: // separate label because _exit can be moved out of branch range
bkpt #0
b 1b
data_cpy_loop:
ldm r1!, {r0}
stm r2!, {r0}
data_cpy:
cmp r2, r3
blo data_cpy_loop
bx lr
#if !PICO_NO_BINARY_INFO
binary_info_header:
.word BINARY_INFO_MARKER_START
.word __binary_info_start
.word __binary_info_end
.word data_cpy_table // we may need to decode pointers that are in RAM at runtime.
.word BINARY_INFO_MARKER_END
#endif
.align 2
data_cpy_table:
#if PICO_COPY_TO_RAM
.word __ram_text_source__
.word __ram_text_start__
.word __ram_text_end__
#endif
.word __etext
.word __data_start__
.word __data_end__
.word __scratch_x_source__
.word __scratch_x_start__
.word __scratch_x_end__
.word __scratch_y_source__
.word __scratch_y_start__
.word __scratch_y_end__
.word 0 // null terminator
// ----------------------------------------------------------------------------
// Provide safe defaults for _exit and runtime_init
// Full implementations usually provided by platform.c
.weak runtime_init
.type runtime_init,%function
.thumb_func
runtime_init:
bx lr
// ----------------------------------------------------------------------------
// In case core 1's VTOR has already been moved into flash, we need to handle
// core 1 reset. However, we do so by just jumping back into bootrom version of
// wait_for_vector
wait_for_vector:
ldr r0, = 'W' | ('V' << 8)
bl rom_func_lookup
bx r0
.global __get_current_exception
.thumb_func
__get_current_exception:
mrs r0, ipsr
uxtb r0, r0
bx lr
// ----------------------------------------------------------------------------
// Stack/heap dummies to set size
.section .stack
// align to allow for memory protection (although this alignment is pretty much ignored by linker script)
.align 5
.equ StackSize, PICO_STACK_SIZE
.space StackSize
.section .heap
.align 2
.equ HeapSize, PICO_HEAP_SIZE
.space HeapSize
+424 -36
View File
@@ -112,9 +112,9 @@ rpipico.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG_RP2040_SPI
rpipico.menu.dbglvl.NDEBUG=NDEBUG
rpipico.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
rpipico.menu.usbstack.picosdk=Pico SDK
rpipico.menu.usbstack.picosdk.build.usbstack_flags=
rpipico.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
rpipico.menu.usbstack.tinyusb=Adafruit TinyUSB
rpipico.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
rpipico.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# Raspberry Pi Pico (Picoprobe)
@@ -222,9 +222,9 @@ rpipicopicoprobe.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG_R
rpipicopicoprobe.menu.dbglvl.NDEBUG=NDEBUG
rpipicopicoprobe.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
rpipicopicoprobe.menu.usbstack.picosdk=Pico SDK
rpipicopicoprobe.menu.usbstack.picosdk.build.usbstack_flags=
rpipicopicoprobe.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
rpipicopicoprobe.menu.usbstack.tinyusb=Adafruit TinyUSB
rpipicopicoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
rpipicopicoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# Adafruit Feather RP2040
@@ -368,9 +368,9 @@ adafruit_feather.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG_R
adafruit_feather.menu.dbglvl.NDEBUG=NDEBUG
adafruit_feather.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
adafruit_feather.menu.usbstack.picosdk=Pico SDK
adafruit_feather.menu.usbstack.picosdk.build.usbstack_flags=
adafruit_feather.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
adafruit_feather.menu.usbstack.tinyusb=Adafruit TinyUSB
adafruit_feather.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
adafruit_feather.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# Adafruit Feather RP2040 (Picoprobe)
@@ -514,9 +514,9 @@ adafruit_featherpicoprobe.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE
adafruit_featherpicoprobe.menu.dbglvl.NDEBUG=NDEBUG
adafruit_featherpicoprobe.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
adafruit_featherpicoprobe.menu.usbstack.picosdk=Pico SDK
adafruit_featherpicoprobe.menu.usbstack.picosdk.build.usbstack_flags=
adafruit_featherpicoprobe.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
adafruit_featherpicoprobe.menu.usbstack.tinyusb=Adafruit TinyUSB
adafruit_featherpicoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
adafruit_featherpicoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# Adafruit ItsyBitsy RP2040
@@ -660,9 +660,9 @@ adafruit_itsybitsy.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG
adafruit_itsybitsy.menu.dbglvl.NDEBUG=NDEBUG
adafruit_itsybitsy.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
adafruit_itsybitsy.menu.usbstack.picosdk=Pico SDK
adafruit_itsybitsy.menu.usbstack.picosdk.build.usbstack_flags=
adafruit_itsybitsy.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
adafruit_itsybitsy.menu.usbstack.tinyusb=Adafruit TinyUSB
adafruit_itsybitsy.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
adafruit_itsybitsy.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# Adafruit ItsyBitsy RP2040 (Picoprobe)
@@ -806,9 +806,9 @@ adafruit_itsybitsypicoprobe.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIR
adafruit_itsybitsypicoprobe.menu.dbglvl.NDEBUG=NDEBUG
adafruit_itsybitsypicoprobe.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
adafruit_itsybitsypicoprobe.menu.usbstack.picosdk=Pico SDK
adafruit_itsybitsypicoprobe.menu.usbstack.picosdk.build.usbstack_flags=
adafruit_itsybitsypicoprobe.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
adafruit_itsybitsypicoprobe.menu.usbstack.tinyusb=Adafruit TinyUSB
adafruit_itsybitsypicoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
adafruit_itsybitsypicoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# Adafruit QT Py RP2040
@@ -952,9 +952,9 @@ adafruit_qtpy.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG_RP20
adafruit_qtpy.menu.dbglvl.NDEBUG=NDEBUG
adafruit_qtpy.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
adafruit_qtpy.menu.usbstack.picosdk=Pico SDK
adafruit_qtpy.menu.usbstack.picosdk.build.usbstack_flags=
adafruit_qtpy.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
adafruit_qtpy.menu.usbstack.tinyusb=Adafruit TinyUSB
adafruit_qtpy.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
adafruit_qtpy.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# Adafruit QT Py RP2040 (Picoprobe)
@@ -1098,9 +1098,9 @@ adafruit_qtpypicoprobe.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DD
adafruit_qtpypicoprobe.menu.dbglvl.NDEBUG=NDEBUG
adafruit_qtpypicoprobe.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
adafruit_qtpypicoprobe.menu.usbstack.picosdk=Pico SDK
adafruit_qtpypicoprobe.menu.usbstack.picosdk.build.usbstack_flags=
adafruit_qtpypicoprobe.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
adafruit_qtpypicoprobe.menu.usbstack.tinyusb=Adafruit TinyUSB
adafruit_qtpypicoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
adafruit_qtpypicoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# Adafruit STEMMA Friend RP2040
@@ -1244,9 +1244,9 @@ adafruit_stemmafriend.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDE
adafruit_stemmafriend.menu.dbglvl.NDEBUG=NDEBUG
adafruit_stemmafriend.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
adafruit_stemmafriend.menu.usbstack.picosdk=Pico SDK
adafruit_stemmafriend.menu.usbstack.picosdk.build.usbstack_flags=
adafruit_stemmafriend.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
adafruit_stemmafriend.menu.usbstack.tinyusb=Adafruit TinyUSB
adafruit_stemmafriend.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
adafruit_stemmafriend.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# Adafruit STEMMA Friend RP2040 (Picoprobe)
@@ -1390,9 +1390,9 @@ adafruit_stemmafriendpicoprobe.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_
adafruit_stemmafriendpicoprobe.menu.dbglvl.NDEBUG=NDEBUG
adafruit_stemmafriendpicoprobe.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
adafruit_stemmafriendpicoprobe.menu.usbstack.picosdk=Pico SDK
adafruit_stemmafriendpicoprobe.menu.usbstack.picosdk.build.usbstack_flags=
adafruit_stemmafriendpicoprobe.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
adafruit_stemmafriendpicoprobe.menu.usbstack.tinyusb=Adafruit TinyUSB
adafruit_stemmafriendpicoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
adafruit_stemmafriendpicoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# Adafruit Trinkey RP2040 QT
@@ -1536,9 +1536,9 @@ adafruit_trinkeyrp2040qt.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -
adafruit_trinkeyrp2040qt.menu.dbglvl.NDEBUG=NDEBUG
adafruit_trinkeyrp2040qt.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
adafruit_trinkeyrp2040qt.menu.usbstack.picosdk=Pico SDK
adafruit_trinkeyrp2040qt.menu.usbstack.picosdk.build.usbstack_flags=
adafruit_trinkeyrp2040qt.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
adafruit_trinkeyrp2040qt.menu.usbstack.tinyusb=Adafruit TinyUSB
adafruit_trinkeyrp2040qt.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
adafruit_trinkeyrp2040qt.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# Adafruit Trinkey RP2040 QT (Picoprobe)
@@ -1682,9 +1682,9 @@ adafruit_trinkeyrp2040qtpicoprobe.menu.dbglvl.All.build.debug_level=-DDEBUG_RP20
adafruit_trinkeyrp2040qtpicoprobe.menu.dbglvl.NDEBUG=NDEBUG
adafruit_trinkeyrp2040qtpicoprobe.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
adafruit_trinkeyrp2040qtpicoprobe.menu.usbstack.picosdk=Pico SDK
adafruit_trinkeyrp2040qtpicoprobe.menu.usbstack.picosdk.build.usbstack_flags=
adafruit_trinkeyrp2040qtpicoprobe.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
adafruit_trinkeyrp2040qtpicoprobe.menu.usbstack.tinyusb=Adafruit TinyUSB
adafruit_trinkeyrp2040qtpicoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
adafruit_trinkeyrp2040qtpicoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# Adafruit MacroPad RP2040
@@ -1828,9 +1828,9 @@ adafruit_macropad2040.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDE
adafruit_macropad2040.menu.dbglvl.NDEBUG=NDEBUG
adafruit_macropad2040.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
adafruit_macropad2040.menu.usbstack.picosdk=Pico SDK
adafruit_macropad2040.menu.usbstack.picosdk.build.usbstack_flags=
adafruit_macropad2040.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
adafruit_macropad2040.menu.usbstack.tinyusb=Adafruit TinyUSB
adafruit_macropad2040.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
adafruit_macropad2040.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# Adafruit MacroPad RP2040 (Picoprobe)
@@ -1974,9 +1974,397 @@ adafruit_macropad2040picoprobe.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_
adafruit_macropad2040picoprobe.menu.dbglvl.NDEBUG=NDEBUG
adafruit_macropad2040picoprobe.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
adafruit_macropad2040picoprobe.menu.usbstack.picosdk=Pico SDK
adafruit_macropad2040picoprobe.menu.usbstack.picosdk.build.usbstack_flags=
adafruit_macropad2040picoprobe.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
adafruit_macropad2040picoprobe.menu.usbstack.tinyusb=Adafruit TinyUSB
adafruit_macropad2040picoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
adafruit_macropad2040picoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# Arduino Nano RP2040 Connect
# -----------------------------------
arduino_nano_connect.name=Arduino Nano RP2040 Connect
arduino_nano_connect.vid.0=0x2341
arduino_nano_connect.pid.0=0x0058
arduino_nano_connect.build.usbpid=-DSERIALUSB_PID=0x0058
arduino_nano_connect.build.board=ARDUINO_NANO_RP2040_CONNECT
arduino_nano_connect.build.mcu=cortex-m0plus
arduino_nano_connect.build.variant=arduino_nano_connect
arduino_nano_connect.upload.tool=uf2conv
arduino_nano_connect.upload.maximum_size=16777216
arduino_nano_connect.upload.maximum_data_size=262144
arduino_nano_connect.upload.wait_for_upload_port=true
arduino_nano_connect.upload.erase_cmd=
arduino_nano_connect.serial.disableDTR=false
arduino_nano_connect.serial.disableRTS=false
arduino_nano_connect.build.f_cpu=125000000
arduino_nano_connect.build.led=
arduino_nano_connect.build.core=rp2040
arduino_nano_connect.build.mcu=rp2040
arduino_nano_connect.build.ldscript=memmap_default.ld
arduino_nano_connect.build.boot2=boot2_w25q080_2_padded_checksum
arduino_nano_connect.build.vid=0x2341
arduino_nano_connect.build.pid=0x0058
arduino_nano_connect.build.usb_manufacturer="Arduino"
arduino_nano_connect.build.usb_product="Nano RP2040 Connect"
arduino_nano_connect.menu.flash.16777216_0=16MB (no FS)
arduino_nano_connect.menu.flash.16777216_0.upload.maximum_size=16773120
arduino_nano_connect.menu.flash.16777216_0.build.flash_length=16773120
arduino_nano_connect.menu.flash.16777216_0.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_0.build.fs_start=285208576
arduino_nano_connect.menu.flash.16777216_0.build.fs_end=285208576
arduino_nano_connect.menu.flash.16777216_65536=16MB (Sketch: 16320KB, FS: 64KB)
arduino_nano_connect.menu.flash.16777216_65536.upload.maximum_size=16707584
arduino_nano_connect.menu.flash.16777216_65536.build.flash_length=16707584
arduino_nano_connect.menu.flash.16777216_65536.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_65536.build.fs_start=285143040
arduino_nano_connect.menu.flash.16777216_65536.build.fs_end=285208576
arduino_nano_connect.menu.flash.16777216_131072=16MB (Sketch: 16256KB, FS: 128KB)
arduino_nano_connect.menu.flash.16777216_131072.upload.maximum_size=16642048
arduino_nano_connect.menu.flash.16777216_131072.build.flash_length=16642048
arduino_nano_connect.menu.flash.16777216_131072.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_131072.build.fs_start=285077504
arduino_nano_connect.menu.flash.16777216_131072.build.fs_end=285208576
arduino_nano_connect.menu.flash.16777216_262144=16MB (Sketch: 16128KB, FS: 256KB)
arduino_nano_connect.menu.flash.16777216_262144.upload.maximum_size=16510976
arduino_nano_connect.menu.flash.16777216_262144.build.flash_length=16510976
arduino_nano_connect.menu.flash.16777216_262144.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_262144.build.fs_start=284946432
arduino_nano_connect.menu.flash.16777216_262144.build.fs_end=285208576
arduino_nano_connect.menu.flash.16777216_524288=16MB (Sketch: 15872KB, FS: 512KB)
arduino_nano_connect.menu.flash.16777216_524288.upload.maximum_size=16248832
arduino_nano_connect.menu.flash.16777216_524288.build.flash_length=16248832
arduino_nano_connect.menu.flash.16777216_524288.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_524288.build.fs_start=284684288
arduino_nano_connect.menu.flash.16777216_524288.build.fs_end=285208576
arduino_nano_connect.menu.flash.16777216_1048576=16MB (Sketch: 15MB, FS: 1MB)
arduino_nano_connect.menu.flash.16777216_1048576.upload.maximum_size=15724544
arduino_nano_connect.menu.flash.16777216_1048576.build.flash_length=15724544
arduino_nano_connect.menu.flash.16777216_1048576.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_1048576.build.fs_start=284160000
arduino_nano_connect.menu.flash.16777216_1048576.build.fs_end=285208576
arduino_nano_connect.menu.flash.16777216_2097152=16MB (Sketch: 14MB, FS: 2MB)
arduino_nano_connect.menu.flash.16777216_2097152.upload.maximum_size=14675968
arduino_nano_connect.menu.flash.16777216_2097152.build.flash_length=14675968
arduino_nano_connect.menu.flash.16777216_2097152.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_2097152.build.fs_start=283111424
arduino_nano_connect.menu.flash.16777216_2097152.build.fs_end=285208576
arduino_nano_connect.menu.flash.16777216_3145728=16MB (Sketch: 13MB, FS: 3MB)
arduino_nano_connect.menu.flash.16777216_3145728.upload.maximum_size=13627392
arduino_nano_connect.menu.flash.16777216_3145728.build.flash_length=13627392
arduino_nano_connect.menu.flash.16777216_3145728.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_3145728.build.fs_start=282062848
arduino_nano_connect.menu.flash.16777216_3145728.build.fs_end=285208576
arduino_nano_connect.menu.flash.16777216_4194304=16MB (Sketch: 12MB, FS: 4MB)
arduino_nano_connect.menu.flash.16777216_4194304.upload.maximum_size=12578816
arduino_nano_connect.menu.flash.16777216_4194304.build.flash_length=12578816
arduino_nano_connect.menu.flash.16777216_4194304.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_4194304.build.fs_start=281014272
arduino_nano_connect.menu.flash.16777216_4194304.build.fs_end=285208576
arduino_nano_connect.menu.flash.16777216_5242880=16MB (Sketch: 11MB, FS: 5MB)
arduino_nano_connect.menu.flash.16777216_5242880.upload.maximum_size=11530240
arduino_nano_connect.menu.flash.16777216_5242880.build.flash_length=11530240
arduino_nano_connect.menu.flash.16777216_5242880.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_5242880.build.fs_start=279965696
arduino_nano_connect.menu.flash.16777216_5242880.build.fs_end=285208576
arduino_nano_connect.menu.flash.16777216_6291456=16MB (Sketch: 10MB, FS: 6MB)
arduino_nano_connect.menu.flash.16777216_6291456.upload.maximum_size=10481664
arduino_nano_connect.menu.flash.16777216_6291456.build.flash_length=10481664
arduino_nano_connect.menu.flash.16777216_6291456.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_6291456.build.fs_start=278917120
arduino_nano_connect.menu.flash.16777216_6291456.build.fs_end=285208576
arduino_nano_connect.menu.flash.16777216_7340032=16MB (Sketch: 9MB, FS: 7MB)
arduino_nano_connect.menu.flash.16777216_7340032.upload.maximum_size=9433088
arduino_nano_connect.menu.flash.16777216_7340032.build.flash_length=9433088
arduino_nano_connect.menu.flash.16777216_7340032.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_7340032.build.fs_start=277868544
arduino_nano_connect.menu.flash.16777216_7340032.build.fs_end=285208576
arduino_nano_connect.menu.flash.16777216_8388608=16MB (Sketch: 8MB, FS: 8MB)
arduino_nano_connect.menu.flash.16777216_8388608.upload.maximum_size=8384512
arduino_nano_connect.menu.flash.16777216_8388608.build.flash_length=8384512
arduino_nano_connect.menu.flash.16777216_8388608.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_8388608.build.fs_start=276819968
arduino_nano_connect.menu.flash.16777216_8388608.build.fs_end=285208576
arduino_nano_connect.menu.flash.16777216_9437184=16MB (Sketch: 7MB, FS: 9MB)
arduino_nano_connect.menu.flash.16777216_9437184.upload.maximum_size=7335936
arduino_nano_connect.menu.flash.16777216_9437184.build.flash_length=7335936
arduino_nano_connect.menu.flash.16777216_9437184.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_9437184.build.fs_start=275771392
arduino_nano_connect.menu.flash.16777216_9437184.build.fs_end=285208576
arduino_nano_connect.menu.flash.16777216_10485760=16MB (Sketch: 6MB, FS: 10MB)
arduino_nano_connect.menu.flash.16777216_10485760.upload.maximum_size=6287360
arduino_nano_connect.menu.flash.16777216_10485760.build.flash_length=6287360
arduino_nano_connect.menu.flash.16777216_10485760.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_10485760.build.fs_start=274722816
arduino_nano_connect.menu.flash.16777216_10485760.build.fs_end=285208576
arduino_nano_connect.menu.flash.16777216_11534336=16MB (Sketch: 5MB, FS: 11MB)
arduino_nano_connect.menu.flash.16777216_11534336.upload.maximum_size=5238784
arduino_nano_connect.menu.flash.16777216_11534336.build.flash_length=5238784
arduino_nano_connect.menu.flash.16777216_11534336.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_11534336.build.fs_start=273674240
arduino_nano_connect.menu.flash.16777216_11534336.build.fs_end=285208576
arduino_nano_connect.menu.flash.16777216_12582912=16MB (Sketch: 4MB, FS: 12MB)
arduino_nano_connect.menu.flash.16777216_12582912.upload.maximum_size=4190208
arduino_nano_connect.menu.flash.16777216_12582912.build.flash_length=4190208
arduino_nano_connect.menu.flash.16777216_12582912.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_12582912.build.fs_start=272625664
arduino_nano_connect.menu.flash.16777216_12582912.build.fs_end=285208576
arduino_nano_connect.menu.flash.16777216_13631488=16MB (Sketch: 3MB, FS: 13MB)
arduino_nano_connect.menu.flash.16777216_13631488.upload.maximum_size=3141632
arduino_nano_connect.menu.flash.16777216_13631488.build.flash_length=3141632
arduino_nano_connect.menu.flash.16777216_13631488.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_13631488.build.fs_start=271577088
arduino_nano_connect.menu.flash.16777216_13631488.build.fs_end=285208576
arduino_nano_connect.menu.flash.16777216_14680064=16MB (Sketch: 2MB, FS: 14MB)
arduino_nano_connect.menu.flash.16777216_14680064.upload.maximum_size=2093056
arduino_nano_connect.menu.flash.16777216_14680064.build.flash_length=2093056
arduino_nano_connect.menu.flash.16777216_14680064.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_14680064.build.fs_start=270528512
arduino_nano_connect.menu.flash.16777216_14680064.build.fs_end=285208576
arduino_nano_connect.menu.flash.16777216_15728640=16MB (Sketch: 1MB, FS: 15MB)
arduino_nano_connect.menu.flash.16777216_15728640.upload.maximum_size=1044480
arduino_nano_connect.menu.flash.16777216_15728640.build.flash_length=1044480
arduino_nano_connect.menu.flash.16777216_15728640.build.eeprom_start=285208576
arduino_nano_connect.menu.flash.16777216_15728640.build.fs_start=269479936
arduino_nano_connect.menu.flash.16777216_15728640.build.fs_end=285208576
arduino_nano_connect.menu.freq.125=125 MHz
arduino_nano_connect.menu.freq.125.build.f_cpu=125000000L
arduino_nano_connect.menu.freq.50=50 MHz
arduino_nano_connect.menu.freq.50.build.f_cpu=50000000L
arduino_nano_connect.menu.freq.100=100 MHz
arduino_nano_connect.menu.freq.100.build.f_cpu=100000000L
arduino_nano_connect.menu.freq.133=133 MHz
arduino_nano_connect.menu.freq.133.build.f_cpu=133000000L
arduino_nano_connect.menu.freq.150=150 MHz (Overclock)
arduino_nano_connect.menu.freq.150.build.f_cpu=150000000L
arduino_nano_connect.menu.freq.175=175 MHz (Overclock)
arduino_nano_connect.menu.freq.175.build.f_cpu=175000000L
arduino_nano_connect.menu.freq.200=200 MHz (Overclock)
arduino_nano_connect.menu.freq.200.build.f_cpu=200000000L
arduino_nano_connect.menu.freq.225=225 MHz (Overclock)
arduino_nano_connect.menu.freq.225.build.f_cpu=225000000L
arduino_nano_connect.menu.freq.250=250 MHz (Overclock)
arduino_nano_connect.menu.freq.250.build.f_cpu=250000000L
arduino_nano_connect.menu.freq.275=275 MHz (Overclock)
arduino_nano_connect.menu.freq.275.build.f_cpu=275000000L
arduino_nano_connect.menu.freq.300=300 MHz (Overclock)
arduino_nano_connect.menu.freq.300.build.f_cpu=300000000L
arduino_nano_connect.menu.dbgport.Disabled=Disabled
arduino_nano_connect.menu.dbgport.Disabled.build.debug_port=
arduino_nano_connect.menu.dbgport.Serial=Serial
arduino_nano_connect.menu.dbgport.Serial.build.debug_port=-DDEBUG_RP2040_PORT=Serial
arduino_nano_connect.menu.dbgport.Serial1=Serial1
arduino_nano_connect.menu.dbgport.Serial1.build.debug_port=-DDEBUG_RP2040_PORT=Serial1
arduino_nano_connect.menu.dbgport.Serial2=Serial2
arduino_nano_connect.menu.dbgport.Serial2.build.debug_port=-DDEBUG_RP2040_PORT=Serial2
arduino_nano_connect.menu.dbglvl.None=None
arduino_nano_connect.menu.dbglvl.None.build.debug_level=
arduino_nano_connect.menu.dbglvl.Core=Core
arduino_nano_connect.menu.dbglvl.Core.build.debug_level=-DDEBUG_RP2040_CORE
arduino_nano_connect.menu.dbglvl.SPI=SPI
arduino_nano_connect.menu.dbglvl.SPI.build.debug_level=-DDEBUG_RP2040_SPI
arduino_nano_connect.menu.dbglvl.Wire=Wire
arduino_nano_connect.menu.dbglvl.Wire.build.debug_level=-DDEBUG_RP2040_WIRE
arduino_nano_connect.menu.dbglvl.All=All
arduino_nano_connect.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG_RP2040_SPI -DDEBUG_RP2040_CORE
arduino_nano_connect.menu.dbglvl.NDEBUG=NDEBUG
arduino_nano_connect.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
arduino_nano_connect.menu.usbstack.picosdk=Pico SDK
arduino_nano_connect.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
arduino_nano_connect.menu.usbstack.tinyusb=Adafruit TinyUSB
arduino_nano_connect.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# Arduino Nano RP2040 Connect (Picoprobe)
# -----------------------------------
arduino_nano_connectpicoprobe.name=Arduino Nano RP2040 Connect (Picoprobe)
arduino_nano_connectpicoprobe.vid.0=0x2341
arduino_nano_connectpicoprobe.pid.0=0x0004
arduino_nano_connectpicoprobe.build.usbpid=-DSERIALUSB_PID=0x0058
arduino_nano_connectpicoprobe.build.board=ARDUINO_NANO_RP2040_CONNECT
arduino_nano_connectpicoprobe.build.mcu=cortex-m0plus
arduino_nano_connectpicoprobe.build.variant=arduino_nano_connect
arduino_nano_connectpicoprobe.upload.tool=picoprobe
arduino_nano_connectpicoprobe.upload.maximum_size=16777216
arduino_nano_connectpicoprobe.upload.maximum_data_size=262144
arduino_nano_connectpicoprobe.upload.wait_for_upload_port=true
arduino_nano_connectpicoprobe.upload.erase_cmd=
arduino_nano_connectpicoprobe.serial.disableDTR=false
arduino_nano_connectpicoprobe.serial.disableRTS=false
arduino_nano_connectpicoprobe.build.f_cpu=125000000
arduino_nano_connectpicoprobe.build.led=
arduino_nano_connectpicoprobe.build.core=rp2040
arduino_nano_connectpicoprobe.build.mcu=rp2040
arduino_nano_connectpicoprobe.build.ldscript=memmap_default.ld
arduino_nano_connectpicoprobe.build.boot2=boot2_w25q080_2_padded_checksum
arduino_nano_connectpicoprobe.build.vid=0x2341
arduino_nano_connectpicoprobe.build.pid=0x0058
arduino_nano_connectpicoprobe.build.usb_manufacturer="Arduino"
arduino_nano_connectpicoprobe.build.usb_product="Nano RP2040 Connect (Picoprobe)"
arduino_nano_connectpicoprobe.menu.flash.16777216_0=16MB (no FS)
arduino_nano_connectpicoprobe.menu.flash.16777216_0.upload.maximum_size=16773120
arduino_nano_connectpicoprobe.menu.flash.16777216_0.build.flash_length=16773120
arduino_nano_connectpicoprobe.menu.flash.16777216_0.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_0.build.fs_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_0.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_65536=16MB (Sketch: 16320KB, FS: 64KB)
arduino_nano_connectpicoprobe.menu.flash.16777216_65536.upload.maximum_size=16707584
arduino_nano_connectpicoprobe.menu.flash.16777216_65536.build.flash_length=16707584
arduino_nano_connectpicoprobe.menu.flash.16777216_65536.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_65536.build.fs_start=285143040
arduino_nano_connectpicoprobe.menu.flash.16777216_65536.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_131072=16MB (Sketch: 16256KB, FS: 128KB)
arduino_nano_connectpicoprobe.menu.flash.16777216_131072.upload.maximum_size=16642048
arduino_nano_connectpicoprobe.menu.flash.16777216_131072.build.flash_length=16642048
arduino_nano_connectpicoprobe.menu.flash.16777216_131072.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_131072.build.fs_start=285077504
arduino_nano_connectpicoprobe.menu.flash.16777216_131072.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_262144=16MB (Sketch: 16128KB, FS: 256KB)
arduino_nano_connectpicoprobe.menu.flash.16777216_262144.upload.maximum_size=16510976
arduino_nano_connectpicoprobe.menu.flash.16777216_262144.build.flash_length=16510976
arduino_nano_connectpicoprobe.menu.flash.16777216_262144.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_262144.build.fs_start=284946432
arduino_nano_connectpicoprobe.menu.flash.16777216_262144.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_524288=16MB (Sketch: 15872KB, FS: 512KB)
arduino_nano_connectpicoprobe.menu.flash.16777216_524288.upload.maximum_size=16248832
arduino_nano_connectpicoprobe.menu.flash.16777216_524288.build.flash_length=16248832
arduino_nano_connectpicoprobe.menu.flash.16777216_524288.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_524288.build.fs_start=284684288
arduino_nano_connectpicoprobe.menu.flash.16777216_524288.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_1048576=16MB (Sketch: 15MB, FS: 1MB)
arduino_nano_connectpicoprobe.menu.flash.16777216_1048576.upload.maximum_size=15724544
arduino_nano_connectpicoprobe.menu.flash.16777216_1048576.build.flash_length=15724544
arduino_nano_connectpicoprobe.menu.flash.16777216_1048576.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_1048576.build.fs_start=284160000
arduino_nano_connectpicoprobe.menu.flash.16777216_1048576.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_2097152=16MB (Sketch: 14MB, FS: 2MB)
arduino_nano_connectpicoprobe.menu.flash.16777216_2097152.upload.maximum_size=14675968
arduino_nano_connectpicoprobe.menu.flash.16777216_2097152.build.flash_length=14675968
arduino_nano_connectpicoprobe.menu.flash.16777216_2097152.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_2097152.build.fs_start=283111424
arduino_nano_connectpicoprobe.menu.flash.16777216_2097152.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_3145728=16MB (Sketch: 13MB, FS: 3MB)
arduino_nano_connectpicoprobe.menu.flash.16777216_3145728.upload.maximum_size=13627392
arduino_nano_connectpicoprobe.menu.flash.16777216_3145728.build.flash_length=13627392
arduino_nano_connectpicoprobe.menu.flash.16777216_3145728.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_3145728.build.fs_start=282062848
arduino_nano_connectpicoprobe.menu.flash.16777216_3145728.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_4194304=16MB (Sketch: 12MB, FS: 4MB)
arduino_nano_connectpicoprobe.menu.flash.16777216_4194304.upload.maximum_size=12578816
arduino_nano_connectpicoprobe.menu.flash.16777216_4194304.build.flash_length=12578816
arduino_nano_connectpicoprobe.menu.flash.16777216_4194304.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_4194304.build.fs_start=281014272
arduino_nano_connectpicoprobe.menu.flash.16777216_4194304.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_5242880=16MB (Sketch: 11MB, FS: 5MB)
arduino_nano_connectpicoprobe.menu.flash.16777216_5242880.upload.maximum_size=11530240
arduino_nano_connectpicoprobe.menu.flash.16777216_5242880.build.flash_length=11530240
arduino_nano_connectpicoprobe.menu.flash.16777216_5242880.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_5242880.build.fs_start=279965696
arduino_nano_connectpicoprobe.menu.flash.16777216_5242880.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_6291456=16MB (Sketch: 10MB, FS: 6MB)
arduino_nano_connectpicoprobe.menu.flash.16777216_6291456.upload.maximum_size=10481664
arduino_nano_connectpicoprobe.menu.flash.16777216_6291456.build.flash_length=10481664
arduino_nano_connectpicoprobe.menu.flash.16777216_6291456.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_6291456.build.fs_start=278917120
arduino_nano_connectpicoprobe.menu.flash.16777216_6291456.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_7340032=16MB (Sketch: 9MB, FS: 7MB)
arduino_nano_connectpicoprobe.menu.flash.16777216_7340032.upload.maximum_size=9433088
arduino_nano_connectpicoprobe.menu.flash.16777216_7340032.build.flash_length=9433088
arduino_nano_connectpicoprobe.menu.flash.16777216_7340032.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_7340032.build.fs_start=277868544
arduino_nano_connectpicoprobe.menu.flash.16777216_7340032.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_8388608=16MB (Sketch: 8MB, FS: 8MB)
arduino_nano_connectpicoprobe.menu.flash.16777216_8388608.upload.maximum_size=8384512
arduino_nano_connectpicoprobe.menu.flash.16777216_8388608.build.flash_length=8384512
arduino_nano_connectpicoprobe.menu.flash.16777216_8388608.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_8388608.build.fs_start=276819968
arduino_nano_connectpicoprobe.menu.flash.16777216_8388608.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_9437184=16MB (Sketch: 7MB, FS: 9MB)
arduino_nano_connectpicoprobe.menu.flash.16777216_9437184.upload.maximum_size=7335936
arduino_nano_connectpicoprobe.menu.flash.16777216_9437184.build.flash_length=7335936
arduino_nano_connectpicoprobe.menu.flash.16777216_9437184.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_9437184.build.fs_start=275771392
arduino_nano_connectpicoprobe.menu.flash.16777216_9437184.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_10485760=16MB (Sketch: 6MB, FS: 10MB)
arduino_nano_connectpicoprobe.menu.flash.16777216_10485760.upload.maximum_size=6287360
arduino_nano_connectpicoprobe.menu.flash.16777216_10485760.build.flash_length=6287360
arduino_nano_connectpicoprobe.menu.flash.16777216_10485760.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_10485760.build.fs_start=274722816
arduino_nano_connectpicoprobe.menu.flash.16777216_10485760.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_11534336=16MB (Sketch: 5MB, FS: 11MB)
arduino_nano_connectpicoprobe.menu.flash.16777216_11534336.upload.maximum_size=5238784
arduino_nano_connectpicoprobe.menu.flash.16777216_11534336.build.flash_length=5238784
arduino_nano_connectpicoprobe.menu.flash.16777216_11534336.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_11534336.build.fs_start=273674240
arduino_nano_connectpicoprobe.menu.flash.16777216_11534336.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_12582912=16MB (Sketch: 4MB, FS: 12MB)
arduino_nano_connectpicoprobe.menu.flash.16777216_12582912.upload.maximum_size=4190208
arduino_nano_connectpicoprobe.menu.flash.16777216_12582912.build.flash_length=4190208
arduino_nano_connectpicoprobe.menu.flash.16777216_12582912.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_12582912.build.fs_start=272625664
arduino_nano_connectpicoprobe.menu.flash.16777216_12582912.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_13631488=16MB (Sketch: 3MB, FS: 13MB)
arduino_nano_connectpicoprobe.menu.flash.16777216_13631488.upload.maximum_size=3141632
arduino_nano_connectpicoprobe.menu.flash.16777216_13631488.build.flash_length=3141632
arduino_nano_connectpicoprobe.menu.flash.16777216_13631488.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_13631488.build.fs_start=271577088
arduino_nano_connectpicoprobe.menu.flash.16777216_13631488.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_14680064=16MB (Sketch: 2MB, FS: 14MB)
arduino_nano_connectpicoprobe.menu.flash.16777216_14680064.upload.maximum_size=2093056
arduino_nano_connectpicoprobe.menu.flash.16777216_14680064.build.flash_length=2093056
arduino_nano_connectpicoprobe.menu.flash.16777216_14680064.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_14680064.build.fs_start=270528512
arduino_nano_connectpicoprobe.menu.flash.16777216_14680064.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_15728640=16MB (Sketch: 1MB, FS: 15MB)
arduino_nano_connectpicoprobe.menu.flash.16777216_15728640.upload.maximum_size=1044480
arduino_nano_connectpicoprobe.menu.flash.16777216_15728640.build.flash_length=1044480
arduino_nano_connectpicoprobe.menu.flash.16777216_15728640.build.eeprom_start=285208576
arduino_nano_connectpicoprobe.menu.flash.16777216_15728640.build.fs_start=269479936
arduino_nano_connectpicoprobe.menu.flash.16777216_15728640.build.fs_end=285208576
arduino_nano_connectpicoprobe.menu.freq.125=125 MHz
arduino_nano_connectpicoprobe.menu.freq.125.build.f_cpu=125000000L
arduino_nano_connectpicoprobe.menu.freq.50=50 MHz
arduino_nano_connectpicoprobe.menu.freq.50.build.f_cpu=50000000L
arduino_nano_connectpicoprobe.menu.freq.100=100 MHz
arduino_nano_connectpicoprobe.menu.freq.100.build.f_cpu=100000000L
arduino_nano_connectpicoprobe.menu.freq.133=133 MHz
arduino_nano_connectpicoprobe.menu.freq.133.build.f_cpu=133000000L
arduino_nano_connectpicoprobe.menu.freq.150=150 MHz (Overclock)
arduino_nano_connectpicoprobe.menu.freq.150.build.f_cpu=150000000L
arduino_nano_connectpicoprobe.menu.freq.175=175 MHz (Overclock)
arduino_nano_connectpicoprobe.menu.freq.175.build.f_cpu=175000000L
arduino_nano_connectpicoprobe.menu.freq.200=200 MHz (Overclock)
arduino_nano_connectpicoprobe.menu.freq.200.build.f_cpu=200000000L
arduino_nano_connectpicoprobe.menu.freq.225=225 MHz (Overclock)
arduino_nano_connectpicoprobe.menu.freq.225.build.f_cpu=225000000L
arduino_nano_connectpicoprobe.menu.freq.250=250 MHz (Overclock)
arduino_nano_connectpicoprobe.menu.freq.250.build.f_cpu=250000000L
arduino_nano_connectpicoprobe.menu.freq.275=275 MHz (Overclock)
arduino_nano_connectpicoprobe.menu.freq.275.build.f_cpu=275000000L
arduino_nano_connectpicoprobe.menu.freq.300=300 MHz (Overclock)
arduino_nano_connectpicoprobe.menu.freq.300.build.f_cpu=300000000L
arduino_nano_connectpicoprobe.menu.dbgport.Disabled=Disabled
arduino_nano_connectpicoprobe.menu.dbgport.Disabled.build.debug_port=
arduino_nano_connectpicoprobe.menu.dbgport.Serial=Serial
arduino_nano_connectpicoprobe.menu.dbgport.Serial.build.debug_port=-DDEBUG_RP2040_PORT=Serial
arduino_nano_connectpicoprobe.menu.dbgport.Serial1=Serial1
arduino_nano_connectpicoprobe.menu.dbgport.Serial1.build.debug_port=-DDEBUG_RP2040_PORT=Serial1
arduino_nano_connectpicoprobe.menu.dbgport.Serial2=Serial2
arduino_nano_connectpicoprobe.menu.dbgport.Serial2.build.debug_port=-DDEBUG_RP2040_PORT=Serial2
arduino_nano_connectpicoprobe.menu.dbglvl.None=None
arduino_nano_connectpicoprobe.menu.dbglvl.None.build.debug_level=
arduino_nano_connectpicoprobe.menu.dbglvl.Core=Core
arduino_nano_connectpicoprobe.menu.dbglvl.Core.build.debug_level=-DDEBUG_RP2040_CORE
arduino_nano_connectpicoprobe.menu.dbglvl.SPI=SPI
arduino_nano_connectpicoprobe.menu.dbglvl.SPI.build.debug_level=-DDEBUG_RP2040_SPI
arduino_nano_connectpicoprobe.menu.dbglvl.Wire=Wire
arduino_nano_connectpicoprobe.menu.dbglvl.Wire.build.debug_level=-DDEBUG_RP2040_WIRE
arduino_nano_connectpicoprobe.menu.dbglvl.All=All
arduino_nano_connectpicoprobe.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG_RP2040_SPI -DDEBUG_RP2040_CORE
arduino_nano_connectpicoprobe.menu.dbglvl.NDEBUG=NDEBUG
arduino_nano_connectpicoprobe.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
arduino_nano_connectpicoprobe.menu.usbstack.picosdk=Pico SDK
arduino_nano_connectpicoprobe.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
arduino_nano_connectpicoprobe.menu.usbstack.tinyusb=Adafruit TinyUSB
arduino_nano_connectpicoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# SparkFun ProMicro RP2040
@@ -2168,9 +2556,9 @@ sparkfun_promicrorp2040.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -D
sparkfun_promicrorp2040.menu.dbglvl.NDEBUG=NDEBUG
sparkfun_promicrorp2040.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
sparkfun_promicrorp2040.menu.usbstack.picosdk=Pico SDK
sparkfun_promicrorp2040.menu.usbstack.picosdk.build.usbstack_flags=
sparkfun_promicrorp2040.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
sparkfun_promicrorp2040.menu.usbstack.tinyusb=Adafruit TinyUSB
sparkfun_promicrorp2040.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
sparkfun_promicrorp2040.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# SparkFun ProMicro RP2040 (Picoprobe)
@@ -2362,9 +2750,9 @@ sparkfun_promicrorp2040picoprobe.menu.dbglvl.All.build.debug_level=-DDEBUG_RP204
sparkfun_promicrorp2040picoprobe.menu.dbglvl.NDEBUG=NDEBUG
sparkfun_promicrorp2040picoprobe.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
sparkfun_promicrorp2040picoprobe.menu.usbstack.picosdk=Pico SDK
sparkfun_promicrorp2040picoprobe.menu.usbstack.picosdk.build.usbstack_flags=
sparkfun_promicrorp2040picoprobe.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
sparkfun_promicrorp2040picoprobe.menu.usbstack.tinyusb=Adafruit TinyUSB
sparkfun_promicrorp2040picoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
sparkfun_promicrorp2040picoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# -----------------------------------
# Generic RP2040
@@ -2484,9 +2872,9 @@ generic.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG_RP2040_SPI
generic.menu.dbglvl.NDEBUG=NDEBUG
generic.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
generic.menu.usbstack.picosdk=Pico SDK
generic.menu.usbstack.picosdk.build.usbstack_flags=
generic.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
generic.menu.usbstack.tinyusb=Adafruit TinyUSB
generic.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
generic.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
generic.menu.boot2.boot2_generic_03h_2_padded_checksum=Generic SPI /2
generic.menu.boot2.boot2_generic_03h_2_padded_checksum.build.boot2=boot2_generic_03h_2_padded_checksum
generic.menu.boot2.boot2_generic_03h_4_padded_checksum=Generic SPI /4
@@ -2622,9 +3010,9 @@ genericpicoprobe.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG_R
genericpicoprobe.menu.dbglvl.NDEBUG=NDEBUG
genericpicoprobe.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
genericpicoprobe.menu.usbstack.picosdk=Pico SDK
genericpicoprobe.menu.usbstack.picosdk.build.usbstack_flags=
genericpicoprobe.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"
genericpicoprobe.menu.usbstack.tinyusb=Adafruit TinyUSB
genericpicoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
genericpicoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
genericpicoprobe.menu.boot2.boot2_generic_03h_2_padded_checksum=Generic SPI /2
genericpicoprobe.menu.boot2.boot2_generic_03h_2_padded_checksum.build.boot2=boot2_generic_03h_2_padded_checksum
genericpicoprobe.menu.boot2.boot2_generic_03h_4_padded_checksum=Generic SPI /4
+43 -2
View File
@@ -21,6 +21,8 @@
#include <hardware/clocks.h>
#include <hardware/irq.h>
#include <hardware/pio.h>
#include <hardware/exception.h>
#include <hardware/structs/systick.h>
#include <pico/multicore.h>
#include <pico/util/queue.h>
#include <CoreMutex.h>
@@ -114,8 +116,21 @@ private:
static constexpr int _GOTOSLEEP = 0x66666666;
};
class RP2040;
extern RP2040 rp2040;
class RP2040 {
public:
RP2040() {
_epoch = 0;
// Enable SYSTICK exception
exception_set_exclusive_handler(SYSTICK_EXCEPTION, _SystickHandler);
systick_hw->csr = 0x7;
systick_hw->rvr = 0x00FFFFFF;
}
~RP2040() { /* noop */ }
// Convert from microseconds to PIO clock cycles
static int usToPIOCycles(int us) {
// Parenthesis needed to guarantee order of operations to avoid 32bit overflow
@@ -127,18 +142,44 @@ public:
return clock_get_hz(clk_sys);
}
// Get CPU cycle count. Needs to do magic to extens 24b HW to something longer
volatile uint64_t _epoch = 0;
inline uint32_t getCycleCount() {
uint32_t epoch;
uint32_t ctr;
do {
epoch = (uint32_t)_epoch;
ctr = systick_hw->cvr;
} while (epoch != (uint32_t)_epoch);
return epoch + (1 << 24) - ctr; /* CTR counts down from 1<<24-1 */
}
inline uint64_t getCycleCount64() {
uint64_t epoch;
uint64_t ctr;
do {
epoch = _epoch;
ctr = systick_hw->cvr;
} while (epoch != _epoch);
return epoch + (1LL << 24) - ctr;
}
void idleOtherCore() {
fifo.idleOtherCore();
}
void resumeOtherCore() {
fifo.resumeOtherCore();
}
// Multicore comms FIFO
_MFIFO fifo;
};
extern RP2040 rp2040;
private:
static void _SystickHandler() {
rp2040._epoch += 1LL << 24;
}
};
// Wrapper class for PIO programs, abstracting common operations out
// TODO - Add unload/destructor
+1 -1
View File
@@ -161,7 +161,7 @@ uint8_t const * tud_hid_descriptor_report_cb(uint8_t instance) {
const uint8_t *tud_descriptor_configuration_cb(uint8_t index) {
(void)index;
static uint8_t *usbd_desc_cfg;
static uint8_t *usbd_desc_cfg = NULL;
if (!usbd_desc_cfg) {
bool hasHID = __USBInstallKeyboard || __USBInstallMouse;
+11 -3
View File
@@ -115,7 +115,11 @@ int SerialUART::peek() {
if (_peek >= 0) {
return _peek;
}
_peek = uart_getc(_uart);
if (uart_is_readable_within_us(_uart, _timeout * 1000)) {
_peek = uart_getc(_uart);
} else {
_peek = -1; // Timeout
}
return _peek;
}
@@ -129,7 +133,11 @@ int SerialUART::read() {
_peek = -1;
return ret;
}
return uart_getc(_uart);
if (uart_is_readable_within_us(_uart, _timeout * 1000)) {
return uart_getc(_uart);
} else {
return -1; // Timeout
}
}
int SerialUART::available() {
@@ -153,7 +161,7 @@ void SerialUART::flush() {
if (!_running || !m) {
return;
}
uart_default_tx_wait_blocking();
uart_tx_wait_blocking(_uart);
}
size_t SerialUART::write(uint8_t c) {
-90
View File
@@ -1,90 +0,0 @@
/*
The MIT License (MIT)
Copyright (c) 2018, hathach for Adafruit
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#ifndef _TUSB_CONFIG_H_
#define _TUSB_CONFIG_H_
#ifdef __cplusplus
extern "C" {
#endif
//--------------------------------------------------------------------
// COMMON CONFIGURATION
//--------------------------------------------------------------------
#ifdef USE_TINYUSB
#define CFG_TUSB_RHPORT0_MODE OPT_MODE_DEVICE
#else
#define CFG_TUSB_RHPORT0_MODE OPT_MODE_NONE
#endif
//#ifndef CFG_TUSB_MCU
// #define CFG_TUSB_MCU OPT_MCU_RP2040
//#endif
#define CFG_TUSB_OS OPT_OS_PICO
#define CFG_TUSB_DEBUG 0
//#if CFG_TUSB_DEBUG
// #define tu_printf serial1_printf
// extern int serial1_printf(const char *__restrict __format, ...);
//#endif
#define CFG_TUSB_MEM_SECTION
#define CFG_TUSB_MEM_ALIGN TU_ATTR_ALIGNED(4)
//--------------------------------------------------------------------
// DEVICE CONFIGURATION
//--------------------------------------------------------------------
#define CFG_TUD_ENDOINT0_SIZE 64
//------------- CLASS -------------//
#define CFG_TUD_CDC 1
#define CFG_TUD_MSC 1
#define CFG_TUD_HID 1
#define CFG_TUD_MIDI 1
#define CFG_TUD_VENDOR 1
// CDC FIFO size of TX and RX
#define CFG_TUD_CDC_RX_BUFSIZE 256
#define CFG_TUD_CDC_TX_BUFSIZE 256
// MSC Buffer size of Device Mass storage
#define CFG_TUD_MSC_BUFSIZE 512
// HID buffer size Should be sufficient to hold ID (if any) + Data
#define CFG_TUD_HID_BUFSIZE 64
// MIDI FIFO size of TX and RX
#define CFG_TUD_MIDI_RX_BUFSIZE 128
#define CFG_TUD_MIDI_TX_BUFSIZE 128
// Vendor FIFO size of TX and RX
#define CFG_TUD_VENDOR_RX_BUFSIZE 64
#define CFG_TUD_VENDOR_TX_BUFSIZE 64
#ifdef __cplusplus
}
#endif
#endif /* _TUSB_CONFIG_H_ */
+21 -6
View File
@@ -9,12 +9,27 @@
#######################################
# Methods and Functions (KEYWORD2)
#######################################
setup1 KEYWORD2
loop2 KEYWORD2
setup1 KEYWORD2
loop2 KEYWORD2
analogWriteFreq KEYWORD2
analogWriteRange KEYWORD2
analogWriteResolution KEYWORD2
analogWriteResolution KEYWORD2
######################################
# Constants (LITERAL1)
#######################################
push KEYWORD2
push_nb KEYWORD2
pop KEYWORD2
pop_nb KEYWORD2
rp2040 KEYWORD2
RP2040 KEYWORD2
usToPIOCycles KEYWORD2
f_cpu KEYWORD2
getCycleCount KEYWORD2
getCycleCount64 KEYWORD2
idleOtherCore KEYWORD2
resumeOtherCore KEYWORD2
PIOProgram KEYWORD2
prepare KEYWORD2
BIN
View File
Binary file not shown.
+1 -8
View File
@@ -1,13 +1,11 @@
-iwithprefixbefore/cores/rp2040/api/deprecated-avr-comp/
-iwithprefixbefore/lib/pico_base/
-iwithprefixbefore/pico-examples/build/generated/pico_base
-iwithprefixbefore/pico-extras/src/common/pico_audio/include
-iwithprefixbefore/pico-extras/src/common/pico_util_buffer/include
-iwithprefixbefore/pico-extras/src/rp2_common/pico_audio_i2s/include
-iwithprefixbefore/pico-sdk/lib/tinyusb/src/
-iwithprefixbefore/pico-sdk/src/boards/include
-iwithprefixbefore/pico-sdk/src/common/pico_base/include
-iwithprefixbefore/pico-sdk/src/common/pico_base/include/
-iwithprefixbefore/pico-sdk/src/common/pico_binary_info/include
-iwithprefixbefore/pico-sdk/src/common/pico_bit_ops/include
-iwithprefixbefore/pico-sdk/src/common/pico_divider/include
@@ -16,8 +14,6 @@
-iwithprefixbefore/pico-sdk/src/common/pico_time/include
-iwithprefixbefore/pico-sdk/src/common/pico_util/include
-iwithprefixbefore/pico-sdk/src/rp2040/hardware_regs/include
-iwithprefixbefore/pico-sdk/src/rp2040/hardware_regs/include/
-iwithprefixbefore/pico-sdk/src/rp2040/hardware_regs/include/
-iwithprefixbefore/pico-sdk/src/rp2040/hardware_structs/include
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_adc/include
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_base/include
@@ -25,6 +21,7 @@
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_clocks/include
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_divider/include
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_dma/include
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_exception/include
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_flash/include
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_gpio/include
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_i2c/include
@@ -36,7 +33,6 @@
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_spi/include
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_sync/include
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_timer/include
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_timer/include/
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_uart/include
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_vreg/include
-iwithprefixbefore/pico-sdk/src/rp2_common/hardware_watchdog/include
@@ -46,12 +42,9 @@
-iwithprefixbefore/pico-sdk/src/rp2_common/pico_float/include
-iwithprefixbefore/pico-sdk/src/rp2_common/pico_int64_ops/include
-iwithprefixbefore/pico-sdk/src/rp2_common/pico_multicore/include
-iwithprefixbefore/pico-sdk/src/rp2_common/pico_multicore/include
-iwithprefixbefore/pico-sdk/src/rp2_common/pico_platform/include
-iwithprefixbefore/pico-sdk/src/rp2_common/pico_platform/include/
-iwithprefixbefore/pico-sdk/src/rp2_common/pico_printf/include
-iwithprefixbefore/pico-sdk/src/rp2_common/pico_runtime/include
-iwithprefixbefore/pico-sdk/src/rp2_common/pico_stdio/include
-iwithprefixbefore/pico-sdk/src/rp2_common/pico_stdio_uart/include
-iwithprefixbefore/pico-sdk/src/rp2_common/pico_stdio_usb/include
-iwithprefixbefore/pico-sdk/src/rp2_common/pico_unique_id/include
@@ -0,0 +1,83 @@
/*
This example reads audio data from the on-board PDM microphones, and prints
out the samples to the Serial console. The Serial Plotter built into the
Arduino IDE can be used to plot the audio data (Tools -> Serial Plotter)
Circuit:
- Arduino Nano 33 BLE board, or
- Arduino Nano RP2040 Connect, or
- Arduino Portenta H7 board plus Portenta Vision Shield
This example code is in the public domain.
*/
#include <PDM.h>
// default number of output channels
static const char channels = 1;
// default PCM output frequency
static const int frequency = 16000;
// Buffer to read samples into, each sample is 16-bits
short sampleBuffer[512];
// Number of audio samples read
volatile int samplesRead;
void setup() {
Serial.begin(9600);
while (!Serial);
// Configure the data receive callback
PDM.onReceive(onPDMdata);
// Optionally set the gain
// Defaults to 20 on the BLE Sense and -10 on the Portenta Vision Shield
// PDM.setGain(30);
// Initialize PDM with:
// - one channel (mono mode)
// - a 16 kHz sample rate for the Arduino Nano 33 BLE Sense
// - a 32 kHz or 64 kHz sample rate for the Arduino Portenta Vision Shield
if (!PDM.begin(channels, frequency)) {
Serial.println("Failed to start PDM!");
while (1);
}
}
void loop() {
// Wait for samples to be read
if (samplesRead) {
// Print samples to the serial monitor or plotter
for (int i = 0; i < samplesRead; i++) {
if(channels == 2) {
Serial.print("L:");
Serial.print(sampleBuffer[i]);
Serial.print(" R:");
i++;
}
Serial.println(sampleBuffer[i]);
}
// Clear the read count
samplesRead = 0;
}
}
/**
* Callback function to process the data from the PDM microphone.
* NOTE: This callback is executed as part of an ISR.
* Therefore using `Serial` to print messages inside this function isn't supported.
* */
void onPDMdata() {
// Query the number of available bytes
int bytesAvailable = PDM.available();
// Read into the sample buffer
PDM.read(sampleBuffer, bytesAvailable);
// 16-bit, 2 bytes per sample
samplesRead = bytesAvailable / 2;
}
+27
View File
@@ -0,0 +1,27 @@
#######################################
# Syntax Coloring Map PDM
#######################################
#######################################
# Datatypes (KEYWORD1)
#######################################
PDM KEYWORD1
#######################################
# Methods and Functions (KEYWORD2)
#######################################
begin KEYWORD2
end KEYWORD2
available KEYWORD2
read KEYWORD2
onReceive KEYWORD2
setGain KEYWORD2
setBufferSize KEYWORD2
#######################################
# Constants (LITERAL1)
#######################################
+9
View File
@@ -0,0 +1,9 @@
name=PDM
version=1.0
author=Arduino
maintainer=Arduino <info@arduino.cc>
sentence=Enables the communication with devices that use the PDM Bus. Specific implementation for nRF52.
paragraph=
category=Communication
url=
architectures=rp2040
+68
View File
@@ -0,0 +1,68 @@
/*
Copyright (c) 2019 Arduino LLC. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _PDM_H_INCLUDED
#define _PDM_H_INCLUDED
#include <Arduino.h>
//#include <pinDefinitions.h>
#include "utility/PDMDoubleBuffer.h"
class PDMClass
{
public:
PDMClass(int dinPin, int clkPin, int pwrPin);
virtual ~PDMClass();
int begin(int channels, int sampleRate);
void end();
virtual int available();
virtual int read(void* buffer, size_t size);
void onReceive(void(*)(void));
//PORTENTA_H7 min -12 max 51
//NANO 33 BLE SENSe min 0 max 80
void setGain(int gain);
void setBufferSize(int bufferSize);
size_t getBufferSize();
// private:
void IrqHandler(bool halftranfer);
private:
int _dinPin;
int _clkPin;
int _pwrPin;
int _channels;
int _samplerate;
int _gain;
int _init;
PDMDoubleBuffer _doubleBuffer;
void (*_onReceive)(void);
};
#ifdef PIN_PDM_DIN
extern PDMClass PDM;
#endif
#endif
+313
View File
@@ -0,0 +1,313 @@
/**
*******************************************************************************
* @file OpenPDMFilter.c
* @author CL
* @version V1.0.0
* @date 9-September-2015
* @brief Open PDM audio software decoding Library.
* This Library is used to decode and reconstruct the audio signal
* produced by ST MEMS microphone (MP45Dxxx, MP34Dxxx).
*******************************************************************************
* @attention
*
* <h2><center>&copy; COPYRIGHT 2018 STMicroelectronics</center></h2>
*
* 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.
*******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "OpenPDMFilter.h"
/* Variables -----------------------------------------------------------------*/
uint32_t div_const = 0;
int64_t sub_const = 0;
uint32_t sinc[DECIMATION_MAX * SINCN];
uint32_t sinc1[DECIMATION_MAX];
uint32_t sinc2[DECIMATION_MAX * 2];
uint32_t coef[SINCN][DECIMATION_MAX];
#ifdef USE_LUT
int32_t lut[256][DECIMATION_MAX / 8][SINCN];
#endif
/* Functions -----------------------------------------------------------------*/
#ifdef USE_LUT
int32_t filter_table_mono_64(uint8_t *data, uint8_t sincn)
{
return (int32_t)
lut[data[0]][0][sincn] +
lut[data[1]][1][sincn] +
lut[data[2]][2][sincn] +
lut[data[3]][3][sincn] +
lut[data[4]][4][sincn] +
lut[data[5]][5][sincn] +
lut[data[6]][6][sincn] +
lut[data[7]][7][sincn];
}
int32_t filter_table_stereo_64(uint8_t *data, uint8_t sincn)
{
return (int32_t)
lut[data[0]][0][sincn] +
lut[data[2]][1][sincn] +
lut[data[4]][2][sincn] +
lut[data[6]][3][sincn] +
lut[data[8]][4][sincn] +
lut[data[10]][5][sincn] +
lut[data[12]][6][sincn] +
lut[data[14]][7][sincn];
}
int32_t filter_table_mono_128(uint8_t *data, uint8_t sincn)
{
return (int32_t)
lut[data[0]][0][sincn] +
lut[data[1]][1][sincn] +
lut[data[2]][2][sincn] +
lut[data[3]][3][sincn] +
lut[data[4]][4][sincn] +
lut[data[5]][5][sincn] +
lut[data[6]][6][sincn] +
lut[data[7]][7][sincn] +
lut[data[8]][8][sincn] +
lut[data[9]][9][sincn] +
lut[data[10]][10][sincn] +
lut[data[11]][11][sincn] +
lut[data[12]][12][sincn] +
lut[data[13]][13][sincn] +
lut[data[14]][14][sincn] +
lut[data[15]][15][sincn];
}
int32_t filter_table_stereo_128(uint8_t *data, uint8_t sincn)
{
return (int32_t)
lut[data[0]][0][sincn] +
lut[data[2]][1][sincn] +
lut[data[4]][2][sincn] +
lut[data[6]][3][sincn] +
lut[data[8]][4][sincn] +
lut[data[10]][5][sincn] +
lut[data[12]][6][sincn] +
lut[data[14]][7][sincn] +
lut[data[16]][8][sincn] +
lut[data[18]][9][sincn] +
lut[data[20]][10][sincn] +
lut[data[22]][11][sincn] +
lut[data[24]][12][sincn] +
lut[data[26]][13][sincn] +
lut[data[28]][14][sincn] +
lut[data[30]][15][sincn];
}
int32_t (* filter_tables_64[2]) (uint8_t *data, uint8_t sincn) = {filter_table_mono_64, filter_table_stereo_64};
int32_t (* filter_tables_128[2]) (uint8_t *data, uint8_t sincn) = {filter_table_mono_128, filter_table_stereo_128};
#else
int32_t filter_table(uint8_t *data, uint8_t sincn, TPDMFilter_InitStruct *param)
{
uint8_t c, i;
uint16_t data_index = 0;
uint32_t *coef_p = &coef[sincn][0];
int32_t F = 0;
uint8_t decimation = param->Decimation;
uint8_t channels = param->In_MicChannels;
for (i = 0; i < decimation; i += 8) {
c = data[data_index];
F += ((c >> 7) ) * coef_p[i ] +
((c >> 6) & 0x01) * coef_p[i + 1] +
((c >> 5) & 0x01) * coef_p[i + 2] +
((c >> 4) & 0x01) * coef_p[i + 3] +
((c >> 3) & 0x01) * coef_p[i + 4] +
((c >> 2) & 0x01) * coef_p[i + 5] +
((c >> 1) & 0x01) * coef_p[i + 6] +
((c ) & 0x01) * coef_p[i + 7];
data_index += channels;
}
return F;
}
#endif
void convolve(uint32_t Signal[/* SignalLen */], unsigned short SignalLen,
uint32_t Kernel[/* KernelLen */], unsigned short KernelLen,
uint32_t Result[/* SignalLen + KernelLen - 1 */])
{
uint16_t n;
for (n = 0; n < SignalLen + KernelLen - 1; n++)
{
unsigned short kmin, kmax, k;
Result[n] = 0;
kmin = (n >= KernelLen - 1) ? n - (KernelLen - 1) : 0;
kmax = (n < SignalLen - 1) ? n : SignalLen - 1;
for (k = kmin; k <= kmax; k++) {
Result[n] += Signal[k] * Kernel[n - k];
}
}
}
void Open_PDM_Filter_Init(TPDMFilter_InitStruct *Param)
{
uint16_t i, j;
int64_t sum = 0;
uint8_t decimation = Param->Decimation;
for (i = 0; i < SINCN; i++) {
Param->Coef[i] = 0;
Param->bit[i] = 0;
}
for (i = 0; i < decimation; i++) {
sinc1[i] = 1;
}
Param->OldOut = Param->OldIn = Param->OldZ = 0;
Param->LP_ALFA = (Param->LP_HZ != 0 ? (uint16_t) (Param->LP_HZ * 256 / (Param->LP_HZ + Param->Fs / (2 * 3.14159))) : 0);
Param->HP_ALFA = (Param->HP_HZ != 0 ? (uint16_t) (Param->Fs * 256 / (2 * 3.14159 * Param->HP_HZ + Param->Fs)) : 0);
Param->FilterLen = decimation * SINCN;
sinc[0] = 0;
sinc[decimation * SINCN - 1] = 0;
convolve(sinc1, decimation, sinc1, decimation, sinc2);
convolve(sinc2, decimation * 2 - 1, sinc1, decimation, &sinc[1]);
for(j = 0; j < SINCN; j++) {
for (i = 0; i < decimation; i++) {
coef[j][i] = sinc[j * decimation + i];
sum += sinc[j * decimation + i];
}
}
sub_const = sum >> 1;
div_const = sub_const * Param->MaxVolume / 32768 / Param->filterGain;
div_const = (div_const == 0 ? 1 : div_const);
#ifdef USE_LUT
/* Look-Up Table. */
uint16_t c, d, s;
for (s = 0; s < SINCN; s++)
{
uint32_t *coef_p = &coef[s][0];
for (c = 0; c < 256; c++)
for (d = 0; d < decimation / 8; d++)
lut[c][d][s] = ((c >> 7) ) * coef_p[d * 8 ] +
((c >> 6) & 0x01) * coef_p[d * 8 + 1] +
((c >> 5) & 0x01) * coef_p[d * 8 + 2] +
((c >> 4) & 0x01) * coef_p[d * 8 + 3] +
((c >> 3) & 0x01) * coef_p[d * 8 + 4] +
((c >> 2) & 0x01) * coef_p[d * 8 + 5] +
((c >> 1) & 0x01) * coef_p[d * 8 + 6] +
((c ) & 0x01) * coef_p[d * 8 + 7];
}
#endif
}
void Open_PDM_Filter_64(uint8_t* data, int16_t* dataOut, uint16_t volume, TPDMFilter_InitStruct *Param)
{
uint8_t i, data_out_index;
uint8_t channels = Param->In_MicChannels;
uint8_t data_inc = ((DECIMATION_MAX >> 4) * channels);
int64_t Z, Z0, Z1, Z2;
int64_t OldOut, OldIn, OldZ;
OldOut = Param->OldOut;
OldIn = Param->OldIn;
OldZ = Param->OldZ;
#ifdef USE_LUT
uint8_t j = channels - 1;
#endif
for (i = 0, data_out_index = 0; i < Param->nSamples; i++, data_out_index += channels) {
#ifdef USE_LUT
Z0 = filter_tables_64[j](data, 0);
Z1 = filter_tables_64[j](data, 1);
Z2 = filter_tables_64[j](data, 2);
#else
Z0 = filter_table(data, 0, Param);
Z1 = filter_table(data, 1, Param);
Z2 = filter_table(data, 2, Param);
#endif
Z = Param->Coef[1] + Z2 - sub_const;
Param->Coef[1] = Param->Coef[0] + Z1;
Param->Coef[0] = Z0;
OldOut = (Param->HP_ALFA * (OldOut + Z - OldIn)) >> 8;
OldIn = Z;
OldZ = ((256 - Param->LP_ALFA) * OldZ + Param->LP_ALFA * OldOut) >> 8;
Z = OldZ * volume;
Z = RoundDiv(Z, div_const);
Z = SaturaLH(Z, -32700, 32700);
dataOut[data_out_index] = Z;
data += data_inc;
}
Param->OldOut = OldOut;
Param->OldIn = OldIn;
Param->OldZ = OldZ;
}
void Open_PDM_Filter_128(uint8_t* data, int16_t* dataOut, uint16_t volume, TPDMFilter_InitStruct *Param)
{
uint8_t i, data_out_index;
uint8_t channels = Param->In_MicChannels;
uint8_t data_inc = ((DECIMATION_MAX >> 3) * channels);
int64_t Z, Z0, Z1, Z2;
int64_t OldOut, OldIn, OldZ;
OldOut = Param->OldOut;
OldIn = Param->OldIn;
OldZ = Param->OldZ;
#ifdef USE_LUT
uint8_t j = channels - 1;
#endif
for (i = 0, data_out_index = 0; i < Param->nSamples; i++, data_out_index += channels) {
#ifdef USE_LUT
Z0 = filter_tables_128[j](data, 0);
Z1 = filter_tables_128[j](data, 1);
Z2 = filter_tables_128[j](data, 2);
#else
Z0 = filter_table(data, 0, Param);
Z1 = filter_table(data, 1, Param);
Z2 = filter_table(data, 2, Param);
#endif
Z = Param->Coef[1] + Z2 - sub_const;
Param->Coef[1] = Param->Coef[0] + Z1;
Param->Coef[0] = Z0;
OldOut = (Param->HP_ALFA * (OldOut + Z - OldIn)) >> 8;
OldIn = Z;
OldZ = ((256 - Param->LP_ALFA) * OldZ + Param->LP_ALFA * OldOut) >> 8;
Z = OldZ * volume;
Z = RoundDiv(Z, div_const);
Z = SaturaLH(Z, -32700, 32700);
dataOut[data_out_index] = Z;
data += data_inc;
}
Param->OldOut = OldOut;
Param->OldIn = OldIn;
Param->OldZ = OldZ;
}
+99
View File
@@ -0,0 +1,99 @@
/**
*******************************************************************************
* @file OpenPDMFilter.h
* @author CL
* @version V1.0.0
* @date 9-September-2015
* @brief Header file for Open PDM audio software decoding Library.
* This Library is used to decode and reconstruct the audio signal
* produced by ST MEMS microphone (MP45Dxxx, MP34Dxxx).
*******************************************************************************
* @attention
*
* <h2><center>&copy; COPYRIGHT 2018 STMicroelectronics</center></h2>
*
* 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.
*******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __OPENPDMFILTER_H
#define __OPENPDMFILTER_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include <stdint.h>
/* Definitions ---------------------------------------------------------------*/
/*
* Enable to use a Look-Up Table to improve performances while using more FLASH
* and RAM memory.
* Note: Without Look-Up Table up to stereo@16KHz configuration is supported.
*/
#define USE_LUT
#define SINCN 3
#define DECIMATION_MAX 128
#define HTONS(A) ((((uint16_t)(A) & 0xff00) >> 8) | \
(((uint16_t)(A) & 0x00ff) << 8))
#define RoundDiv(a, b) (((a)>0)?(((a)+(b)/2)/(b)):(((a)-(b)/2)/(b)))
#define SaturaLH(N, L, H) (((N)<(L))?(L):(((N)>(H))?(H):(N)))
/* Types ---------------------------------------------------------------------*/
typedef struct {
/* Public */
float LP_HZ;
float HP_HZ;
uint16_t Fs;
unsigned int nSamples;
uint8_t In_MicChannels;
uint8_t Out_MicChannels;
uint8_t Decimation;
uint8_t MaxVolume;
/* Private */
uint32_t Coef[SINCN];
uint16_t FilterLen;
int64_t OldOut, OldIn, OldZ;
uint16_t LP_ALFA;
uint16_t HP_ALFA;
uint16_t bit[5];
uint16_t byte;
uint16_t filterGain;
} TPDMFilter_InitStruct;
/* Exported functions ------------------------------------------------------- */
void Open_PDM_Filter_Init(TPDMFilter_InitStruct *init_struct);
void Open_PDM_Filter_64(uint8_t* data, int16_t* data_out, uint16_t mic_gain, TPDMFilter_InitStruct *init_struct);
void Open_PDM_Filter_128(uint8_t* data, int16_t* data_out, uint16_t mic_gain, TPDMFilter_InitStruct *init_struct);
#ifdef __cplusplus
}
#endif
#endif // __OPENPDMFILTER_H
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+205
View File
@@ -0,0 +1,205 @@
#include "Arduino.h"
#include "PDM.h"
#include "OpenPDMFilter.h"
extern "C" {
#include "hardware/pio.h"
#include "hardware/dma.h"
#include "hardware/clocks.h"
}
#include "hardware/sync.h"
#include "pdm.pio.h"
// Hardware peripherals used
uint dmaChannel = 0;
PIO pio = pio0;
uint sm = 0;
// raw buffers contain PDM data
#define RAW_BUFFER_SIZE 512 // should be a multiple of (decimation / 8)
uint8_t rawBuffer0[RAW_BUFFER_SIZE];
uint8_t rawBuffer1[RAW_BUFFER_SIZE];
uint8_t* rawBuffer[2] = {rawBuffer0, rawBuffer1};
volatile int rawBufferIndex = 0;
int decimation = 64;
// final buffer is the one to be filled with PCM data
int16_t* volatile finalBuffer;
// OpenPDM filter used to convert PDM into PCM
#define FILTER_GAIN 16
TPDMFilter_InitStruct filter;
extern "C" {
__attribute__((__used__)) void dmaHandler(void)
{
PDM.IrqHandler(true);
}
}
PDMClass::PDMClass(int dinPin, int clkPin, int pwrPin) :
_dinPin(dinPin),
_clkPin(clkPin),
_pwrPin(pwrPin),
_onReceive(NULL),
_gain(-1),
_channels(-1),
_samplerate(-1),
_init(-1)
{
}
PDMClass::~PDMClass()
{
}
int PDMClass::begin(int channels, int sampleRate)
{
//_channels = channels; // only one channel available
// clear the final buffers
_doubleBuffer.reset();
finalBuffer = (int16_t*)_doubleBuffer.data();
int finalBufferLength = _doubleBuffer.availableForWrite() / sizeof(int16_t);
_doubleBuffer.swap(0);
int rawBufferLength = RAW_BUFFER_SIZE / (decimation / 8);
// Saturate number of samples. Remaining bytes are dropped.
if (rawBufferLength > finalBufferLength) {
rawBufferLength = finalBufferLength;
}
/* Initialize Open PDM library */
filter.Fs = sampleRate;
filter.nSamples = rawBufferLength;
filter.LP_HZ = sampleRate/2;
filter.HP_HZ = 10;
filter.In_MicChannels = 1;
filter.Out_MicChannels = 1;
filter.Decimation = decimation;
if(_gain == -1) {
_gain = FILTER_GAIN;
}
filter.filterGain = _gain;
Open_PDM_Filter_Init(&filter);
// Configure PIO state machine
float clkDiv = (float)clock_get_hz(clk_sys) / sampleRate / decimation / 2;
uint offset = pio_add_program(pio, &pdm_pio_program);
pdm_pio_program_init(pio, sm, offset, _clkPin, _dinPin, clkDiv);
// Wait for microphone
delay(100);
// Configure DMA for transferring PIO rx buffer to raw buffers
dma_channel_config c = dma_channel_get_default_config(dmaChannel);
channel_config_set_read_increment(&c, false);
channel_config_set_write_increment(&c, true);
channel_config_set_dreq(&c, pio_get_dreq(pio, sm, false));
channel_config_set_transfer_data_size(&c, DMA_SIZE_8);
// Clear DMA interrupts
dma_hw->ints0 = 1u << dmaChannel;
// Enable DMA interrupts
dma_channel_set_irq0_enabled(dmaChannel, true);
irq_set_exclusive_handler(DMA_IRQ_0, dmaHandler);
irq_set_enabled(DMA_IRQ_0, true);
dma_channel_configure(dmaChannel, &c,
rawBuffer[rawBufferIndex], // Destinatinon pointer
&pio->rxf[sm], // Source pointer
RAW_BUFFER_SIZE, // Number of transfers
true // Start immediately
);
_init = 1;
return 1;
}
void PDMClass::end()
{
dma_channel_abort(dmaChannel);
pinMode(_clkPin, INPUT);
}
int PDMClass::available()
{
//NVIC_DisableIRQ(DMA_IRQ_0n);
//uint32_t interrupts = save_and_disable_interrupts();
irq_set_enabled(DMA_IRQ_0, false);
size_t avail = _doubleBuffer.available();
irq_set_enabled(DMA_IRQ_0, true);
//restore_interrupts(interrupts);
//NVIC_EnableIRQ(DMA_IRQ_0n);
return avail;
}
int PDMClass::read(void* buffer, size_t size)
{
irq_set_enabled(DMA_IRQ_0, false);
int read = _doubleBuffer.read(buffer, size);
irq_set_enabled(DMA_IRQ_0, true);
return read;
}
void PDMClass::onReceive(void(*function)(void))
{
_onReceive = function;
}
void PDMClass::setGain(int gain)
{
_gain = gain;
if(_init == 1) {
filter.filterGain = _gain;
Open_PDM_Filter_Init(&filter);
}
}
void PDMClass::setBufferSize(int bufferSize)
{
_doubleBuffer.setSize(bufferSize);
}
void PDMClass::IrqHandler(bool halftranfer)
{
static int cutSamples = 100;
// Clear the interrupt request.
dma_hw->ints0 = 1u << dmaChannel;
// Restart dma pointing to the other buffer
int shadowIndex = rawBufferIndex ^ 1;
dma_channel_set_write_addr(dmaChannel, rawBuffer[shadowIndex], true);
if (_doubleBuffer.available()) {
// buffer overflow, stop
return end();
}
// fill final buffer with PCM samples
Open_PDM_Filter_64(rawBuffer[rawBufferIndex], finalBuffer, 1, &filter);
if (cutSamples) {
memset(finalBuffer, 0, cutSamples);
cutSamples = 0;
}
// swap final buffer and raw buffers' indexes
finalBuffer = (int16_t*)_doubleBuffer.data();
_doubleBuffer.swap(filter.nSamples * sizeof(int16_t));
rawBufferIndex = shadowIndex;
if (_onReceive) {
_onReceive();
}
}
#ifdef PIN_PDM_DIN
PDMClass PDM(PIN_PDM_DIN, PIN_PDM_CLK, -1);
#endif // PIN_PDM_DIN
+41
View File
@@ -0,0 +1,41 @@
.program pdm_pio
.side_set 1
.wrap_target
; prova a cambiare edge
;sample on falling edge
push iffull noblock side 1
;nop side 1
;nop side 0
in pins, 1 side 0
;nop side 0
.wrap
% c-sdk {
#include "hardware/gpio.h"
static inline void pdm_pio_program_init(PIO pio, uint sm, uint offset, uint clkPin, uint dataPin, float clkDiv) {
pio_sm_config c = pdm_pio_program_get_default_config(offset);
sm_config_set_sideset(&c, 1, false, false);
//sm_config_set_in_shift(&c, false, true, 8);
sm_config_set_in_shift(&c, false, false, 8);
sm_config_set_in_pins(&c, dataPin);
sm_config_set_sideset_pins(&c, clkPin);
sm_config_set_clkdiv(&c, clkDiv);
pio_sm_set_consecutive_pindirs(pio, sm, dataPin, 1, false);
pio_sm_set_consecutive_pindirs(pio, sm, clkPin, 1, true);
pio_sm_set_pins_with_mask(pio, sm, 0, (1u << clkPin) );
//pio_gpio_init(pio, dataPin);
pio_gpio_init(pio, clkPin);
pio_sm_init(pio, sm, offset, &c);
pio_sm_set_enabled(pio, sm, true);
}
%}
+56
View File
@@ -0,0 +1,56 @@
// -------------------------------------------------- //
// This file is autogenerated by pioasm; do not edit! //
// -------------------------------------------------- //
#if !PICO_NO_HARDWARE
#include "hardware/pio.h"
#endif
// ------- //
// pdm_pio //
// ------- //
#define pdm_pio_wrap_target 0
#define pdm_pio_wrap 1
static const uint16_t pdm_pio_program_instructions[] = {
// .wrap_target
0x9040, // 0: push iffull noblock side 1
0x4001, // 1: in pins, 1 side 0
// .wrap
};
#if !PICO_NO_HARDWARE
static const struct pio_program pdm_pio_program = {
.instructions = pdm_pio_program_instructions,
.length = 2,
.origin = -1,
};
static inline pio_sm_config pdm_pio_program_get_default_config(uint offset) {
pio_sm_config c = pio_get_default_sm_config();
sm_config_set_wrap(&c, offset + pdm_pio_wrap_target, offset + pdm_pio_wrap);
sm_config_set_sideset(&c, 1, false, false);
return c;
}
#include "hardware/gpio.h"
static inline void pdm_pio_program_init(PIO pio, uint sm, uint offset, uint clkPin, uint dataPin, float clkDiv) {
pio_sm_config c = pdm_pio_program_get_default_config(offset);
sm_config_set_sideset(&c, 1, false, false);
//sm_config_set_in_shift(&c, false, true, 8);
sm_config_set_in_shift(&c, false, false, 8);
sm_config_set_in_pins(&c, dataPin);
sm_config_set_sideset_pins(&c, clkPin);
sm_config_set_clkdiv(&c, clkDiv);
pio_sm_set_consecutive_pindirs(pio, sm, dataPin, 1, false);
pio_sm_set_consecutive_pindirs(pio, sm, clkPin, 1, true);
pio_sm_set_pins_with_mask(pio, sm, 0, (1u << clkPin) );
//pio_gpio_init(pio, dataPin);
pio_gpio_init(pio, clkPin);
pio_sm_init(pio, sm, offset, &c);
pio_sm_set_enabled(pio, sm, true);
}
#endif
@@ -0,0 +1,139 @@
/*
Copyright (c) 2016 Arduino LLC. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <stdlib.h>
#include <string.h>
#include "PDMDoubleBuffer.h"
PDMDoubleBuffer::PDMDoubleBuffer() :
_size(DEFAULT_PDM_BUFFER_SIZE)
{
reset();
}
PDMDoubleBuffer::~PDMDoubleBuffer()
{
}
void PDMDoubleBuffer::setSize(int size)
{
_size = size;
reset();
}
size_t PDMDoubleBuffer::getSize()
{
return _size;
}
void PDMDoubleBuffer::reset()
{
_buffer[0] = (uint8_t*)realloc(_buffer[0], _size);
_buffer[1] = (uint8_t*)realloc(_buffer[1], _size);
memset(_buffer[0], 0x00, _size);
memset(_buffer[1], 0x00, _size);
_index = 0;
_length[0] = 0;
_length[1] = 0;
_readOffset[0] = 0;
_readOffset[1] = 0;
}
size_t PDMDoubleBuffer::availableForWrite()
{
return (_size - (_length[_index] - _readOffset[_index]));
}
size_t PDMDoubleBuffer::write(const void *buffer, size_t size)
{
size_t space = availableForWrite();
if (size > space) {
size = space;
}
if (size == 0) {
return 0;
}
memcpy(&_buffer[_index][_length[_index]], buffer, size);
_length[_index] += size;
return size;
}
size_t PDMDoubleBuffer::read(void *buffer, size_t size)
{
size_t avail = available();
if (size > avail) {
size = avail;
}
if (size == 0) {
return 0;
}
memcpy(buffer, &_buffer[_index][_readOffset[_index]], size);
_readOffset[_index] += size;
return size;
}
size_t PDMDoubleBuffer::peek(void *buffer, size_t size)
{
size_t avail = available();
if (size > avail) {
size = avail;
}
if (size == 0) {
return 0;
}
memcpy(buffer, &_buffer[_index][_readOffset[_index]], size);
return size;
}
void* PDMDoubleBuffer::data()
{
return (void*)_buffer[_index];
}
size_t PDMDoubleBuffer::available()
{
return _length[_index] - _readOffset[_index];
}
void PDMDoubleBuffer::swap(int length)
{
if (_index == 0) {
_index = 1;
} else {
_index = 0;
}
_length[_index] = length;
_readOffset[_index] = 0;
}
@@ -0,0 +1,54 @@
/*
Copyright (c) 2016 Arduino LLC. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _PDM_DOUBLE_BUFFER_H_INCLUDED
#define _PDM_DOUBLE_BUFFER_H_INCLUDED
#include <stddef.h>
#include <stdint.h>
#define DEFAULT_PDM_BUFFER_SIZE 512
class PDMDoubleBuffer
{
public:
PDMDoubleBuffer();
virtual ~PDMDoubleBuffer();
void setSize(int size);
size_t getSize();
void reset();
size_t availableForWrite();
size_t write(const void *buffer, size_t size);
size_t read(void *buffer, size_t size);
size_t peek(void *buffer, size_t size);
void* data();
size_t available();
void swap(int length = 0);
private:
uint8_t* _buffer[2] __attribute__((aligned (16)));
int _size;
volatile int _length[2];
volatile int _readOffset[2];
volatile int _index;
};
#endif
+2 -2
View File
@@ -234,8 +234,8 @@ protected:
}
static uint8_t _getFlags(OpenMode openMode, AccessMode accessMode) {
uint8_t mode = 0;
static int _getFlags(OpenMode openMode, AccessMode accessMode) {
int mode = 0;
if (openMode & OM_CREATE) {
mode |= O_CREAT;
}
+5 -1
View File
@@ -123,7 +123,7 @@ void TwoWire::begin(uint8_t addr) {
i2c_set_slave_mode(_i2c, true, addr);
// Our callback IRQ
_i2c->hw->intr_mask = (1 << 10) | (1 << 9) | (1 << 5) | (1 << 2);
_i2c->hw->intr_mask = (1 << 10) | (1 << 9) | (1 << 6) | (1 << 5) | (1 << 2);
int irqNo = I2C0_IRQ + i2c_hw_index(_i2c);
irq_set_exclusive_handler(irqNo, i2c_hw_index(_i2c) == 0 ? _handler0 : _handler1);
@@ -154,6 +154,10 @@ void TwoWire::onIRQ() {
_slaveStartDet = false;
_i2c->hw->clr_stop_det;
}
if (_i2c->hw->intr_stat & (1 << 6)) {
// TX_ABRT
_i2c->hw->clr_tx_abrt;
}
if (_i2c->hw->intr_stat & (1 << 5)) {
// RD_REQ
if (_onRequestCallback) {
@@ -0,0 +1,21 @@
void setup() {
Serial.begin(115200);
delay(3000);
Serial.println("High precision timing measurements/delays can be built using");
Serial.println("rp2040.getCycleCount() and rp2040.getCycleCount64().\n");
uint32_t a = rp2040.getCycleCount();
delay(1000);
uint32_t b = rp2040.getCycleCount();
Serial.printf("There are %d cycles in one second.\n\n\n", b - a);
delay(3000);
Serial.println("Note that the (32-bit) getCycleCount() will wraparound in ~30 seconds.");
Serial.println("Using the 64-bit getCycleCount64() makes it practically infinite.");
Serial.printf("\n%15s - %15s\n", "getCycleCount", "getCycleCount64");
}
void loop() {
Serial.printf("%15u - %15llu\n", rp2040.getCycleCount(), rp2040.getCycleCount64());
delay(1500);
}
+145 -142
View File
@@ -38,6 +38,9 @@
{
"name": "Adafruit Trinkey RP2040 QT"
},
{
"name": "Arduino Nano RP2040 Connect"
},
{
"name": "SparkFun ProMicro RP2040"
},
@@ -48,22 +51,22 @@
"toolsDependencies": [
{
"packager": "rp2040",
"version": "1.2.0-a-407f016",
"version": "1.3.0-a-dcbbdf3",
"name": "pqt-gcc"
},
{
"packager": "rp2040",
"version": "1.2.0-a-407f016",
"version": "1.3.0-a-dcbbdf3",
"name": "pqt-mklittlefs"
},
{
"packager": "rp2040",
"version": "1.2.0-a-407f016",
"version": "1.3.0-a-dcbbdf3",
"name": "pqt-elf2uf2"
},
{
"packager": "rp2040",
"version": "1.2.0-a-407f016",
"version": "1.3.0-a-dcbbdf3",
"name": "pqt-pioasm"
},
{
@@ -73,7 +76,7 @@
},
{
"packager": "rp2040",
"version": "1.2.0-a-407f016",
"version": "1.3.0-a-dcbbdf3",
"name": "pqt-openocd"
}
],
@@ -84,57 +87,57 @@
],
"tools": [
{
"version": "1.2.0-a-407f016",
"version": "1.3.0-a-dcbbdf3",
"name": "pqt-openocd",
"systems": [
{
"host": "aarch64-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/aarch64-linux-gnu.openocd-d58c2ef5e.210607.tar.gz",
"archiveFileName": "aarch64-linux-gnu.openocd-d58c2ef5e.210607.tar.gz",
"checksum": "SHA-256:a85f1df05614ac0bba3742df0aa36b0a87b9bbef0fbadd4d0ccfa1938801ae98",
"size": "6144933"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/aarch64-linux-gnu.openocd-d58c2ef5e.210629.tar.gz",
"archiveFileName": "aarch64-linux-gnu.openocd-d58c2ef5e.210629.tar.gz",
"checksum": "SHA-256:d9a0a6ce88c79404c5d7ba1d4b2d609290ac87833a2ef6ae3faea9e6ca16b822",
"size": "6144945"
},
{
"host": "arm-linux-gnueabihf",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/arm-linux-gnueabihf.openocd-d58c2ef5e.210607.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.openocd-d58c2ef5e.210607.tar.gz",
"checksum": "SHA-256:f79ffe70110512ce41c61477910e33fa5ef986fbc142aedfd89f7009f132b237",
"size": "5849262"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/arm-linux-gnueabihf.openocd-d58c2ef5e.210629.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.openocd-d58c2ef5e.210629.tar.gz",
"checksum": "SHA-256:f7b081481588b4667f0f0b168700fc42c1c3b311552b33f41a3c6f963b64db24",
"size": "5849230"
},
{
"host": "i686-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/i686-linux-gnu.openocd-d58c2ef5e.210607.tar.gz",
"archiveFileName": "i686-linux-gnu.openocd-d58c2ef5e.210607.tar.gz",
"checksum": "SHA-256:b4a8af73539ae2e2a653f8fbe029a5b52db80580c942f0399cafb7d3829498c0",
"size": "5651754"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/i686-linux-gnu.openocd-d58c2ef5e.210629.tar.gz",
"archiveFileName": "i686-linux-gnu.openocd-d58c2ef5e.210629.tar.gz",
"checksum": "SHA-256:89b5d50666a1c09ce4185e4e3cb78ea37cb2ad63b9bfecd5fb59931df509c259",
"size": "5652248"
},
{
"host": "i686-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/i686-w64-mingw32.openocd-d58c2ef5e.210607.zip",
"archiveFileName": "i686-w64-mingw32.openocd-d58c2ef5e.210607.zip",
"checksum": "SHA-256:7156af6e650df6fc4bfc8541f2f1fd05bfe136b3547b4a0aef91668af88f8b6d",
"size": "8330281"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/i686-w64-mingw32.openocd-d58c2ef5e.210629.zip",
"archiveFileName": "i686-w64-mingw32.openocd-d58c2ef5e.210629.zip",
"checksum": "SHA-256:d34be5086922645a31514409b96485c93fe19e117b2368f17ed610bf8ef91e14",
"size": "8330282"
},
{
"host": "x86_64-apple-darwin",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/x86_64-apple-darwin14.openocd-d58c2ef5e.210607.tar.gz",
"archiveFileName": "x86_64-apple-darwin14.openocd-d58c2ef5e.210607.tar.gz",
"checksum": "SHA-256:965e35faf4a93396c4f4a22a504fd6b4f639752922996447d5c1e0e65d7329de",
"size": "1981786"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/x86_64-apple-darwin14.openocd-d58c2ef5e.210629.tar.gz",
"archiveFileName": "x86_64-apple-darwin14.openocd-d58c2ef5e.210629.tar.gz",
"checksum": "SHA-256:00bd4f654db0cef007502cc13e74e29935e9e18ee991826d3d0617672b6bc8e9",
"size": "1981800"
},
{
"host": "x86_64-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/x86_64-linux-gnu.openocd-d58c2ef5e.210607.tar.gz",
"archiveFileName": "x86_64-linux-gnu.openocd-d58c2ef5e.210607.tar.gz",
"checksum": "SHA-256:c54390c9464bcf2a32265ecbafaec6d68cdd41471fa14ba4afabe43fe0a11645",
"size": "6076479"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/x86_64-linux-gnu.openocd-d58c2ef5e.210629.tar.gz",
"archiveFileName": "x86_64-linux-gnu.openocd-d58c2ef5e.210629.tar.gz",
"checksum": "SHA-256:0b3107a21c8268db2ce208e3b4f2dbe481907a989e651ef57713660a4680b8ba",
"size": "6076502"
},
{
"host": "x86_64-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/x86_64-w64-mingw32.openocd-d58c2ef5e.210607.zip",
"archiveFileName": "x86_64-w64-mingw32.openocd-d58c2ef5e.210607.zip",
"checksum": "SHA-256:4b481449371b39b4e0e87bd5e5a247f99c025b97ccd186c3b1ca58ff2cb44875",
"size": "8719676"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/x86_64-w64-mingw32.openocd-d58c2ef5e.210629.zip",
"archiveFileName": "x86_64-w64-mingw32.openocd-d58c2ef5e.210629.zip",
"checksum": "SHA-256:665b6723c515619d6b07653c90e807065f36f29baa1cfc6fef50f9bd91fb2c64",
"size": "8719677"
}
]
},
@@ -201,221 +204,221 @@
]
},
{
"version": "1.2.0-a-407f016",
"version": "1.3.0-a-dcbbdf3",
"name": "pqt-gcc",
"systems": [
{
"host": "aarch64-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/aarch64-linux-gnu.arm-none-eabi-407f016.210607.tar.gz",
"archiveFileName": "aarch64-linux-gnu.arm-none-eabi-407f016.210607.tar.gz",
"checksum": "SHA-256:fc30b07b98fe965db814178b71f368895790f6789d503d71c8af70ff92451d5c",
"size": "103186508"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/aarch64-linux-gnu.arm-none-eabi-dcbbdf3.210629.tar.gz",
"archiveFileName": "aarch64-linux-gnu.arm-none-eabi-dcbbdf3.210629.tar.gz",
"checksum": "SHA-256:79b3c736bd96c65d33f15cbde535619b4f32987c6cc47d0efe6ac71e1ff001e0",
"size": "103183564"
},
{
"host": "arm-linux-gnueabihf",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/arm-linux-gnueabihf.arm-none-eabi-407f016.210607.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.arm-none-eabi-407f016.210607.tar.gz",
"checksum": "SHA-256:4a6ecfaf485ab428e233cc06e853b91dc272146ca0200fbbcdcb87f1930239b8",
"size": "95858053"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/arm-linux-gnueabihf.arm-none-eabi-dcbbdf3.210629.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.arm-none-eabi-dcbbdf3.210629.tar.gz",
"checksum": "SHA-256:6a2752cf94d5b237ef63d44205acab97e9e87106cd5ee28b19b9bfe54b29a9b7",
"size": "95859242"
},
{
"host": "i686-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/i686-linux-gnu.arm-none-eabi-407f016.210607.tar.gz",
"archiveFileName": "i686-linux-gnu.arm-none-eabi-407f016.210607.tar.gz",
"checksum": "SHA-256:8f97c67d20077c551b13344c1a96a9f51dd3a91b178a4731cd9dcc27a19217e6",
"size": "105954517"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/i686-linux-gnu.arm-none-eabi-dcbbdf3.210629.tar.gz",
"archiveFileName": "i686-linux-gnu.arm-none-eabi-dcbbdf3.210629.tar.gz",
"checksum": "SHA-256:8917a4bd123374bc406db02e13cd609741b194a8e9471dc3e6dc52d712394b00",
"size": "105959297"
},
{
"host": "i686-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/i686-w64-mingw32.arm-none-eabi-407f016.210607.zip",
"archiveFileName": "i686-w64-mingw32.arm-none-eabi-407f016.210607.zip",
"checksum": "SHA-256:c30e8b67d16ae6f29bcca84c166ecc3fced209d73b1b8925d5dd0e79b850f923",
"size": "105487629"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/i686-w64-mingw32.arm-none-eabi-dcbbdf3.210629.zip",
"archiveFileName": "i686-w64-mingw32.arm-none-eabi-dcbbdf3.210629.zip",
"checksum": "SHA-256:2305fa29b39a20788dbc7e53dc01bfb57c4a8bd9aec55183c5d99fca5a4d3f72",
"size": "105494605"
},
{
"host": "x86_64-apple-darwin",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/x86_64-apple-darwin14.arm-none-eabi-407f016.210607.tar.gz",
"archiveFileName": "x86_64-apple-darwin14.arm-none-eabi-407f016.210607.tar.gz",
"checksum": "SHA-256:5c617ffcf86518a6451701bd5756e28f9b7587acc0cb2cd503b6c600b8cf417d",
"size": "107365915"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/x86_64-apple-darwin14.arm-none-eabi-dcbbdf3.210629.tar.gz",
"archiveFileName": "x86_64-apple-darwin14.arm-none-eabi-dcbbdf3.210629.tar.gz",
"checksum": "SHA-256:f54570bb6458fb7188848bf87348ec8778f6538b4a44a0b48005be55aa745c73",
"size": "107367132"
},
{
"host": "x86_64-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/x86_64-linux-gnu.arm-none-eabi-407f016.210607.tar.gz",
"archiveFileName": "x86_64-linux-gnu.arm-none-eabi-407f016.210607.tar.gz",
"checksum": "SHA-256:0a2b7d03f79f723d62255595f9af862807feee601456bb0e2477ce188a4a975f",
"size": "107847587"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/x86_64-linux-gnu.arm-none-eabi-dcbbdf3.210629.tar.gz",
"archiveFileName": "x86_64-linux-gnu.arm-none-eabi-dcbbdf3.210629.tar.gz",
"checksum": "SHA-256:c5f50f97bb71fedc625c0a1dabc032ac904a1fedf6a62e07c3f4e4d2aa7fcafa",
"size": "107843709"
},
{
"host": "x86_64-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/x86_64-w64-mingw32.arm-none-eabi-407f016.210607.zip",
"archiveFileName": "x86_64-w64-mingw32.arm-none-eabi-407f016.210607.zip",
"checksum": "SHA-256:675ee78477afc5f2daf1e25f3c0560a3adbaa7f2d73d99059e549835b4022bf8",
"size": "110334002"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/x86_64-w64-mingw32.arm-none-eabi-dcbbdf3.210629.zip",
"archiveFileName": "x86_64-w64-mingw32.arm-none-eabi-dcbbdf3.210629.zip",
"checksum": "SHA-256:de391b7daf0670c202e6187c476f1f46f46cc509b2e70cbeb902ce1ab4aeaf40",
"size": "110344690"
}
]
},
{
"version": "1.2.0-a-407f016",
"version": "1.3.0-a-dcbbdf3",
"name": "pqt-elf2uf2",
"systems": [
{
"host": "aarch64-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/aarch64-linux-gnu.elf2uf2-fc10a97.210607.tar.gz",
"archiveFileName": "aarch64-linux-gnu.elf2uf2-fc10a97.210607.tar.gz",
"checksum": "SHA-256:59f6c2f08f1809987bf40df51808f848146a00c626dff06d3cabafb726db8830",
"size": "79850"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/aarch64-linux-gnu.elf2uf2-fc10a97.210629.tar.gz",
"archiveFileName": "aarch64-linux-gnu.elf2uf2-fc10a97.210629.tar.gz",
"checksum": "SHA-256:b74fd40954e4127ca752dd3eeac62d9a8611ba0597cf9e7fa29dd7f0247d9ff4",
"size": "79837"
},
{
"host": "arm-linux-gnueabihf",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/arm-linux-gnueabihf.elf2uf2-fc10a97.210607.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.elf2uf2-fc10a97.210607.tar.gz",
"checksum": "SHA-256:fb6d4270aaa017b5fa60937f82674e5e55cf12da392fd23cc5d1f6de279bcd04",
"size": "54220"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/arm-linux-gnueabihf.elf2uf2-fc10a97.210629.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.elf2uf2-fc10a97.210629.tar.gz",
"checksum": "SHA-256:1a012e9f6339e7ffabc918894208ad6830060e2ee2f312f0e2130ab992aa0279",
"size": "54219"
},
{
"host": "i686-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/i686-linux-gnu.elf2uf2-fc10a97.210607.tar.gz",
"archiveFileName": "i686-linux-gnu.elf2uf2-fc10a97.210607.tar.gz",
"checksum": "SHA-256:b55b823e59b7fa4d1ea130621c6144d84a96f3cb9571109f878472fecbcda7f8",
"size": "87882"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/i686-linux-gnu.elf2uf2-fc10a97.210629.tar.gz",
"archiveFileName": "i686-linux-gnu.elf2uf2-fc10a97.210629.tar.gz",
"checksum": "SHA-256:9cfce083d4932a0ea730cac64badd8ec80c2335f4cd4f930056e4162d215196a",
"size": "87880"
},
{
"host": "i686-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/i686-w64-mingw32.elf2uf2-fc10a97.210607.zip",
"archiveFileName": "i686-w64-mingw32.elf2uf2-fc10a97.210607.zip",
"checksum": "SHA-256:e66f3959fcdc2874dd4074d6e5205715235551062d5283da22906e369dc24bf0",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/i686-w64-mingw32.elf2uf2-fc10a97.210629.zip",
"archiveFileName": "i686-w64-mingw32.elf2uf2-fc10a97.210629.zip",
"checksum": "SHA-256:c7163edfdd6f14fa2dc96aad97cc29f84c495748ef7d57cfe921662c635d33d6",
"size": "70429"
},
{
"host": "x86_64-apple-darwin",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/x86_64-apple-darwin14.elf2uf2-fc10a97.210607.tar.gz",
"archiveFileName": "x86_64-apple-darwin14.elf2uf2-fc10a97.210607.tar.gz",
"checksum": "SHA-256:f85403c39741498547448f40fa6ae323519452af7ab0118c4cf7408340c20e07",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/x86_64-apple-darwin14.elf2uf2-fc10a97.210629.tar.gz",
"archiveFileName": "x86_64-apple-darwin14.elf2uf2-fc10a97.210629.tar.gz",
"checksum": "SHA-256:429803b74f3eff4be4dcb049d458fce1c1f147cf5365b2157b71323d59aae0f6",
"size": "81920"
},
{
"host": "x86_64-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/x86_64-linux-gnu.elf2uf2-fc10a97.210607.tar.gz",
"archiveFileName": "x86_64-linux-gnu.elf2uf2-fc10a97.210607.tar.gz",
"checksum": "SHA-256:5e9155cea5639b3716f5149e5a98fa864fe3abd9281f53f1dec65fdbe24d8f28",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/x86_64-linux-gnu.elf2uf2-fc10a97.210629.tar.gz",
"archiveFileName": "x86_64-linux-gnu.elf2uf2-fc10a97.210629.tar.gz",
"checksum": "SHA-256:15456283b3a55065546a2519fbca65aecdabc0d106dd3115318c4c77aba4637a",
"size": "79515"
},
{
"host": "x86_64-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/x86_64-w64-mingw32.elf2uf2-fc10a97.210607.zip",
"archiveFileName": "x86_64-w64-mingw32.elf2uf2-fc10a97.210607.zip",
"checksum": "SHA-256:e48b9e8d1c238f29e078056f6fedce715b773b042e52bf63df3759822fa66e64",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/x86_64-w64-mingw32.elf2uf2-fc10a97.210629.zip",
"archiveFileName": "x86_64-w64-mingw32.elf2uf2-fc10a97.210629.zip",
"checksum": "SHA-256:bfe82c2e32931ae79aebae938f3cc76eebd69a9898eecd326ab49771586ee31b",
"size": "78298"
}
]
},
{
"version": "1.2.0-a-407f016",
"version": "1.3.0-a-dcbbdf3",
"name": "pqt-pioasm",
"systems": [
{
"host": "aarch64-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/aarch64-linux-gnu.pioasm-fc10a97.210607.tar.gz",
"archiveFileName": "aarch64-linux-gnu.pioasm-fc10a97.210607.tar.gz",
"checksum": "SHA-256:6076ec3624c40cb59c456b501450621c57097bd83af4ebcbd03e3b46333fa745",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/aarch64-linux-gnu.pioasm-fc10a97.210629.tar.gz",
"archiveFileName": "aarch64-linux-gnu.pioasm-fc10a97.210629.tar.gz",
"checksum": "SHA-256:140a0b05a23c4cc22dc26e27e2b506ab6cd523ba62410d809f6bd7919dc8b63f",
"size": "453301"
},
{
"host": "arm-linux-gnueabihf",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/arm-linux-gnueabihf.pioasm-fc10a97.210607.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.pioasm-fc10a97.210607.tar.gz",
"checksum": "SHA-256:a6fe07241fb913e846c74855165e038b327705d75d2ca576dd714b42e17749c4",
"size": "360370"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/arm-linux-gnueabihf.pioasm-fc10a97.210629.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.pioasm-fc10a97.210629.tar.gz",
"checksum": "SHA-256:03baa86ea7224f68ed511ee898ddca9ba9c8f4c2871e3f335d96fd530e5368b0",
"size": "360371"
},
{
"host": "i686-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/i686-linux-gnu.pioasm-fc10a97.210607.tar.gz",
"archiveFileName": "i686-linux-gnu.pioasm-fc10a97.210607.tar.gz",
"checksum": "SHA-256:47808419d4a6019e527a0aec8c13b5a8bad7d838547fbb97abcddca866f3fc6b",
"size": "511410"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/i686-linux-gnu.pioasm-fc10a97.210629.tar.gz",
"archiveFileName": "i686-linux-gnu.pioasm-fc10a97.210629.tar.gz",
"checksum": "SHA-256:11103b95e201838e5029093628c4c91b10373d9eea46c1cee25d290ecfc02c9a",
"size": "511404"
},
{
"host": "i686-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/i686-w64-mingw32.pioasm-fc10a97.210607.zip",
"archiveFileName": "i686-w64-mingw32.pioasm-fc10a97.210607.zip",
"checksum": "SHA-256:c815d6845d374133c346e3ae3e40746217be3a6313190a9b4cdc43a4cd2e2bea",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/i686-w64-mingw32.pioasm-fc10a97.210629.zip",
"archiveFileName": "i686-w64-mingw32.pioasm-fc10a97.210629.zip",
"checksum": "SHA-256:17fad1fadcb75c894b772c905a63eea333851f9ea94efb453919a621fb3da35b",
"size": "385662"
},
{
"host": "x86_64-apple-darwin",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/x86_64-apple-darwin14.pioasm-fc10a97.210607.tar.gz",
"archiveFileName": "x86_64-apple-darwin14.pioasm-fc10a97.210607.tar.gz",
"checksum": "SHA-256:cd19c8ff52ebed430e039b18fd5bf5bfa33f60727a51ca1c81ad3bbcbb6ec763",
"size": "480403"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/x86_64-apple-darwin14.pioasm-fc10a97.210629.tar.gz",
"archiveFileName": "x86_64-apple-darwin14.pioasm-fc10a97.210629.tar.gz",
"checksum": "SHA-256:1be95af2db352f24cf38831d317e68a8f88a01edce36a8cced65dd76e4a2ddd2",
"size": "480402"
},
{
"host": "x86_64-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/x86_64-linux-gnu.pioasm-fc10a97.210607.tar.gz",
"archiveFileName": "x86_64-linux-gnu.pioasm-fc10a97.210607.tar.gz",
"checksum": "SHA-256:9b8d778a2b3dd5b6bc110dac86e4f9a8321e0bd43f8149bd2722b992b3684515",
"size": "458642"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/x86_64-linux-gnu.pioasm-fc10a97.210629.tar.gz",
"archiveFileName": "x86_64-linux-gnu.pioasm-fc10a97.210629.tar.gz",
"checksum": "SHA-256:326868dd7bf2d2656b8b158c07435a43f323ca745e219a3fe72390ff68ba4d35",
"size": "458627"
},
{
"host": "x86_64-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/x86_64-w64-mingw32.pioasm-fc10a97.210607.zip",
"archiveFileName": "x86_64-w64-mingw32.pioasm-fc10a97.210607.zip",
"checksum": "SHA-256:87b5f6cd9c760e5091d1d6e6383028a4255c07d054e6eab0583590dbdc05de69",
"size": "408341"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/x86_64-w64-mingw32.pioasm-fc10a97.210629.zip",
"archiveFileName": "x86_64-w64-mingw32.pioasm-fc10a97.210629.zip",
"checksum": "SHA-256:96f5cd1fec43876ebf4e756ac89692354abcfa8587bf1861b0050b7373171ab0",
"size": "408342"
}
]
},
{
"version": "1.2.0-a-407f016",
"version": "1.3.0-a-dcbbdf3",
"name": "pqt-mklittlefs",
"systems": [
{
"host": "aarch64-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/aarch64-linux-gnu.mklittlefs-6b5c62d.210607.tar.gz",
"archiveFileName": "aarch64-linux-gnu.mklittlefs-6b5c62d.210607.tar.gz",
"checksum": "SHA-256:6475b7cb24ba165fa97e5ae9e66e56901e3609b57b0edb359b75c810b8267d73",
"size": "44791"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/aarch64-linux-gnu.mklittlefs-6b5c62d.210629.tar.gz",
"archiveFileName": "aarch64-linux-gnu.mklittlefs-6b5c62d.210629.tar.gz",
"checksum": "SHA-256:c2de6ba23e4c2b010b82f1ae8acd7714566be20f9de41fd6beb54769631207bc",
"size": "44789"
},
{
"host": "arm-linux-gnueabihf",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/arm-linux-gnueabihf.mklittlefs-6b5c62d.210607.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.mklittlefs-6b5c62d.210607.tar.gz",
"checksum": "SHA-256:39bfd76f25b5da89244f708de856a5e9548db37eec7c5a88e4832dc5c3d0ee1f",
"size": "38247"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/arm-linux-gnueabihf.mklittlefs-6b5c62d.210629.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.mklittlefs-6b5c62d.210629.tar.gz",
"checksum": "SHA-256:3c95dc7daf344cc8dd247ac38178b4d40791023e76bc523c580355ccc36410e0",
"size": "38246"
},
{
"host": "i686-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/i686-linux-gnu.mklittlefs-6b5c62d.210607.tar.gz",
"archiveFileName": "i686-linux-gnu.mklittlefs-6b5c62d.210607.tar.gz",
"checksum": "SHA-256:9b6841d1c5070fb1f2b4a5b6c6850395740ac997aa3fbf888f8cd6e7628200e8",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/i686-linux-gnu.mklittlefs-6b5c62d.210629.tar.gz",
"archiveFileName": "i686-linux-gnu.mklittlefs-6b5c62d.210629.tar.gz",
"checksum": "SHA-256:409cb1d8c0cc0866eae1c421e707b74af1dc2e0147ec802be545c268d5b74f5f",
"size": "48240"
},
{
"host": "i686-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/i686-w64-mingw32.mklittlefs-6b5c62d.210607.zip",
"archiveFileName": "i686-w64-mingw32.mklittlefs-6b5c62d.210607.zip",
"checksum": "SHA-256:9b6d7ab130c1f07d63a045e987f69496bfc5e3bb4bf6edc9bf4cd04d363c2ac4",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/i686-w64-mingw32.mklittlefs-6b5c62d.210629.zip",
"archiveFileName": "i686-w64-mingw32.mklittlefs-6b5c62d.210629.zip",
"checksum": "SHA-256:ef5d5a3460ffe4da9e9365ec446994af9b6e98a998ee55e0347e0ee7ffddb477",
"size": "332804"
},
{
"host": "x86_64-apple-darwin",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/x86_64-apple-darwin14.mklittlefs-6b5c62d.210607.tar.gz",
"archiveFileName": "x86_64-apple-darwin14.mklittlefs-6b5c62d.210607.tar.gz",
"checksum": "SHA-256:538c30d2a072845873d2e3552ac725dcef022f9ac9a873925c218d5564615321",
"size": "362807"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/x86_64-apple-darwin14.mklittlefs-6b5c62d.210629.tar.gz",
"archiveFileName": "x86_64-apple-darwin14.mklittlefs-6b5c62d.210629.tar.gz",
"checksum": "SHA-256:935e7e4f6bbce45ef7b81fc65147bebd0eab721bab6586e5ec85191b5dc5554c",
"size": "362809"
},
{
"host": "x86_64-pc-linux-gnu",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/x86_64-linux-gnu.mklittlefs-6b5c62d.210607.tar.gz",
"archiveFileName": "x86_64-linux-gnu.mklittlefs-6b5c62d.210607.tar.gz",
"checksum": "SHA-256:f2b4d849a2146e54fec52abdfc4391894addfbf1e904094424fb5a2a22873e58",
"size": "46918"
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/x86_64-linux-gnu.mklittlefs-6b5c62d.210629.tar.gz",
"archiveFileName": "x86_64-linux-gnu.mklittlefs-6b5c62d.210629.tar.gz",
"checksum": "SHA-256:08dec87132551095db36d87fbb68b1c04f0c257ddf0af4604eef7fddee584a50",
"size": "46913"
},
{
"host": "x86_64-mingw32",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.2.0-a/x86_64-w64-mingw32.mklittlefs-6b5c62d.210607.zip",
"archiveFileName": "x86_64-w64-mingw32.mklittlefs-6b5c62d.210607.zip",
"checksum": "SHA-256:c1105383c2c694978aee521dc1d921fb2e2c3452015c5456f323ffad09595725",
"url": "https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.0-a/x86_64-w64-mingw32.mklittlefs-6b5c62d.210629.zip",
"archiveFileName": "x86_64-w64-mingw32.mklittlefs-6b5c62d.210629.zip",
"checksum": "SHA-256:f6868bfa19bc96d388ffacaf342017a7c56d5e1140bd16e876f21b6e013e304c",
"size": "345250"
}
]
@@ -423,4 +426,4 @@
]
}
]
}
}
+1 -1
View File
@@ -110,7 +110,7 @@ recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compil
recipe.hooks.linking.prelink.1.pattern="{runtime.tools.pqt-python3.path}/python3" "{runtime.platform.path}/tools/simplesub.py" --input "{runtime.platform.path}/lib/memmap_default.ld" --out "{build.path}/memmap_default.ld" --sub __FLASH_LENGTH__ {build.flash_length} --sub __EEPROM_START__ {build.eeprom_start} --sub __FS_START__ {build.fs_start} --sub __FS_END__ {build.fs_end}
## Compile the boot stage 2 blob
recipe.hooks.linking.prelink.2.pattern="{compiler.path}{compiler.S.cmd}" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} -c "{runtime.platform.path}/assembly/{build.boot2}.S" "-I{runtime.platform.path}/pico-sdk/src/rp2040/hardware_regs/include/" "-I{runtime.platform.path}/pico-sdk/src/common/pico_binary_info/include" -o "{build.path}/boot2.o"
recipe.hooks.linking.prelink.2.pattern="{compiler.path}{compiler.S.cmd}" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} -c "{runtime.platform.path}/boot2/{build.boot2}.S" "-I{runtime.platform.path}/pico-sdk/src/rp2040/hardware_regs/include/" "-I{runtime.platform.path}/pico-sdk/src/common/pico_binary_info/include" -o "{build.path}/boot2.o"
## Combine gc-sections, archives, and objects
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" "-L{build.path}" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} {compiler.ldflags} "-Wl,--script={build.path}/memmap_default.ld" "-Wl,-Map,{build.path}/{build.project_name}.map" -o "{build.path}/{build.project_name}.elf" -Wl,--start-group {object_files} "{build.path}/{archive_file}" "{build.path}/boot2.o" {compiler.libpico} -lm -lc -lstdc++ -lc -Wl,--end-group
+1
View File
@@ -26,6 +26,7 @@ function skip_ino()
/p08_DigitalHourglass/
/p13_TouchSensorLamp/
/StringComparisonOperators/
/PDMSerialPlotter/
EOL
echo $ino | grep -q -F "$skiplist"
echo $(( 1 - $? ))
+1 -6
View File
@@ -33,6 +33,7 @@ target_link_libraries(pico
hardware_clocks
hardware_divider
hardware_dma
hardware_exception
hardware_flash
hardware_gpio
hardware_i2c
@@ -73,12 +74,6 @@ target_link_libraries(pico
pico_audio_i2s
)
add_custom_command(TARGET pico PRE_BUILD
COMMAND arm-none-eabi-gcc -g -c ../../../assembly/crt0.S -I "${PICO_SDK_PATH}/src/rp2040/hardware_regs/include" -I "${PICO_SDK_PATH}/src/common/pico_binary_info/include/"
)
add_custom_command(TARGET pico POST_BUILD
COMMAND ar d libpico.a crt0.S.obj
COMMAND ar r libpico.a crt0.o
COMMAND ar d libpico.a stdio.c.obj stdio_usb.c.obj stdio_usb_descriptors.c.obj
)
+1 -1
View File
@@ -42,4 +42,4 @@ for type in boot2_generic_03h boot2_is25lp080 boot2_w25q080 boot2_w25x10cl; do
-s 0xffffffff $type.$div.bin ${type}_${div}_padded_checksum.S
done
done
mv *.S ../../../../assembly/.
mv *.S ../../../../boot2/.
+6 -30
View File
@@ -34,41 +34,17 @@
// COMMON CONFIGURATION
//--------------------------------------------------------------------
// defined by board.mk
#ifndef CFG_TUSB_MCU
#error CFG_TUSB_MCU must be defined
#define CFG_TUSB_MCU OPT_MCU_RP2040
#endif
// RHPort number used for device can be defined by board.mk, default to port 0
#ifndef BOARD_DEVICE_RHPORT_NUM
#define BOARD_DEVICE_RHPORT_NUM 0
#endif
// RHPort max operational speed can defined by board.mk
// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed
#ifndef BOARD_DEVICE_RHPORT_SPEED
#if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \
CFG_TUSB_MCU == OPT_MCU_NUC505 || CFG_TUSB_MCU == OPT_MCU_CXD56)
#define BOARD_DEVICE_RHPORT_SPEED OPT_MODE_HIGH_SPEED
#else
#define BOARD_DEVICE_RHPORT_SPEED OPT_MODE_FULL_SPEED
#endif
#endif
// Device mode with rhport and speed defined by board.mk
#if BOARD_DEVICE_RHPORT_NUM == 0
#define CFG_TUSB_RHPORT0_MODE (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED)
#elif BOARD_DEVICE_RHPORT_NUM == 1
#define CFG_TUSB_RHPORT1_MODE (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED)
#else
#error "Incorrect RHPort configuration"
#endif
// This example doesn't use an RTOS
//#define CFG_TUSB_OS OPT_OS_NONE
#define CFG_TUSB_RHPORT0_MODE OPT_MODE_DEVICE
#define CFG_TUSB_OS OPT_OS_PICO
// CFG_TUSB_DEBUG is defined by compiler in DEBUG build
// #define CFG_TUSB_DEBUG 0
#ifndef CFG_TUSB_DEBUG
#define CFG_TUSB_DEBUG 0
#endif
/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment.
* Tinyusb use follows macros to declare transferring memory so that they can be put
+3 -2
View File
@@ -46,9 +46,9 @@ def BuildBoot(name):
def BuildUSBStack(name):
print("%s.menu.usbstack.picosdk=Pico SDK" % (name))
print("%s.menu.usbstack.picosdk.build.usbstack_flags=" % (name))
print('%s.menu.usbstack.picosdk.build.usbstack_flags="-I{runtime.platform.path}/tools/libpico"' % (name))
print("%s.menu.usbstack.tinyusb=Adafruit TinyUSB" % (name))
print('%s.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"' % (name))
print('%s.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"' % (name))
def BuildHeader(name, vendor_name, product_name, pidtouse, vid, pid, boarddefine, variant, uploadtool, flashsize, boot2):
prettyname = vendor_name + " " + product_name
@@ -126,6 +126,7 @@ MakeBoard("adafruit_qtpy", "Adafruit", "QT Py RP2040", "0x239a", "0x80f7", "ADAF
MakeBoard("adafruit_stemmafriend", "Adafruit", "STEMMA Friend RP2040", "0x239a", "0x80e3", "ADAFRUIT_STEMMAFRIEND_RP2040", 8, "boot2_w25q080_2_padded_checksum")
MakeBoard("adafruit_trinkeyrp2040qt", "Adafruit", "Trinkey RP2040 QT", "0x239a", "0x8109", "ADAFRUIT_TRINKEYQT_RP2040", 8, "boot2_w25q080_2_padded_checksum")
MakeBoard("adafruit_macropad2040", "Adafruit", "MacroPad RP2040", "0x239a", "0x8107", "ADAFRUIT_MACROPAD_RP2040", 8, "boot2_w25q080_2_padded_checksum")
MakeBoard("arduino_nano_connect", "Arduino", "Nano RP2040 Connect", "0x2341", "0x0058", "ARDUINO_NANO_RP2040_CONNECT", 16, "boot2_w25q080_2_padded_checksum")
MakeBoard("sparkfun_promicrorp2040", "SparkFun", "ProMicro RP2040", "0x1b4f", "0x0026", "SPARKFUN_PROMICRO_RP2040", 16, "boot2_generic_03h_4_padded_checksum")
MakeBoard("generic", "Generic", "RP2040", "0x2e8a", "0xf00a", "GENERIC_RP2040", 16, "boot2_generic_03h_4_padded_checksum")
@@ -0,0 +1,53 @@
/* Taken from https://github.com/arduino/ArduinoCore-mbed/tree/master/variants/NANO_RP2040_CONNECT */
AnalogPinDescription g_AAnalogPinDescription[] = {
{ p26, NULL }, // A0
{ p27, NULL }, // A1
{ p28, NULL }, // A2
{ p29, NULL }, // A3
};
PinDescription g_APinDescription[] = {
// D0 - D7
{ p1, NULL, NULL, NULL }, // D0
{ p0, NULL, NULL, NULL }, // D1
{ p25, NULL, NULL, NULL }, // D2
{ p15, NULL, NULL, NULL }, // D3
{ p16, NULL, NULL, NULL }, // D4
{ p17, NULL, NULL, NULL }, // D5
{ p18, NULL, NULL, NULL }, // D6
{ p19, NULL, NULL, NULL }, // D7
// D8 - D13
{ p20, NULL, NULL, NULL }, // D8
{ p21, NULL, NULL, NULL }, // D9
{ p5, NULL, NULL, NULL }, // D10
{ p7, NULL, NULL, NULL }, // D11 / SPITX
{ p4, NULL, NULL, NULL }, // D12 / SPIRX
{ p6, NULL, NULL, NULL }, // D13 / SPICLK / LEDB
// Analog as digital
// A4 to A7 are controlled by Nina module and exposed via different APIs
{ p26, NULL, NULL, NULL }, // A0 -> D14
{ p27, NULL, NULL, NULL }, // A1 -> D15
{ p28, NULL, NULL, NULL }, // A2 -> D16
{ p29, NULL, NULL, NULL }, // A3 -> D17
// I2C
{ p12, NULL, NULL, NULL }, // A4 / SDA -> D18
{ p13, NULL, NULL, NULL }, // A5 / SCL -> D19
// Internal pins - D20 - D23
{ p2, NULL, NULL, NULL }, // GPIO0
{ p24, NULL, NULL, NULL }, // IMU IRQ
{ p22, NULL, NULL, NULL }, // PDM DATA IN
{ p23, NULL, NULL, NULL }, // PDM CLOCK
// Internal pins Nina - D24 - D29
{ p3, NULL, NULL, NULL }, // RESET_NINA
{ p8, NULL, NULL, NULL }, // SPI1_CIPO / UART1_TX
{ p9, NULL, NULL, NULL }, // SPI1_CS / UART1_RX
{ p10, NULL, NULL, NULL }, // SPI1_ACK / UART1_CTS
{ p11, NULL, NULL, NULL }, // SPI1_COPI / UART1_RTS
{ p14, NULL, NULL, NULL }, // SPI1_SCK
};
+48
View File
@@ -0,0 +1,48 @@
/* Taken from https://github.com/arduino/ArduinoCore-mbed/tree/master/variants/NANO_RP2040_CONNECT */
#ifndef _NINA_PINS_
#define _NINA_PINS_
/******************************************************************************
* INCLUDE
******************************************************************************/
#include "Arduino.h"
//#include "WiFiNINA.h"
/******************************************************************************
* PREPROCESSOR-MAGIC
******************************************************************************/
#if __has_include("WiFiNINA.h")
# define NINA_ATTRIBUTE
#else
# define NINA_ATTRIBUTE __attribute__ ((error("Please include WiFiNINA.h to use this pin")))
#endif
/******************************************************************************
* TYPEDEF
******************************************************************************/
enum NinaPin {
LEDR = 27,
LEDG = 25,
LEDB = 26//,
//A4 = 34,
//A5 = 39,
//A6 = 36,
//A7 = 35
};
/******************************************************************************
* FUNCTION DECLARATION
******************************************************************************/
void NINA_ATTRIBUTE pinMode (NinaPin pin, PinMode mode);
PinStatus NINA_ATTRIBUTE digitalRead (NinaPin pin);
void NINA_ATTRIBUTE digitalWrite(NinaPin pin, PinStatus value);
int NINA_ATTRIBUTE analogRead (NinaPin pin);
void NINA_ATTRIBUTE analogWrite (NinaPin pin, int value);
#undef NINA_ATTRIBUTE
#endif /* _NINA_PINS_ */
@@ -0,0 +1,120 @@
/* Taken from https://github.com/arduino/ArduinoCore-mbed/tree/master/variants/NANO_RP2040_CONNECT */
#pragma once
// Pin definitions taken from:
// https://datasheets.raspberrypi.org/pico/pico-datasheet.pdf
static const uint8_t D0 = (1u);
static const uint8_t D1 = (0u);
static const uint8_t D2 = (25u);
static const uint8_t D3 = (15u);
static const uint8_t D4 = (16u);
static const uint8_t D5 = (17u);
static const uint8_t D6 = (18u);
static const uint8_t D7 = (19u);
static const uint8_t D8 = (20u);
static const uint8_t D9 = (21u);
static const uint8_t D10 = (5u);
static const uint8_t D11 = (7u);
static const uint8_t D12 = (4u);
static const uint8_t D13 = (6u);
static const uint8_t D14 = (26u);
static const uint8_t D15 = (27u);
static const uint8_t D16 = (28u);
static const uint8_t D17 = (29u);
static const uint8_t D18 = (12u);
static const uint8_t D19 = (13u);
static const uint8_t D20 = (2u);
static const uint8_t D21 = (24u);
static const uint8_t D22 = (22u);
static const uint8_t D23 = (23u);
static const uint8_t D24 = (3u);
static const uint8_t D25 = (8u);
static const uint8_t D26 = (9u);
static const uint8_t D27 = (10u);
static const uint8_t D28 = (11u);
static const uint8_t D29 = (14u);
static const uint8_t A0 = (26u);
static const uint8_t A1 = (27u);
static const uint8_t A2 = (28u);
static const uint8_t A3 = (29u);
static const uint8_t A4 = (12u);
static const uint8_t A5 = (13u);
// LEDs
#define PIN_LED (D13)
// Serial
#define PIN_SERIAL1_TX (D1)
#define PIN_SERIAL1_RX (D0)
#define PIN_SERIAL2_TX (D25)
#define PIN_SERIAL2_RX (D26)
// SPI
#define PIN_SPI0_MISO (D12)
#define PIN_SPI0_MOSI (D11)
#define PIN_SPI0_SCK (D13)
#define PIN_SPI0_SS (13u)//(D10)
#define PIN_SPI1_MISO (D25)
#define PIN_SPI1_MOSI (D28)
#define PIN_SPI1_SCK (D29)
#define PIN_SPI1_SS (13u)
// Wire
#define PIN_WIRE0_SDA (D18)
#define PIN_WIRE0_SCL (D19)
#define PIN_WIRE1_SDA (26u) //Non c'è
#define PIN_WIRE1_SCL (27u) //Non c'è
#define SERIAL_HOWMANY (3u)
#define SPI_HOWMANY (2u)
#define WIRE_HOWMANY (1u)
#define PINS_COUNT (30u)
#define NUM_DIGITAL_PINS (30u)
#define NUM_ANALOG_INPUTS (4u)
#define NUM_ANALOG_OUTPUTS (0u)
#define ADC_RESOLUTION (12u)
#define LED_BUILTIN PIN_LED
#define DigitalPinToPinName(p) (p)
static const uint8_t SS = PIN_SPI0_SS;
static const uint8_t MOSI = PIN_SPI0_MOSI;
static const uint8_t MISO = PIN_SPI0_MISO;
static const uint8_t SCK = PIN_SPI0_SCK;
//Nina support
#define NINA_RESETN (D24)
#define SerialNina Serial3
#define SerialHCI Serial2
//#define NINA_GPIOIRQ (21u) // LEDG pin (GPIO26 on NINA)
#define NINA_GPIO0 (20u) // real GPIO0 on NINA
#define SPIWIFI_SS (D26)
#define SPIWIFI_ACK (D27)
#define SPIWIFI_RESET (NINA_RESETN)
#define SPIWIFI (SPI1)
// PDM Interfaces
// ---------------
#define PIN_PDM_CLK (D23)
#define PIN_PDM_DIN (D22)
//Cose copiate a caso
#define SERIAL_PORT_USBVIRTUAL SerialUSB
#define SERIAL_PORT_MONITOR SerialUSB
#define SERIAL_PORT_HARDWARE Serial1
#define SERIAL_PORT_HARDWARE_OPEN Serial2
#define CRYPTO_WIRE Wire
#define USB_MAX_POWER (500)
#include "nina_pins.h"