2025-12-12 19:01:15 +07:00
|
|
|
#if defined(NRF52_PLATFORM)
|
|
|
|
|
#include "NRF52Board.h"
|
|
|
|
|
|
2025-12-09 17:05:33 +01:00
|
|
|
void NRF52Board::begin() {
|
|
|
|
|
startup_reason = BD_STARTUP_NORMAL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void NRF52BoardDCDC::begin() {
|
|
|
|
|
NRF52Board::begin();
|
|
|
|
|
|
|
|
|
|
// Enable DC/DC converter for improved power efficiency
|
|
|
|
|
uint8_t sd_enabled = 0;
|
|
|
|
|
sd_softdevice_is_enabled(&sd_enabled);
|
|
|
|
|
if (sd_enabled) {
|
|
|
|
|
sd_power_dcdc_mode_set(NRF_POWER_DCDC_ENABLE);
|
|
|
|
|
} else {
|
|
|
|
|
NRF_POWER->DCDCEN = 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-12 19:01:15 +07:00
|
|
|
// Temperature from NRF52 MCU
|
|
|
|
|
float NRF52Board::getMCUTemperature() {
|
|
|
|
|
NRF_TEMP->TASKS_START = 1; // Start temperature measurement
|
|
|
|
|
|
|
|
|
|
long startTime = millis();
|
|
|
|
|
while (NRF_TEMP->EVENTS_DATARDY == 0) { // Wait for completion. Should complete in 50us
|
|
|
|
|
if(millis() - startTime > 5) { // To wait 5ms just in case
|
|
|
|
|
NRF_TEMP->TASKS_STOP = 1;
|
|
|
|
|
return NAN;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
NRF_TEMP->EVENTS_DATARDY = 0; // Clear event flag
|
|
|
|
|
|
|
|
|
|
int32_t temp = NRF_TEMP->TEMP; // In 0.25 *C units
|
|
|
|
|
NRF_TEMP->TASKS_STOP = 1;
|
|
|
|
|
|
|
|
|
|
return temp * 0.25f; // Convert to *C
|
|
|
|
|
}
|
|
|
|
|
#endif
|