merge rehius' changes for rp2040-tiny LED compatibility

This commit is contained in:
DefenderOfHyrule 2024-10-31 11:28:51 +01:00
parent 00db7faca3
commit c6647c1481
6 changed files with 51 additions and 24 deletions

View file

@ -45,8 +45,8 @@ jobs:
- name: Build busk
run: |
# Backup and modify memmap_default.ld for busk build
cp $GITHUB_WORKSPACE/pico-sdk/src/rp2_common/pico_standard_link/memmap_default.ld $GITHUB_WORKSPACE/pico-sdk/src/rp2_common/pico_standard_link/memmap_default.ld.bak
sed -i 's/RAM(rwx) : ORIGIN = 0x20000000, LENGTH = 256k/RAM(rwx) : ORIGIN = 0x20038000, LENGTH = 32k/g' $GITHUB_WORKSPACE/pico-sdk/src/rp2_common/pico_standard_link/memmap_default.ld
cp $GITHUB_WORKSPACE/pico-sdk/src/rp2_common/pico_crt0/rp2040/memmap_default.ld $GITHUB_WORKSPACE/pico-sdk/src/rp2_common/pico_crt0/rp2040/memmap_default.ld.bak
sed -i 's/RAM(rwx) : ORIGIN = 0x20000000, LENGTH = 256k/RAM(rwx) : ORIGIN = 0x20038000, LENGTH = 32k/g' $GITHUB_WORKSPACE/pico-sdk/src/rp2_common/pico_crt0/rp2040/memmap_default.ld
mkdir -p $GITHUB_WORKSPACE/build/busk
cd $GITHUB_WORKSPACE/build/busk
cmake $GITHUB_WORKSPACE/busk
@ -54,8 +54,8 @@ jobs:
make clean
cd $GITHUB_WORKSPACE
# Restore original memmap_default.ld from backup
rm -f $GITHUB_WORKSPACE/pico-sdk/src/rp2_common/pico_standard_link/memmap_default.ld
mv $GITHUB_WORKSPACE/pico-sdk/src/rp2_common/pico_standard_link/memmap_default.ld.bak $GITHUB_WORKSPACE/pico-sdk/src/rp2_common/pico_standard_link/memmap_default.ld
rm -f $GITHUB_WORKSPACE/pico-sdk/src/rp2_common/pico_crt0/rp2040/memmap_default.ld
mv $GITHUB_WORKSPACE/pico-sdk/src/rp2_common/pico_crt0/rp2040/memmap_default.ld.bak $GITHUB_WORKSPACE/pico-sdk/src/rp2_common/pico_crt0/rp2040/memmap_default.ld
- name: Build usk
run: |

View file

@ -14,12 +14,13 @@ enum board_type {
BOARD_XO,
BOARD_IB,
BOARD_PI,
BOARD_SQ
BOARD_SQ,
BOARD_WT
};
enum board_type cur_board = BOARD_WS;
bool detect_by_pull_up(int frc_pin, int det_pin)
bool detect_by_pull(int frc_pin, int det_pin, bool up)
{
bool result = false;
if (frc_pin >= 0)
@ -27,9 +28,9 @@ bool detect_by_pull_up(int frc_pin, int det_pin)
gpio_init(det_pin);
if (frc_pin >= 0)
gpio_set_dir(frc_pin, true);
gpio_pull_up(det_pin);
gpio_set_pulls(det_pin, up, !up);
sleep_us(15);
result = !gpio_get(det_pin);
result = gpio_get(det_pin) ^ up;
gpio_deinit(det_pin);
if (frc_pin >= 0)
gpio_deinit(frc_pin);
@ -39,27 +40,32 @@ bool detect_by_pull_up(int frc_pin, int det_pin)
bool test_xiao()
{
return detect_by_pull_up(1, 2);
return detect_by_pull(1, 2, 1);
}
bool test_itsy()
{
return detect_by_pull_up(3, 2);
return detect_by_pull(3, 2, 1);
}
bool test_pico()
{
return detect_by_pull_up(-1, 22);
return detect_by_pull(-1, 22, 1);
}
bool test_ws()
{
return detect_by_pull_up(-1, 25);
return detect_by_pull(-1, 25, 1);
}
bool test_wt()
{
return detect_by_pull(-1, 16, 0);
}
bool test_sqc()
{
return detect_by_pull_up(-1, 17);
return detect_by_pull(-1, 17, 1);
}
void detect_board()
@ -79,6 +85,8 @@ void detect_board()
cur_board = BOARD_PI;
} else if (test_sqc()) {
cur_board = BOARD_SQ;
} else if (test_wt()) {
cur_board = BOARD_WT;
} else {
cur_board = BOARD_WS;
}
@ -160,3 +168,8 @@ bool is_pico()
{
return cur_board == BOARD_PI;
}
bool is_tiny()
{
return cur_board == BOARD_WT;
}

View file

@ -1,11 +1,12 @@
#include "stdbool.h"
bool detect_by_pull_up(int frc_pin, int det_pin);
bool detect_by_pull(int frc_pin, int det_pin, bool up);
void detect_board();
int gli_pin();
int pwr_pin();
int led_pin();
bool is_pico();
bool is_tiny();
int scl_pin();
int sda_pin();

View file

@ -4,7 +4,7 @@
#define OFFSET_MAX 6950
#define VER_HI 2
#define VER_LO 77
#define VER_LO 78
bool is_configured();
void init_config();

9
main.c
View file

@ -94,13 +94,20 @@ int main()
init_fuses();
// LED & glitch & emmc PIO
upload_pio();
if (is_tiny())
{
gpio_put(led_pin(), 0);
sleep_us(100);
put_pixel(0);
sleep_us(100);
}
// check if this is the very first start
if (watchdog_caused_reboot() && boot_try == 0)
{
halt_with_error(1, 1);
}
// is chip reset required
bool force_button = detect_by_pull_up(1, 0);
bool force_button = detect_by_pull(1, 0, 1);
// start LED
put_pixel(PIX_gre);
// test pins

6
misc.c
View file

@ -52,7 +52,10 @@ void finish_pins_except_leds() {
}
void finish_pins_leds() {
if (!is_tiny())
{
gpio_disable_input_output(led_pin());
}
gpio_disable_input_output(pwr_pin());
}
@ -125,8 +128,11 @@ void put_pixel(uint32_t pixel_rgb)
pio_sm_put_blocking(pio0, 3, pixel_grb << 8u);
sleep_us(50);
pio_sm_set_enabled(pio0, 3, false);
if (!is_tiny())
{
gpio_init(led_pin());
}
}
void gpio_disable_input_output(int pin)
{