Badger2040: Read the button state and enable 3v3 before initializing crystal
This commit is contained in:
parent
522c83dc19
commit
e1a4d56993
|
@ -4,41 +4,34 @@
|
||||||
|
|
||||||
#define MP_OBJ_TO_PTR2(o, t) ((t *)(uintptr_t)(o))
|
#define MP_OBJ_TO_PTR2(o, t) ((t *)(uintptr_t)(o))
|
||||||
|
|
||||||
|
extern "C" uint32_t badger_gpio_on_wake;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
struct Badger2040_WakeUpInit {
|
struct Badger2040_WakeUpInit {
|
||||||
Badger2040_WakeUpInit()
|
Badger2040_WakeUpInit()
|
||||||
: state(gpio_get_all() & (0x1f << pimoroni::Badger2040::DOWN)) // Record state of front buttons
|
|
||||||
{
|
{
|
||||||
gpio_set_function(pimoroni::Badger2040::ENABLE_3V3, GPIO_FUNC_SIO);
|
// Only keep the front buttons
|
||||||
gpio_set_dir(pimoroni::Badger2040::ENABLE_3V3, GPIO_OUT);
|
badger_gpio_on_wake &= 0x1f << pimoroni::Badger2040::DOWN;
|
||||||
gpio_put(pimoroni::Badger2040::ENABLE_3V3, 1);
|
|
||||||
|
|
||||||
gpio_set_function(pimoroni::Badger2040::LED, GPIO_FUNC_SIO);
|
|
||||||
gpio_set_dir(pimoroni::Badger2040::LED, GPIO_OUT);
|
|
||||||
gpio_put(pimoroni::Badger2040::LED, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool any() const {
|
bool any() const {
|
||||||
return state > 0;
|
return badger_gpio_on_wake > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get(uint32_t pin) const {
|
bool get(uint32_t pin) const {
|
||||||
return state & (0b1 << pin);
|
return badger_gpio_on_wake & (0b1 << pin);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get_once(uint32_t pin) {
|
bool get_once(uint32_t pin) {
|
||||||
uint32_t mask = 0b1 << pin;
|
uint32_t mask = 0b1 << pin;
|
||||||
bool value = state & mask;
|
bool value = badger_gpio_on_wake & mask;
|
||||||
state &= ~mask;
|
badger_gpio_on_wake &= ~mask;
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
void clear() { state = 0; }
|
void clear() { badger_gpio_on_wake = 0; }
|
||||||
|
|
||||||
private:
|
|
||||||
uint32_t state;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Badger2040_WakeUpInit button_wake_state __attribute__ ((init_priority (101)));
|
Badger2040_WakeUpInit button_wake_state;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
|
||||||
|
.syntax unified
|
||||||
|
.cpu cortex-m0plus
|
||||||
|
.thumb
|
||||||
|
|
||||||
|
#include "pico/asm_helper.S"
|
||||||
|
|
||||||
|
__pre_init __badger_init, 00003
|
||||||
|
|
||||||
|
.section .data.badger_init
|
||||||
|
.global badger_gpio_on_wake
|
||||||
|
.align 4
|
||||||
|
badger_gpio_on_wake:
|
||||||
|
.word 0x00000000
|
||||||
|
|
||||||
|
.section .text
|
||||||
|
.thumb_func
|
||||||
|
__badger_init:
|
||||||
|
// Read GPIO state and store
|
||||||
|
movs r3, 0xd0
|
||||||
|
lsls r3, r3, 24
|
||||||
|
ldr r1, [r3, 4]
|
||||||
|
ldr r2, =badger_gpio_on_wake
|
||||||
|
str r1, [r2]
|
||||||
|
|
||||||
|
// Enable 3v3 pin on the badger
|
||||||
|
ldr r1, =0x40014054 // GPIO control register 10
|
||||||
|
movs r2, 5 // SIO function
|
||||||
|
str r2, [r1] // Set Enable 3v3 to SIO
|
||||||
|
str r2, [r1, 120] // Also set LED (25) to SIO
|
||||||
|
ldr r2, =0x02000400 // Pins 25 and 10
|
||||||
|
str r2, [r3, 36] // Enable pins out
|
||||||
|
str r2, [r3, 20] // Set pins high
|
||||||
|
bx lr
|
|
@ -5,6 +5,7 @@ add_library(usermod_${MOD_NAME} INTERFACE)
|
||||||
target_sources(usermod_${MOD_NAME} INTERFACE
|
target_sources(usermod_${MOD_NAME} INTERFACE
|
||||||
${CMAKE_CURRENT_LIST_DIR}/${MOD_NAME}.c
|
${CMAKE_CURRENT_LIST_DIR}/${MOD_NAME}.c
|
||||||
${CMAKE_CURRENT_LIST_DIR}/${MOD_NAME}.cpp
|
${CMAKE_CURRENT_LIST_DIR}/${MOD_NAME}.cpp
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/badgerinit.S
|
||||||
${CMAKE_CURRENT_LIST_DIR}/../../../libraries/badger2040/badger2040.cpp
|
${CMAKE_CURRENT_LIST_DIR}/../../../libraries/badger2040/badger2040.cpp
|
||||||
${CMAKE_CURRENT_LIST_DIR}/../../../drivers/uc8151/uc8151.cpp
|
${CMAKE_CURRENT_LIST_DIR}/../../../drivers/uc8151/uc8151.cpp
|
||||||
)
|
)
|
||||||
|
@ -19,4 +20,4 @@ target_compile_definitions(usermod_${MOD_NAME} INTERFACE
|
||||||
MODULE_BADGER2040_ENABLED=1
|
MODULE_BADGER2040_ENABLED=1
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(usermod INTERFACE usermod_${MOD_NAME})
|
target_link_libraries(usermod INTERFACE usermod_${MOD_NAME})
|
||||||
|
|
Loading…
Reference in New Issue