Add basic hardware configuration options for P8

This enables the configuration of the LFCLK source,
as well as the target hardware board pin configuration.
This commit is contained in:
Christoph Honal
2022-05-10 21:46:36 +02:00
committed by Riku Isokoski
parent bab86633a0
commit 8b0559c481
5 changed files with 48 additions and 10 deletions

View File

@@ -779,6 +779,35 @@ add_definitions(-DFREERTOS)
add_definitions(-D__STACK_SIZE=1024)
add_definitions(-D__HEAP_SIZE=4096)
# Note: Only use this for debugging
# Derive the low frequency clock from the main clock (SYNT)
# add_definitions(-DCLOCK_CONFIG_LF_SRC=2)
# Target hardware configuration options
add_definitions(-DTARGET_DEVICE_${TARGET_DEVICE})
if(TARGET_DEVICE STREQUAL "PINETIME")
add_definitions(-DDRIVER_PINMAP_PINETIME)
add_definitions(-DCLOCK_CONFIG_LF_SRC=1) # XTAL
elseif(TARGET_DEVICE STREQUAL "MOY-TFK5") # P8a
add_definitions(-DDRIVER_PINMAP_P8)
add_definitions(-DCLOCK_CONFIG_LF_SRC=1) # XTAL
elseif(TARGET_DEVICE STREQUAL "MOY-TIN5") # P8a variant 2
add_definitions(-DDRIVER_PINMAP_P8)
add_definitions(-DCLOCK_CONFIG_LF_SRC=1) # XTAL
elseif(TARGET_DEVICE STREQUAL "MOY-TON5") # P8b
add_definitions(-DDRIVER_PINMAP_P8)
add_definitions(-DCLOCK_CONFIG_LF_SRC=0) # RC
add_definitions(-DMYNEWT_VAL_BLE_LL_SCA=500)
add_definitions(-DCLOCK_CONFIG_LF_CAL_ENABLED=1)
elseif(TARGET_DEVICE STREQUAL "MOY-UNK") # P8b mirrored
add_definitions(-DDRIVER_PINMAP_P8)
add_definitions(-DCLOCK_CONFIG_LF_SRC=0) # RC
add_definitions(-DMYNEWT_VAL_BLE_LL_SCA=500)
add_definitions(-DCLOCK_CONFIG_LF_CAL_ENABLED=1)
else()
message(FATAL_ERROR "Invalid TARGET_DEVICE")
endif()
# Debug configuration
if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
add_definitions(-DDEBUG)

View File

@@ -4,8 +4,8 @@
namespace Pinetime {
namespace PinMap {
#ifdef WATCH_P8
// COLMI P8
#if defined(DRIVER_PINMAP_P8)
// COLMI P8 and variants
static constexpr uint8_t Charging = 19;
static constexpr uint8_t Cst816sReset = 13;
static constexpr uint8_t Button = 17;

View File

@@ -300,10 +300,24 @@ void nimble_port_ll_task_func(void* args) {
}
}
void calibrate_lf_clock_rc(nrf_drv_clock_evt_type_t event) {
// 16 * 0.25s = 4s calibration cycle
// Not recursive, call is deferred via internal calibration timer
nrf_drv_clock_calibration_start(16, calibrate_lf_clock_rc);
}
int main(void) {
logger.Init();
nrf_drv_clock_init();
nrf_drv_clock_lfclk_request(NULL);
// The RC source for the LF clock has to be calibrated
#if (CLOCK_CONFIG_LF_SRC == NRF_CLOCK_LFCLK_RC)
while (!nrf_clock_lf_is_running()) {
}
nrf_drv_clock_calibration_start(0, calibrate_lf_clock_rc);
#endif
// Unblock i2c?
nrf_gpio_cfg(Pinetime::PinMap::TwiScl,