Compare commits
@@ -1,8 +1,10 @@
|
||||
# Arduino-Pico [](https://gitter.im/arduino-pico/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
# Arduino-Pico
|
||||
[](https://github.com/earlephilhower/arduino-pico/releases)
|
||||
[](https://gitter.im/arduino-pico/community)
|
||||
|
||||
Raspberry Pi Pico Arduino core, for all RP2040 boards
|
||||
|
||||
This is a port of the RP2040 (Raspberry Pi Pico processor) to the Arduino ecosystem. It uses the bare Raspberry Pi Pico SDK and a custom GCC 10.2/Newlib 4.0 toolchain.
|
||||
This is a port of the RP2040 (Raspberry Pi Pico processor) to the Arduino ecosystem. It uses the bare Raspberry Pi Pico SDK and a custom GCC 10.3/Newlib 4.0 toolchain.
|
||||
|
||||
# Documentation
|
||||
See https://arduino-pico.readthedocs.io/en/latest/ along with the examples for more detailed usage information.
|
||||
@@ -11,9 +13,12 @@ See https://arduino-pico.readthedocs.io/en/latest/ along with the examples for m
|
||||
* Raspberry Pi Pico
|
||||
* Adafruit Feather RP2040
|
||||
* Adafruit ItsyBitsy RP2040
|
||||
* Adafruit Macropad RP2040
|
||||
* 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)
|
||||
|
||||
# Installing via Arduino Boards Manager
|
||||
|
||||
-315
@@ -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
|
||||
+776
@@ -1978,6 +1978,782 @@ adafruit_macropad2040picoprobe.menu.usbstack.picosdk.build.usbstack_flags=
|
||||
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"
|
||||
|
||||
# -----------------------------------
|
||||
# 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=
|
||||
arduino_nano_connect.menu.usbstack.tinyusb=Adafruit TinyUSB
|
||||
arduino_nano_connect.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/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=
|
||||
arduino_nano_connectpicoprobe.menu.usbstack.tinyusb=Adafruit TinyUSB
|
||||
arduino_nano_connectpicoprobe.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{build.core.path}/TinyUSB" "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
|
||||
|
||||
# -----------------------------------
|
||||
# SparkFun ProMicro RP2040
|
||||
# -----------------------------------
|
||||
sparkfun_promicrorp2040.name=SparkFun ProMicro RP2040
|
||||
sparkfun_promicrorp2040.vid.0=0x1b4f
|
||||
sparkfun_promicrorp2040.pid.0=0x0026
|
||||
sparkfun_promicrorp2040.build.usbpid=-DSERIALUSB_PID=0x0026
|
||||
sparkfun_promicrorp2040.build.board=SPARKFUN_PROMICRO_RP2040
|
||||
sparkfun_promicrorp2040.build.mcu=cortex-m0plus
|
||||
sparkfun_promicrorp2040.build.variant=sparkfun_promicrorp2040
|
||||
sparkfun_promicrorp2040.upload.tool=uf2conv
|
||||
sparkfun_promicrorp2040.upload.maximum_size=16777216
|
||||
sparkfun_promicrorp2040.upload.maximum_data_size=262144
|
||||
sparkfun_promicrorp2040.upload.wait_for_upload_port=true
|
||||
sparkfun_promicrorp2040.upload.erase_cmd=
|
||||
sparkfun_promicrorp2040.serial.disableDTR=false
|
||||
sparkfun_promicrorp2040.serial.disableRTS=false
|
||||
sparkfun_promicrorp2040.build.f_cpu=125000000
|
||||
sparkfun_promicrorp2040.build.led=
|
||||
sparkfun_promicrorp2040.build.core=rp2040
|
||||
sparkfun_promicrorp2040.build.mcu=rp2040
|
||||
sparkfun_promicrorp2040.build.ldscript=memmap_default.ld
|
||||
sparkfun_promicrorp2040.build.boot2=boot2_generic_03h_4_padded_checksum
|
||||
sparkfun_promicrorp2040.build.vid=0x1b4f
|
||||
sparkfun_promicrorp2040.build.pid=0x0026
|
||||
sparkfun_promicrorp2040.build.usb_manufacturer="SparkFun"
|
||||
sparkfun_promicrorp2040.build.usb_product="ProMicro RP2040"
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_0=16MB (no FS)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_0.upload.maximum_size=16773120
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_0.build.flash_length=16773120
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_0.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_0.build.fs_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_0.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_65536=16MB (Sketch: 16320KB, FS: 64KB)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_65536.upload.maximum_size=16707584
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_65536.build.flash_length=16707584
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_65536.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_65536.build.fs_start=285143040
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_65536.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_131072=16MB (Sketch: 16256KB, FS: 128KB)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_131072.upload.maximum_size=16642048
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_131072.build.flash_length=16642048
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_131072.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_131072.build.fs_start=285077504
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_131072.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_262144=16MB (Sketch: 16128KB, FS: 256KB)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_262144.upload.maximum_size=16510976
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_262144.build.flash_length=16510976
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_262144.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_262144.build.fs_start=284946432
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_262144.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_524288=16MB (Sketch: 15872KB, FS: 512KB)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_524288.upload.maximum_size=16248832
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_524288.build.flash_length=16248832
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_524288.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_524288.build.fs_start=284684288
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_524288.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_1048576=16MB (Sketch: 15MB, FS: 1MB)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_1048576.upload.maximum_size=15724544
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_1048576.build.flash_length=15724544
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_1048576.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_1048576.build.fs_start=284160000
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_1048576.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_2097152=16MB (Sketch: 14MB, FS: 2MB)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_2097152.upload.maximum_size=14675968
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_2097152.build.flash_length=14675968
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_2097152.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_2097152.build.fs_start=283111424
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_2097152.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_3145728=16MB (Sketch: 13MB, FS: 3MB)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_3145728.upload.maximum_size=13627392
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_3145728.build.flash_length=13627392
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_3145728.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_3145728.build.fs_start=282062848
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_3145728.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_4194304=16MB (Sketch: 12MB, FS: 4MB)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_4194304.upload.maximum_size=12578816
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_4194304.build.flash_length=12578816
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_4194304.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_4194304.build.fs_start=281014272
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_4194304.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_5242880=16MB (Sketch: 11MB, FS: 5MB)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_5242880.upload.maximum_size=11530240
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_5242880.build.flash_length=11530240
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_5242880.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_5242880.build.fs_start=279965696
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_5242880.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_6291456=16MB (Sketch: 10MB, FS: 6MB)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_6291456.upload.maximum_size=10481664
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_6291456.build.flash_length=10481664
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_6291456.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_6291456.build.fs_start=278917120
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_6291456.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_7340032=16MB (Sketch: 9MB, FS: 7MB)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_7340032.upload.maximum_size=9433088
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_7340032.build.flash_length=9433088
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_7340032.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_7340032.build.fs_start=277868544
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_7340032.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_8388608=16MB (Sketch: 8MB, FS: 8MB)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_8388608.upload.maximum_size=8384512
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_8388608.build.flash_length=8384512
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_8388608.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_8388608.build.fs_start=276819968
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_8388608.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_9437184=16MB (Sketch: 7MB, FS: 9MB)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_9437184.upload.maximum_size=7335936
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_9437184.build.flash_length=7335936
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_9437184.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_9437184.build.fs_start=275771392
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_9437184.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_10485760=16MB (Sketch: 6MB, FS: 10MB)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_10485760.upload.maximum_size=6287360
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_10485760.build.flash_length=6287360
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_10485760.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_10485760.build.fs_start=274722816
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_10485760.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_11534336=16MB (Sketch: 5MB, FS: 11MB)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_11534336.upload.maximum_size=5238784
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_11534336.build.flash_length=5238784
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_11534336.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_11534336.build.fs_start=273674240
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_11534336.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_12582912=16MB (Sketch: 4MB, FS: 12MB)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_12582912.upload.maximum_size=4190208
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_12582912.build.flash_length=4190208
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_12582912.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_12582912.build.fs_start=272625664
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_12582912.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_13631488=16MB (Sketch: 3MB, FS: 13MB)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_13631488.upload.maximum_size=3141632
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_13631488.build.flash_length=3141632
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_13631488.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_13631488.build.fs_start=271577088
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_13631488.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_14680064=16MB (Sketch: 2MB, FS: 14MB)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_14680064.upload.maximum_size=2093056
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_14680064.build.flash_length=2093056
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_14680064.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_14680064.build.fs_start=270528512
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_14680064.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_15728640=16MB (Sketch: 1MB, FS: 15MB)
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_15728640.upload.maximum_size=1044480
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_15728640.build.flash_length=1044480
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_15728640.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_15728640.build.fs_start=269479936
|
||||
sparkfun_promicrorp2040.menu.flash.16777216_15728640.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040.menu.freq.125=125 MHz
|
||||
sparkfun_promicrorp2040.menu.freq.125.build.f_cpu=125000000L
|
||||
sparkfun_promicrorp2040.menu.freq.50=50 MHz
|
||||
sparkfun_promicrorp2040.menu.freq.50.build.f_cpu=50000000L
|
||||
sparkfun_promicrorp2040.menu.freq.100=100 MHz
|
||||
sparkfun_promicrorp2040.menu.freq.100.build.f_cpu=100000000L
|
||||
sparkfun_promicrorp2040.menu.freq.133=133 MHz
|
||||
sparkfun_promicrorp2040.menu.freq.133.build.f_cpu=133000000L
|
||||
sparkfun_promicrorp2040.menu.freq.150=150 MHz (Overclock)
|
||||
sparkfun_promicrorp2040.menu.freq.150.build.f_cpu=150000000L
|
||||
sparkfun_promicrorp2040.menu.freq.175=175 MHz (Overclock)
|
||||
sparkfun_promicrorp2040.menu.freq.175.build.f_cpu=175000000L
|
||||
sparkfun_promicrorp2040.menu.freq.200=200 MHz (Overclock)
|
||||
sparkfun_promicrorp2040.menu.freq.200.build.f_cpu=200000000L
|
||||
sparkfun_promicrorp2040.menu.freq.225=225 MHz (Overclock)
|
||||
sparkfun_promicrorp2040.menu.freq.225.build.f_cpu=225000000L
|
||||
sparkfun_promicrorp2040.menu.freq.250=250 MHz (Overclock)
|
||||
sparkfun_promicrorp2040.menu.freq.250.build.f_cpu=250000000L
|
||||
sparkfun_promicrorp2040.menu.freq.275=275 MHz (Overclock)
|
||||
sparkfun_promicrorp2040.menu.freq.275.build.f_cpu=275000000L
|
||||
sparkfun_promicrorp2040.menu.freq.300=300 MHz (Overclock)
|
||||
sparkfun_promicrorp2040.menu.freq.300.build.f_cpu=300000000L
|
||||
sparkfun_promicrorp2040.menu.dbgport.Disabled=Disabled
|
||||
sparkfun_promicrorp2040.menu.dbgport.Disabled.build.debug_port=
|
||||
sparkfun_promicrorp2040.menu.dbgport.Serial=Serial
|
||||
sparkfun_promicrorp2040.menu.dbgport.Serial.build.debug_port=-DDEBUG_RP2040_PORT=Serial
|
||||
sparkfun_promicrorp2040.menu.dbgport.Serial1=Serial1
|
||||
sparkfun_promicrorp2040.menu.dbgport.Serial1.build.debug_port=-DDEBUG_RP2040_PORT=Serial1
|
||||
sparkfun_promicrorp2040.menu.dbgport.Serial2=Serial2
|
||||
sparkfun_promicrorp2040.menu.dbgport.Serial2.build.debug_port=-DDEBUG_RP2040_PORT=Serial2
|
||||
sparkfun_promicrorp2040.menu.dbglvl.None=None
|
||||
sparkfun_promicrorp2040.menu.dbglvl.None.build.debug_level=
|
||||
sparkfun_promicrorp2040.menu.dbglvl.Core=Core
|
||||
sparkfun_promicrorp2040.menu.dbglvl.Core.build.debug_level=-DDEBUG_RP2040_CORE
|
||||
sparkfun_promicrorp2040.menu.dbglvl.SPI=SPI
|
||||
sparkfun_promicrorp2040.menu.dbglvl.SPI.build.debug_level=-DDEBUG_RP2040_SPI
|
||||
sparkfun_promicrorp2040.menu.dbglvl.Wire=Wire
|
||||
sparkfun_promicrorp2040.menu.dbglvl.Wire.build.debug_level=-DDEBUG_RP2040_WIRE
|
||||
sparkfun_promicrorp2040.menu.dbglvl.All=All
|
||||
sparkfun_promicrorp2040.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG_RP2040_SPI -DDEBUG_RP2040_CORE
|
||||
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.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 ProMicro RP2040 (Picoprobe)
|
||||
# -----------------------------------
|
||||
sparkfun_promicrorp2040picoprobe.name=SparkFun ProMicro RP2040 (Picoprobe)
|
||||
sparkfun_promicrorp2040picoprobe.vid.0=0x1b4f
|
||||
sparkfun_promicrorp2040picoprobe.pid.0=0x0004
|
||||
sparkfun_promicrorp2040picoprobe.build.usbpid=-DSERIALUSB_PID=0x0026
|
||||
sparkfun_promicrorp2040picoprobe.build.board=SPARKFUN_PROMICRO_RP2040
|
||||
sparkfun_promicrorp2040picoprobe.build.mcu=cortex-m0plus
|
||||
sparkfun_promicrorp2040picoprobe.build.variant=sparkfun_promicrorp2040
|
||||
sparkfun_promicrorp2040picoprobe.upload.tool=picoprobe
|
||||
sparkfun_promicrorp2040picoprobe.upload.maximum_size=16777216
|
||||
sparkfun_promicrorp2040picoprobe.upload.maximum_data_size=262144
|
||||
sparkfun_promicrorp2040picoprobe.upload.wait_for_upload_port=true
|
||||
sparkfun_promicrorp2040picoprobe.upload.erase_cmd=
|
||||
sparkfun_promicrorp2040picoprobe.serial.disableDTR=false
|
||||
sparkfun_promicrorp2040picoprobe.serial.disableRTS=false
|
||||
sparkfun_promicrorp2040picoprobe.build.f_cpu=125000000
|
||||
sparkfun_promicrorp2040picoprobe.build.led=
|
||||
sparkfun_promicrorp2040picoprobe.build.core=rp2040
|
||||
sparkfun_promicrorp2040picoprobe.build.mcu=rp2040
|
||||
sparkfun_promicrorp2040picoprobe.build.ldscript=memmap_default.ld
|
||||
sparkfun_promicrorp2040picoprobe.build.boot2=boot2_generic_03h_4_padded_checksum
|
||||
sparkfun_promicrorp2040picoprobe.build.vid=0x1b4f
|
||||
sparkfun_promicrorp2040picoprobe.build.pid=0x0026
|
||||
sparkfun_promicrorp2040picoprobe.build.usb_manufacturer="SparkFun"
|
||||
sparkfun_promicrorp2040picoprobe.build.usb_product="ProMicro RP2040 (Picoprobe)"
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_0=16MB (no FS)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_0.upload.maximum_size=16773120
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_0.build.flash_length=16773120
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_0.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_0.build.fs_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_0.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_65536=16MB (Sketch: 16320KB, FS: 64KB)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_65536.upload.maximum_size=16707584
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_65536.build.flash_length=16707584
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_65536.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_65536.build.fs_start=285143040
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_65536.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_131072=16MB (Sketch: 16256KB, FS: 128KB)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_131072.upload.maximum_size=16642048
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_131072.build.flash_length=16642048
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_131072.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_131072.build.fs_start=285077504
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_131072.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_262144=16MB (Sketch: 16128KB, FS: 256KB)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_262144.upload.maximum_size=16510976
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_262144.build.flash_length=16510976
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_262144.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_262144.build.fs_start=284946432
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_262144.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_524288=16MB (Sketch: 15872KB, FS: 512KB)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_524288.upload.maximum_size=16248832
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_524288.build.flash_length=16248832
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_524288.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_524288.build.fs_start=284684288
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_524288.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_1048576=16MB (Sketch: 15MB, FS: 1MB)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_1048576.upload.maximum_size=15724544
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_1048576.build.flash_length=15724544
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_1048576.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_1048576.build.fs_start=284160000
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_1048576.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_2097152=16MB (Sketch: 14MB, FS: 2MB)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_2097152.upload.maximum_size=14675968
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_2097152.build.flash_length=14675968
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_2097152.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_2097152.build.fs_start=283111424
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_2097152.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_3145728=16MB (Sketch: 13MB, FS: 3MB)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_3145728.upload.maximum_size=13627392
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_3145728.build.flash_length=13627392
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_3145728.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_3145728.build.fs_start=282062848
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_3145728.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_4194304=16MB (Sketch: 12MB, FS: 4MB)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_4194304.upload.maximum_size=12578816
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_4194304.build.flash_length=12578816
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_4194304.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_4194304.build.fs_start=281014272
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_4194304.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_5242880=16MB (Sketch: 11MB, FS: 5MB)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_5242880.upload.maximum_size=11530240
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_5242880.build.flash_length=11530240
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_5242880.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_5242880.build.fs_start=279965696
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_5242880.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_6291456=16MB (Sketch: 10MB, FS: 6MB)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_6291456.upload.maximum_size=10481664
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_6291456.build.flash_length=10481664
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_6291456.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_6291456.build.fs_start=278917120
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_6291456.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_7340032=16MB (Sketch: 9MB, FS: 7MB)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_7340032.upload.maximum_size=9433088
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_7340032.build.flash_length=9433088
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_7340032.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_7340032.build.fs_start=277868544
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_7340032.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_8388608=16MB (Sketch: 8MB, FS: 8MB)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_8388608.upload.maximum_size=8384512
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_8388608.build.flash_length=8384512
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_8388608.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_8388608.build.fs_start=276819968
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_8388608.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_9437184=16MB (Sketch: 7MB, FS: 9MB)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_9437184.upload.maximum_size=7335936
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_9437184.build.flash_length=7335936
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_9437184.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_9437184.build.fs_start=275771392
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_9437184.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_10485760=16MB (Sketch: 6MB, FS: 10MB)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_10485760.upload.maximum_size=6287360
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_10485760.build.flash_length=6287360
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_10485760.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_10485760.build.fs_start=274722816
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_10485760.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_11534336=16MB (Sketch: 5MB, FS: 11MB)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_11534336.upload.maximum_size=5238784
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_11534336.build.flash_length=5238784
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_11534336.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_11534336.build.fs_start=273674240
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_11534336.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_12582912=16MB (Sketch: 4MB, FS: 12MB)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_12582912.upload.maximum_size=4190208
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_12582912.build.flash_length=4190208
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_12582912.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_12582912.build.fs_start=272625664
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_12582912.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_13631488=16MB (Sketch: 3MB, FS: 13MB)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_13631488.upload.maximum_size=3141632
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_13631488.build.flash_length=3141632
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_13631488.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_13631488.build.fs_start=271577088
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_13631488.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_14680064=16MB (Sketch: 2MB, FS: 14MB)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_14680064.upload.maximum_size=2093056
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_14680064.build.flash_length=2093056
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_14680064.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_14680064.build.fs_start=270528512
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_14680064.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_15728640=16MB (Sketch: 1MB, FS: 15MB)
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_15728640.upload.maximum_size=1044480
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_15728640.build.flash_length=1044480
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_15728640.build.eeprom_start=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_15728640.build.fs_start=269479936
|
||||
sparkfun_promicrorp2040picoprobe.menu.flash.16777216_15728640.build.fs_end=285208576
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.125=125 MHz
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.125.build.f_cpu=125000000L
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.50=50 MHz
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.50.build.f_cpu=50000000L
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.100=100 MHz
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.100.build.f_cpu=100000000L
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.133=133 MHz
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.133.build.f_cpu=133000000L
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.150=150 MHz (Overclock)
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.150.build.f_cpu=150000000L
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.175=175 MHz (Overclock)
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.175.build.f_cpu=175000000L
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.200=200 MHz (Overclock)
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.200.build.f_cpu=200000000L
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.225=225 MHz (Overclock)
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.225.build.f_cpu=225000000L
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.250=250 MHz (Overclock)
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.250.build.f_cpu=250000000L
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.275=275 MHz (Overclock)
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.275.build.f_cpu=275000000L
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.300=300 MHz (Overclock)
|
||||
sparkfun_promicrorp2040picoprobe.menu.freq.300.build.f_cpu=300000000L
|
||||
sparkfun_promicrorp2040picoprobe.menu.dbgport.Disabled=Disabled
|
||||
sparkfun_promicrorp2040picoprobe.menu.dbgport.Disabled.build.debug_port=
|
||||
sparkfun_promicrorp2040picoprobe.menu.dbgport.Serial=Serial
|
||||
sparkfun_promicrorp2040picoprobe.menu.dbgport.Serial.build.debug_port=-DDEBUG_RP2040_PORT=Serial
|
||||
sparkfun_promicrorp2040picoprobe.menu.dbgport.Serial1=Serial1
|
||||
sparkfun_promicrorp2040picoprobe.menu.dbgport.Serial1.build.debug_port=-DDEBUG_RP2040_PORT=Serial1
|
||||
sparkfun_promicrorp2040picoprobe.menu.dbgport.Serial2=Serial2
|
||||
sparkfun_promicrorp2040picoprobe.menu.dbgport.Serial2.build.debug_port=-DDEBUG_RP2040_PORT=Serial2
|
||||
sparkfun_promicrorp2040picoprobe.menu.dbglvl.None=None
|
||||
sparkfun_promicrorp2040picoprobe.menu.dbglvl.None.build.debug_level=
|
||||
sparkfun_promicrorp2040picoprobe.menu.dbglvl.Core=Core
|
||||
sparkfun_promicrorp2040picoprobe.menu.dbglvl.Core.build.debug_level=-DDEBUG_RP2040_CORE
|
||||
sparkfun_promicrorp2040picoprobe.menu.dbglvl.SPI=SPI
|
||||
sparkfun_promicrorp2040picoprobe.menu.dbglvl.SPI.build.debug_level=-DDEBUG_RP2040_SPI
|
||||
sparkfun_promicrorp2040picoprobe.menu.dbglvl.Wire=Wire
|
||||
sparkfun_promicrorp2040picoprobe.menu.dbglvl.Wire.build.debug_level=-DDEBUG_RP2040_WIRE
|
||||
sparkfun_promicrorp2040picoprobe.menu.dbglvl.All=All
|
||||
sparkfun_promicrorp2040picoprobe.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG_RP2040_SPI -DDEBUG_RP2040_CORE
|
||||
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.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"
|
||||
|
||||
# -----------------------------------
|
||||
# Generic RP2040
|
||||
# -----------------------------------
|
||||
|
||||
+8
-33
@@ -24,16 +24,11 @@
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
// Wacky deprecated AVR compatibility functions
|
||||
#include "stdlib_noniso.h"
|
||||
|
||||
#include "stdlib_noniso.h" // Wacky deprecated AVR compatibility functions
|
||||
#include "api/ArduinoAPI.h"
|
||||
#include "api/itoa.h" // ARM toolchain doesn't provide itoa etc, provide them
|
||||
#include <pins_arduino.h>
|
||||
|
||||
|
||||
// Required for the port*Register macros
|
||||
#include "hardware/gpio.h"
|
||||
|
||||
#include "hardware/gpio.h" // Required for the port*Register macros
|
||||
#include "debug_internal.h"
|
||||
|
||||
// Try and make the best of the old Arduino abs() macro. When in C++, use
|
||||
@@ -44,8 +39,10 @@
|
||||
#endif // abs
|
||||
#ifdef __cplusplus
|
||||
using std::abs;
|
||||
using std::round;
|
||||
#else
|
||||
#define abs(x) ((x)>0?(x):-(x))
|
||||
#define abs(x) ({ __typeof__(x) _x = (x); _x >= 0 ? _x : -_x; })
|
||||
#define round(x) ({ __typeof__(x) _x = (x); _x >= 0 ? (long)(_x + 0.5) : (long)(_x - 0.5); })
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -61,10 +58,6 @@ extern "C" {
|
||||
void interrupts();
|
||||
void noInterrupts();
|
||||
|
||||
// GPIO change/value interrupts
|
||||
void attachInterrupt(pin_size_t pin, voidFuncPtr callback, PinStatus mode);
|
||||
void detachInterrupt(pin_size_t pin);
|
||||
|
||||
// AVR compatibility macros...naughty and accesses the HW directly
|
||||
#define digitalPinToPort(pin) (0)
|
||||
#define digitalPinToBitMask(pin) (1UL << (pin))
|
||||
@@ -75,28 +68,14 @@ void detachInterrupt(pin_size_t pin);
|
||||
#define portInputRegister(port) ((volatile uint32_t*) sio_hw->gpio_in)
|
||||
#define portModeRegister(port) ((volatile uint32_t*) sio_hw->gpio_oe)
|
||||
|
||||
// IO config
|
||||
void pinMode(pin_size_t pinNumber, PinMode pinMode);
|
||||
|
||||
// SIO (GPIO)
|
||||
void digitalWrite(pin_size_t pinNumber, PinStatus status);
|
||||
PinStatus digitalRead(pin_size_t pinNumber);
|
||||
|
||||
// ADC
|
||||
int analogRead(pin_size_t pinNumber);
|
||||
// ADC RP2040-specific calls
|
||||
float analogReadTemp(); // Returns core temp in Centigrade
|
||||
|
||||
// PWM
|
||||
void analogWrite(pin_size_t pinNumber, int value);
|
||||
// PWM RP2040-specific calls
|
||||
void analogWriteFreq(uint32_t freq);
|
||||
void analogWriteRange(uint32_t range);
|
||||
void analogWriteResolution(int res);
|
||||
|
||||
// Timing
|
||||
void delay(unsigned long);
|
||||
void delayMicroseconds(unsigned int us);
|
||||
unsigned long millis();
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
@@ -127,8 +106,4 @@ constexpr uint32_t __bitset(const int (&a)[N], size_t i = 0U) {
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
// ARM toolchain doesn't provide itoa etc, provide them
|
||||
#include "api/itoa.h"
|
||||
|
||||
#endif // Arduino_h
|
||||
|
||||
+43
-2
@@ -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
|
||||
|
||||
+10
-16
@@ -153,14 +153,15 @@ static uint8_t *GetDescHIDReport(int *len) {
|
||||
// Invoked when received GET HID REPORT DESCRIPTOR
|
||||
// Application return pointer to descriptor
|
||||
// Descriptor contents must exist long enough for transfer to complete
|
||||
uint8_t const * tud_hid_descriptor_report_cb(void) {
|
||||
uint8_t const * tud_hid_descriptor_report_cb(uint8_t instance) {
|
||||
(void) instance;
|
||||
return GetDescHIDReport(nullptr);
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
@@ -177,7 +178,7 @@ const uint8_t *tud_descriptor_configuration_cb(uint8_t index) {
|
||||
uint8_t hid_itf = __USBInstallSerial ? 2 : 0;
|
||||
static uint8_t hid_desc[TUD_HID_DESC_LEN] = {
|
||||
// Interface number, string index, protocol, report descriptor len, EP In & Out address, size & polling interval
|
||||
TUD_HID_DESCRIPTOR(hid_itf, 0, HID_PROTOCOL_NONE, hid_report_len, EPNUM_HID, CFG_TUD_HID_EP_BUFSIZE, 10)
|
||||
TUD_HID_DESCRIPTOR(hid_itf, 0, HID_ITF_PROTOCOL_NONE, hid_report_len, EPNUM_HID, CFG_TUD_HID_EP_BUFSIZE, 10)
|
||||
};
|
||||
|
||||
uint8_t midi_itf = hid_itf + (hasHID ? 1 : 0);
|
||||
@@ -230,15 +231,7 @@ const uint16_t *tud_descriptor_string_cb(uint8_t index, uint16_t langid) {
|
||||
};
|
||||
|
||||
if (!idString[0]) {
|
||||
// Get ID string into human readable serial number on the first pass
|
||||
pico_unique_board_id_t id;
|
||||
pico_get_unique_board_id(&id);
|
||||
idString[0] = 0;
|
||||
for (auto i = 0; i < PICO_UNIQUE_BOARD_ID_SIZE_BYTES; i++) {
|
||||
char hx[3];
|
||||
sprintf(hx, "%02X", id.id[i]);
|
||||
strcat(idString, hx);
|
||||
}
|
||||
pico_get_unique_board_id_string(idString, sizeof(idString));
|
||||
}
|
||||
|
||||
uint8_t len;
|
||||
@@ -296,8 +289,9 @@ void __USBStart() {
|
||||
// Invoked when received GET_REPORT control request
|
||||
// Application must fill buffer report's content and return its length.
|
||||
// Return zero will cause the stack to STALL request
|
||||
uint16_t tud_hid_get_report_cb(uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen) {
|
||||
// TODO not Implemented
|
||||
extern "C" uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen) {
|
||||
// TODO not implemented
|
||||
(void) instance;
|
||||
(void) report_id;
|
||||
(void) report_type;
|
||||
(void) buffer;
|
||||
@@ -308,8 +302,9 @@ uint16_t tud_hid_get_report_cb(uint8_t report_id, hid_report_type_t report_type,
|
||||
|
||||
// Invoked when received SET_REPORT control request or
|
||||
// received data on OUT endpoint ( Report ID = 0, Type = 0 )
|
||||
void tud_hid_set_report_cb(uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) {
|
||||
extern "C" void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) {
|
||||
// TODO set LED based on CAPLOCK, NUMLOCK etc...
|
||||
(void) instance;
|
||||
(void) report_id;
|
||||
(void) report_type;
|
||||
(void) buffer;
|
||||
@@ -317,4 +312,3 @@ void tud_hid_set_report_cb(uint8_t report_id, hid_report_type_t report_type, uin
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -70,7 +70,7 @@ int SerialUSB::peek() {
|
||||
}
|
||||
|
||||
uint8_t c;
|
||||
return tud_cdc_peek(0, &c) ? (int) c : -1;
|
||||
return tud_cdc_peek(&c) ? (int) c : -1;
|
||||
}
|
||||
|
||||
int SerialUSB::read() {
|
||||
|
||||
@@ -88,6 +88,7 @@ void tone(uint8_t pin, unsigned int frequency, unsigned long duration) {
|
||||
newTone->alarm = 0;
|
||||
}
|
||||
}
|
||||
pio_sm_clear_fifos(newTone->pio, newTone->sm); // Remove any old updates that haven't yet taken effect
|
||||
pio_sm_put_blocking(newTone->pio, newTone->sm, RP2040::usToPIOCycles(us));
|
||||
pio_sm_set_enabled(newTone->pio, newTone->sm, true);
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@ extern "C" void digitalWrite(pin_size_t ulPin, PinStatus ulVal) {
|
||||
DEBUGCORE("ERROR: Illegal pin in pinMode (%d)\n", ulPin);
|
||||
return;
|
||||
}
|
||||
gpio_set_function(ulPin, GPIO_FUNC_SIO);
|
||||
if (_pm[ulPin] == INPUT_PULLDOWN) {
|
||||
if (ulVal == LOW) {
|
||||
gpio_set_dir(ulPin, false);
|
||||
|
||||
@@ -38,3 +38,15 @@ using the SDK, the Arduino core may have issues running properly with
|
||||
them. In particular, anything involving flash writes (i.e. EEPROM,
|
||||
filesystems) will probably crash due to CORE1 attempting to read from
|
||||
flash while CORE0 is writing to it.
|
||||
|
||||
PIOASM (Compiling for the PIO processors)
|
||||
-----------------------------------------
|
||||
A precompiled version of the PIOASM tool is included in the download
|
||||
package and can be run from the CLI.
|
||||
|
||||
There is also a fully online version of PIOASM that runs in a web
|
||||
browser without any CLI required, thanks to @jake653: https://wokwi.com/tools/pioasm
|
||||
(GitHub source: https://github.com/wokwi/pioasm-wasm)
|
||||
|
||||
There is also Docker code available for the tool at:
|
||||
https://github.com/kahara/pioasm-docker
|
||||
|
||||
+21
-6
@@ -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
|
||||
|
||||
Binary file not shown.
@@ -12,8 +12,8 @@
|
||||
#define _PICO_VERSION_H
|
||||
|
||||
#define PICO_SDK_VERSION_MAJOR 1
|
||||
#define PICO_SDK_VERSION_MINOR 1
|
||||
#define PICO_SDK_VERSION_REVISION 2
|
||||
#define PICO_SDK_VERSION_STRING "1.1.2"
|
||||
#define PICO_SDK_VERSION_MINOR 2
|
||||
#define PICO_SDK_VERSION_REVISION 0
|
||||
#define PICO_SDK_VERSION_STRING "1.2.0"
|
||||
|
||||
#endif
|
||||
|
||||
@@ -25,6 +25,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
|
||||
@@ -53,5 +54,5 @@
|
||||
-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
|
||||
-iwithprefixbefore/tools/libpico
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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)
|
||||
#######################################
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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>© 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;
|
||||
}
|
||||
@@ -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>© 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****/
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
%}
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -135,6 +135,7 @@ void Servo::writeMicroseconds(int value) {
|
||||
value = constrain(value, _minUs, _maxUs);
|
||||
_valueUs = value;
|
||||
if (_attached) {
|
||||
pio_sm_clear_fifos(_pio, _smIdx); // Remove any old updates that haven't yet taken effect
|
||||
pio_sm_put_blocking(_pio, _smIdx, RP2040::usToPIOCycles(value) / 3);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -7,7 +7,8 @@ void setup() {
|
||||
}
|
||||
|
||||
void loop() {
|
||||
for (int i = 100; i < 10000; i += 5) {
|
||||
for (int i = 100; i < 10000; i += 1) {
|
||||
tone(TONEPIN, i);
|
||||
delayMicroseconds(20);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,27 @@
|
||||
{
|
||||
"name": "Adafruit Feather RP2040"
|
||||
},
|
||||
{
|
||||
"name": "Adafruit ItsyBitsy RP2040"
|
||||
},
|
||||
{
|
||||
"name": "Adafruit Macropad RP2040"
|
||||
},
|
||||
{
|
||||
"name": "Adafruit QTPy RP2040"
|
||||
},
|
||||
{
|
||||
"name": "Adafruit STEMMA Friend RP2040"
|
||||
},
|
||||
{
|
||||
"name": "Adafruit Trinkey RP2040 QT"
|
||||
},
|
||||
{
|
||||
"name": "Arduino Nano RP2040 Connect"
|
||||
},
|
||||
{
|
||||
"name": "SparkFun ProMicro RP2040"
|
||||
},
|
||||
{
|
||||
"name": "Generic RP2040 Module"
|
||||
}
|
||||
@@ -30,22 +51,22 @@
|
||||
"toolsDependencies": [
|
||||
{
|
||||
"packager": "rp2040",
|
||||
"version": "1.1.0-a-81a1771",
|
||||
"version": "1.3.0-a-dcbbdf3",
|
||||
"name": "pqt-gcc"
|
||||
},
|
||||
{
|
||||
"packager": "rp2040",
|
||||
"version": "1.1.0-a-81a1771",
|
||||
"version": "1.3.0-a-dcbbdf3",
|
||||
"name": "pqt-mklittlefs"
|
||||
},
|
||||
{
|
||||
"packager": "rp2040",
|
||||
"version": "1.1.0-a-81a1771",
|
||||
"version": "1.3.0-a-dcbbdf3",
|
||||
"name": "pqt-elf2uf2"
|
||||
},
|
||||
{
|
||||
"packager": "rp2040",
|
||||
"version": "1.1.0-a-81a1771",
|
||||
"version": "1.3.0-a-dcbbdf3",
|
||||
"name": "pqt-pioasm"
|
||||
},
|
||||
{
|
||||
@@ -55,7 +76,7 @@
|
||||
},
|
||||
{
|
||||
"packager": "rp2040",
|
||||
"version": "1.1.0-a-81a1771",
|
||||
"version": "1.3.0-a-dcbbdf3",
|
||||
"name": "pqt-openocd"
|
||||
}
|
||||
],
|
||||
@@ -66,57 +87,57 @@
|
||||
],
|
||||
"tools": [
|
||||
{
|
||||
"version": "1.1.0-a-81a1771",
|
||||
"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.1.0-a/aarch64-linux-gnu.openocd-d58c2ef5e.210328.tar.gz",
|
||||
"archiveFileName": "aarch64-linux-gnu.openocd-d58c2ef5e.210328.tar.gz",
|
||||
"checksum": "SHA-256:5064727a074c8bc8dff988e82bc2460c5f5610a04ec0a61ba233bdabe0499a24",
|
||||
"size": "6075189"
|
||||
"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.1.0-a/arm-linux-gnueabihf.openocd-d58c2ef5e.210328.tar.gz",
|
||||
"archiveFileName": "arm-linux-gnueabihf.openocd-d58c2ef5e.210328.tar.gz",
|
||||
"checksum": "SHA-256:12e61ebe727cb188fab25af174f0696ef86d629701f03f189965a725bd51275b",
|
||||
"size": "6076094"
|
||||
"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.1.0-a/i686-linux-gnu.openocd-d58c2ef5e.210328.tar.gz",
|
||||
"archiveFileName": "i686-linux-gnu.openocd-d58c2ef5e.210328.tar.gz",
|
||||
"checksum": "SHA-256:eaa89ac30556aaed5cd09fff4f46435f5a79c58d2060069db7606f9ecc9529ef",
|
||||
"size": "6076262"
|
||||
"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.1.0-a/i686-w64-mingw32.openocd-d58c2ef5e.210328.zip",
|
||||
"archiveFileName": "i686-w64-mingw32.openocd-d58c2ef5e.210328.zip",
|
||||
"checksum": "SHA-256:65b8c96b94f1cc3ff13eb853138efb3a465150fb02d07c792f8b235d43b05061",
|
||||
"size": "6378934"
|
||||
"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.1.0-a/x86_64-apple-darwin14.openocd-d58c2ef5e.210328.tar.gz",
|
||||
"archiveFileName": "x86_64-apple-darwin14.openocd-d58c2ef5e.210328.tar.gz",
|
||||
"checksum": "SHA-256:b8a759d7ac20643641285b0b05473b853e50739dd254b2294f5d1802ff0e15ca",
|
||||
"size": "6076324"
|
||||
"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.1.0-a/x86_64-linux-gnu.openocd-d58c2ef5e.210328.tar.gz",
|
||||
"archiveFileName": "x86_64-linux-gnu.openocd-d58c2ef5e.210328.tar.gz",
|
||||
"checksum": "SHA-256:9ff31fc92d6f86503d1750d009fec7e7c8c185c7956b140c4b78ee029d31c19c",
|
||||
"size": "6076342"
|
||||
"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.1.0-a/x86_64-w64-mingw32.openocd-d58c2ef5e.210328.zip",
|
||||
"archiveFileName": "x86_64-w64-mingw32.openocd-d58c2ef5e.210328.zip",
|
||||
"checksum": "SHA-256:8f1ddd64b0a6f83f94437d509bb28cdd45ad481bb161c170d57a6736f75087ec",
|
||||
"size": "6378956"
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -183,221 +204,221 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "1.1.0-a-81a1771",
|
||||
"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.1.0-a/aarch64-linux-gnu.arm-none-eabi-81a1771.210328.tar.gz",
|
||||
"archiveFileName": "aarch64-linux-gnu.arm-none-eabi-81a1771.210328.tar.gz",
|
||||
"checksum": "SHA-256:04eaa4a1c0596b1a47252150323af0a4def791cb9da20634872becbdbdfef979",
|
||||
"size": "101469960"
|
||||
"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.1.0-a/arm-linux-gnueabihf.arm-none-eabi-81a1771.210328.tar.gz",
|
||||
"archiveFileName": "arm-linux-gnueabihf.arm-none-eabi-81a1771.210328.tar.gz",
|
||||
"checksum": "SHA-256:43e739a2219ef9e9d16d1c81d4252c22a7392315325046d450542a3df6b35b96",
|
||||
"size": "94164344"
|
||||
"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.1.0-a/i686-linux-gnu.arm-none-eabi-81a1771.210328.tar.gz",
|
||||
"archiveFileName": "i686-linux-gnu.arm-none-eabi-81a1771.210328.tar.gz",
|
||||
"checksum": "SHA-256:b5961edde0d58b7dbc5c7b1c8fbf9d461fe2a7204f5282f6b5336a5d435efd3b",
|
||||
"size": "104228428"
|
||||
"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.1.0-a/i686-w64-mingw32.arm-none-eabi-81a1771.210328.zip",
|
||||
"archiveFileName": "i686-w64-mingw32.arm-none-eabi-81a1771.210328.zip",
|
||||
"checksum": "SHA-256:347fdc73b9f99e529c70598f9bf2ebc85adad098a24206cf89f8297a40e44d60",
|
||||
"size": "103803990"
|
||||
"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.1.0-a/x86_64-apple-darwin14.arm-none-eabi-81a1771.210328.tar.gz",
|
||||
"archiveFileName": "x86_64-apple-darwin14.arm-none-eabi-81a1771.210328.tar.gz",
|
||||
"checksum": "SHA-256:c035b48e0a42b90c9a356b43813671597a6c0f1cab4fb97a0dfcb2bbc7eb5390",
|
||||
"size": "105653466"
|
||||
"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.1.0-a/x86_64-linux-gnu.arm-none-eabi-81a1771.210328.tar.gz",
|
||||
"archiveFileName": "x86_64-linux-gnu.arm-none-eabi-81a1771.210328.tar.gz",
|
||||
"checksum": "SHA-256:b13ea47f3c62b65eda3acd40f43a392e8799696d821bc5c114e60950ab125bc0",
|
||||
"size": "106132177"
|
||||
"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.1.0-a/x86_64-w64-mingw32.arm-none-eabi-81a1771.210328.zip",
|
||||
"archiveFileName": "x86_64-w64-mingw32.arm-none-eabi-81a1771.210328.zip",
|
||||
"checksum": "SHA-256:06b19d7f9e9e2c1c3fc87d85af144b02591e3c5643c67521ff9807cdb5f6ecc7",
|
||||
"size": "108657552"
|
||||
"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.1.0-a-81a1771",
|
||||
"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.1.0-a/aarch64-linux-gnu.elf2uf2-0f3b795.210328.tar.gz",
|
||||
"archiveFileName": "aarch64-linux-gnu.elf2uf2-0f3b795.210328.tar.gz",
|
||||
"checksum": "SHA-256:5df8c7c132bc0f469c6610162d3c9836530acf4ace9bf4c3a849c80218f1855d",
|
||||
"size": "104572"
|
||||
"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.1.0-a/arm-linux-gnueabihf.elf2uf2-0f3b795.210328.tar.gz",
|
||||
"archiveFileName": "arm-linux-gnueabihf.elf2uf2-0f3b795.210328.tar.gz",
|
||||
"checksum": "SHA-256:dc311e18fac1e474804c044d194224267a729a16b34940c2e1ff23ab03207d98",
|
||||
"size": "80513"
|
||||
"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.1.0-a/i686-linux-gnu.elf2uf2-0f3b795.210328.tar.gz",
|
||||
"archiveFileName": "i686-linux-gnu.elf2uf2-0f3b795.210328.tar.gz",
|
||||
"checksum": "SHA-256:c39f24206e69230166fa15154b76d9553e732815cea59ee00b822b5acf2257db",
|
||||
"size": "110686"
|
||||
"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.1.0-a/i686-w64-mingw32.elf2uf2-0f3b795.210328.zip",
|
||||
"archiveFileName": "i686-w64-mingw32.elf2uf2-0f3b795.210328.zip",
|
||||
"checksum": "SHA-256:d239f7b5d7d71e646bb7cd3c59ddef593b3e564968e262b9290353a0d8102d7d",
|
||||
"size": "247162"
|
||||
"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.1.0-a/x86_64-apple-darwin14.elf2uf2-0f3b795.210328.tar.gz",
|
||||
"archiveFileName": "x86_64-apple-darwin14.elf2uf2-0f3b795.210328.tar.gz",
|
||||
"checksum": "SHA-256:3c776891300a3626ab4704808c61a15b653d58ff4f02398b492c12aed268f6aa",
|
||||
"size": "106610"
|
||||
"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.1.0-a/x86_64-linux-gnu.elf2uf2-0f3b795.210328.tar.gz",
|
||||
"archiveFileName": "x86_64-linux-gnu.elf2uf2-0f3b795.210328.tar.gz",
|
||||
"checksum": "SHA-256:90c57b7cc68323e84e4cdc7d6da44c0aeb11a1c102c51d03fb42179d6162d3f3",
|
||||
"size": "101265"
|
||||
"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.1.0-a/x86_64-w64-mingw32.elf2uf2-0f3b795.210328.zip",
|
||||
"archiveFileName": "x86_64-w64-mingw32.elf2uf2-0f3b795.210328.zip",
|
||||
"checksum": "SHA-256:a9afa2f04eb5510c8f39ea91d90b63a0dfe0b8037c6bca4d65de8905ca87175f",
|
||||
"size": "275914"
|
||||
"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.1.0-a-81a1771",
|
||||
"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.1.0-a/aarch64-linux-gnu.pioasm-0f3b795.210328.tar.gz",
|
||||
"archiveFileName": "aarch64-linux-gnu.pioasm-0f3b795.210328.tar.gz",
|
||||
"checksum": "SHA-256:28cd0813a46d81becb6b743ca6c7a53da0ed15f4da61ccee422f66eeb427912b",
|
||||
"size": "619033"
|
||||
"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.1.0-a/arm-linux-gnueabihf.pioasm-0f3b795.210328.tar.gz",
|
||||
"archiveFileName": "arm-linux-gnueabihf.pioasm-0f3b795.210328.tar.gz",
|
||||
"checksum": "SHA-256:d1c8f3b208aa00e801dad594c9d0425c9615b1531fb3f86adb95a6188868462c",
|
||||
"size": "536769"
|
||||
"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.1.0-a/i686-linux-gnu.pioasm-0f3b795.210328.tar.gz",
|
||||
"archiveFileName": "i686-linux-gnu.pioasm-0f3b795.210328.tar.gz",
|
||||
"checksum": "SHA-256:d09a70558acabf343ae04c783eac622e9bd1a6cfb74f42ebee03c0cfde5093c7",
|
||||
"size": "658587"
|
||||
"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.1.0-a/i686-w64-mingw32.pioasm-0f3b795.210328.zip",
|
||||
"archiveFileName": "i686-w64-mingw32.pioasm-0f3b795.210328.zip",
|
||||
"checksum": "SHA-256:c2ab0c8f3d54886838abb0c40910113e2e1e891068b205ec23944eecd0ce8037",
|
||||
"size": "756780"
|
||||
"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.1.0-a/x86_64-apple-darwin14.pioasm-0f3b795.210328.tar.gz",
|
||||
"archiveFileName": "x86_64-apple-darwin14.pioasm-0f3b795.210328.tar.gz",
|
||||
"checksum": "SHA-256:f48d729582eda8d95c16d2f5fd76ba452a6dd2ae3a47ea9dace01a130e4fb897",
|
||||
"size": "609240"
|
||||
"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.1.0-a/x86_64-linux-gnu.pioasm-0f3b795.210328.tar.gz",
|
||||
"archiveFileName": "x86_64-linux-gnu.pioasm-0f3b795.210328.tar.gz",
|
||||
"checksum": "SHA-256:ca089e67effb47dec2a9acdf1490052d096335a8b8ffa46eaa33c205eec87b7b",
|
||||
"size": "605194"
|
||||
"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.1.0-a/x86_64-w64-mingw32.pioasm-0f3b795.210328.zip",
|
||||
"archiveFileName": "x86_64-w64-mingw32.pioasm-0f3b795.210328.zip",
|
||||
"checksum": "SHA-256:f02509d1a75b68f14a3c3089029a0f16d185b07af598a4786b3bb6b357b88fa1",
|
||||
"size": "886179"
|
||||
"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.1.0-a-81a1771",
|
||||
"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.1.0-a/aarch64-linux-gnu.mklittlefs-6b5c62d.210328.tar.gz",
|
||||
"archiveFileName": "aarch64-linux-gnu.mklittlefs-6b5c62d.210328.tar.gz",
|
||||
"checksum": "SHA-256:e8a77602a78ff51ed1588e0aef23c75f54dc3b8415a489ae700c90306da81701",
|
||||
"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.1.0-a/arm-linux-gnueabihf.mklittlefs-6b5c62d.210328.tar.gz",
|
||||
"archiveFileName": "arm-linux-gnueabihf.mklittlefs-6b5c62d.210328.tar.gz",
|
||||
"checksum": "SHA-256:6faa9ec2dfc9c6ef58df2e0fd0a990be923ce87a1f36f3e0766af2168b095d50",
|
||||
"size": "38250"
|
||||
"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.1.0-a/i686-linux-gnu.mklittlefs-6b5c62d.210328.tar.gz",
|
||||
"archiveFileName": "i686-linux-gnu.mklittlefs-6b5c62d.210328.tar.gz",
|
||||
"checksum": "SHA-256:6aa70b5953e76cc9561b77a8092b14a33c9850c42dd9b306a052fc2d056a89a8",
|
||||
"size": "48237"
|
||||
"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.1.0-a/i686-w64-mingw32.mklittlefs-6b5c62d.210328.zip",
|
||||
"archiveFileName": "i686-w64-mingw32.mklittlefs-6b5c62d.210328.zip",
|
||||
"checksum": "SHA-256:34e0a84d0f562e6f9bfd91090f9064164062f7c68b4dbd65d7f154987f7940e3",
|
||||
"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.1.0-a/x86_64-apple-darwin14.mklittlefs-6b5c62d.210328.tar.gz",
|
||||
"archiveFileName": "x86_64-apple-darwin14.mklittlefs-6b5c62d.210328.tar.gz",
|
||||
"checksum": "SHA-256:5289f7cde14a5b65a572ddb3b2b0e24f2ea692365787438586f60929750dc395",
|
||||
"size": "362804"
|
||||
"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.1.0-a/x86_64-linux-gnu.mklittlefs-6b5c62d.210328.tar.gz",
|
||||
"archiveFileName": "x86_64-linux-gnu.mklittlefs-6b5c62d.210328.tar.gz",
|
||||
"checksum": "SHA-256:07331f6a171010790986bbd6e98cef028dd9f95733226ebab68096e28b3ef8ef",
|
||||
"size": "46917"
|
||||
"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.1.0-a/x86_64-w64-mingw32.mklittlefs-6b5c62d.210328.zip",
|
||||
"archiveFileName": "x86_64-w64-mingw32.mklittlefs-6b5c62d.210328.zip",
|
||||
"checksum": "SHA-256:17889e9ab6d199baed2c1532926c8508310524f9ba6b1db0816be5ee5d39a2f6",
|
||||
"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"
|
||||
}
|
||||
]
|
||||
@@ -405,4 +426,4 @@
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
+1
-1
Submodule pico-sdk updated: afc10f3599...bfcbefafc5
@@ -22,7 +22,6 @@ function skip_ino()
|
||||
/msc_sdfat/
|
||||
/msc_sd/
|
||||
/midi_pizza_box_dj/
|
||||
/hid_composite_joy_featherwing/
|
||||
EOL
|
||||
echo $ino | grep -q -F "$skiplist"
|
||||
echo $(( 1 - $? ))
|
||||
|
||||
+2
-1
@@ -26,6 +26,7 @@ function skip_ino()
|
||||
/p08_DigitalHourglass/
|
||||
/p13_TouchSensorLamp/
|
||||
/StringComparisonOperators/
|
||||
/PDMSerialPlotter/
|
||||
EOL
|
||||
echo $ino | grep -q -F "$skiplist"
|
||||
echo $(( 1 - $? ))
|
||||
@@ -152,7 +153,7 @@ function install_libraries()
|
||||
# install ArduinoJson library
|
||||
{ test -r ArduinoJson-v6.11.0.zip || curl -sS --output ArduinoJson-v6.11.0.zip -L https://github.com/bblanchon/ArduinoJson/releases/download/v6.11.0/ArduinoJson-v6.11.0.zip; } && unzip -qo ArduinoJson-v6.11.0.zip
|
||||
{ test -r Adafruit_SPIFlash-3.4.1.zip || curl -sS --output Adafruit_SPIFlash-3.4.1.zip -L https://github.com/adafruit/Adafruit_SPIFlash/archive/refs/tags/3.4.1.zip; } && unzip -qo Adafruit_SPIFlash-3.4.1.zip
|
||||
{ test -r Adafruit_Seesaw-1.4.3.zip || curl -sS --output Adafruit_Seesaw-1.4.3.zip -L https://github.com/adafruit/Adafruit_Seesaw/archive/refs/tags/1.4.3.zip; } && unzip -qo Adafruit_Seesaw-1.4.3.zip
|
||||
{ test -r Adafruit_Seesaw-1.4.4.zip || curl -sS --output Adafruit_Seesaw-1.4.4.zip -L https://github.com/adafruit/Adafruit_Seesaw/archive/refs/tags/1.4.4.zip; } && unzip -qo Adafruit_Seesaw-1.4.4.zip
|
||||
{ test -r Adafruit_BusIO-1.7.3.zip || curl -sS --output Adafruit_BusIO-1.7.3.zip -L https://github.com/adafruit/Adafruit_BusIO/archive/refs/tags/1.7.3.zip; } && unzip -qo Adafruit_BusIO-1.7.3.zip
|
||||
{ test -r Adafruit_CircuitPlayground-1.11.3.zip || curl -sS --output Adafruit_CircuitPlayground-1.11.3.zip -L https://github.com/adafruit/Adafruit_CircuitPlayground/archive/refs/tags/1.11.3.zip; } && unzip -qo Adafruit_CircuitPlayground-1.11.3.zip
|
||||
{ test -r Adafruit_NeoPixel-1.8.1.zip || curl -sS --output Adafruit_NeoPixel-1.8.1.zip -L https://github.com/adafruit/Adafruit_NeoPixel/archive/refs/tags/1.8.1.zip; } && unzip -qo Adafruit_NeoPixel-1.8.1.zip
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -126,5 +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
|
||||
};
|
||||
@@ -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"
|
||||
@@ -0,0 +1,37 @@
|
||||
#pragma once
|
||||
|
||||
// Taken from schematic at https://cdn.sparkfun.com/assets/e/2/7/6/b/ProMicroRP2040_Graphical_Datasheet.pdf
|
||||
|
||||
// LEDs
|
||||
#define PIN_LED (25u)
|
||||
|
||||
#define PIN_NEOPIXEL (25)
|
||||
#define NUM_NEOPIXEL (1)
|
||||
|
||||
// UARTs
|
||||
#define PIN_SERIAL1_TX (0u)
|
||||
#define PIN_SERIAL1_RX (1u)
|
||||
#define PIN_SERIAL2_TX (8u)
|
||||
#define PIN_SERIAL2_RX (9u)
|
||||
|
||||
// SPI
|
||||
#define PIN_SPI0_MISO (20u)
|
||||
#define PIN_SPI0_MOSI (23u)
|
||||
#define PIN_SPI0_SCK (22u)
|
||||
#define PIN_SPI0_SS (21u)
|
||||
#define PIN_SPI1_MISO (31u)
|
||||
#define PIN_SPI1_MOSI (31u)
|
||||
#define PIN_SPI1_SCK (31u)
|
||||
#define PIN_SPI1_SS (31u) // not pinned out
|
||||
|
||||
// Wire
|
||||
#define PIN_WIRE0_SDA (16u)
|
||||
#define PIN_WIRE0_SCL (17u)
|
||||
#define PIN_WIRE1_SDA (31u)
|
||||
#define PIN_WIRE1_SCL (31u)
|
||||
|
||||
#define SERIAL_HOWMANY (3u)
|
||||
#define SPI_HOWMANY (1u)
|
||||
#define WIRE_HOWMANY (1u)
|
||||
|
||||
#include "../generic/common.h"
|
||||
Reference in New Issue
Block a user