Remove board_deep_sleep_hook, which should be done in board_deinit.
This commit is contained in:
parent
623bf659a5
commit
6499d18bb8
@ -32,7 +32,6 @@
|
|||||||
#include "shared-module/displayio/__init__.h"
|
#include "shared-module/displayio/__init__.h"
|
||||||
#include "shared-module/displayio/mipi_constants.h"
|
#include "shared-module/displayio/mipi_constants.h"
|
||||||
#include "shared-bindings/digitalio/DigitalInOut.h"
|
#include "shared-bindings/digitalio/DigitalInOut.h"
|
||||||
#include "common-hal/alarm/__init__.h"
|
|
||||||
|
|
||||||
displayio_fourwire_obj_t board_display_obj;
|
displayio_fourwire_obj_t board_display_obj;
|
||||||
digitalio_digitalinout_obj_t CTR_5V;
|
digitalio_digitalinout_obj_t CTR_5V;
|
||||||
@ -52,7 +51,7 @@ uint8_t display_init_sequence[] = {
|
|||||||
0xc1, 0x01, 0x10, // Power control SAP[2:0];BT[3:0]
|
0xc1, 0x01, 0x10, // Power control SAP[2:0];BT[3:0]
|
||||||
0xc5, 0x02, 0x3e, 0x28, // VCM control
|
0xc5, 0x02, 0x3e, 0x28, // VCM control
|
||||||
0xc7, 0x01, 0x86, // VCM control2
|
0xc7, 0x01, 0x86, // VCM control2
|
||||||
0x36, 0x01, 0x38, // Memory Access Control
|
0x36, 0x01, 0xe8, // Memory Access Control
|
||||||
0x37, 0x01, 0x00, // Vertical scroll zero
|
0x37, 0x01, 0x00, // Vertical scroll zero
|
||||||
0x3a, 0x01, 0x55, // COLMOD: Pixel Format Set
|
0x3a, 0x01, 0x55, // COLMOD: Pixel Format Set
|
||||||
0xb1, 0x02, 0x00, 0x18, // Frame Rate Control (In Normal Mode/Full Colors)
|
0xb1, 0x02, 0x00, 0x18, // Frame Rate Control (In Normal Mode/Full Colors)
|
||||||
@ -89,7 +88,7 @@ void board_init(void) {
|
|||||||
240, // Height
|
240, // Height
|
||||||
0, // column start
|
0, // column start
|
||||||
0, // row start
|
0, // row start
|
||||||
180, // rotation
|
0, // rotation
|
||||||
16, // Color depth
|
16, // Color depth
|
||||||
false, // Grayscale
|
false, // Grayscale
|
||||||
false, // pixels in a byte share a row. Only valid for depths < 8
|
false, // pixels in a byte share a row. Only valid for depths < 8
|
||||||
@ -130,6 +129,8 @@ void board_init(void) {
|
|||||||
common_hal_digitalio_digitalinout_never_reset(&CTR_3V3);
|
common_hal_digitalio_digitalinout_never_reset(&CTR_3V3);
|
||||||
common_hal_digitalio_digitalinout_never_reset(&USB_HOST_ENABLE);
|
common_hal_digitalio_digitalinout_never_reset(&USB_HOST_ENABLE);
|
||||||
|
|
||||||
|
// reset pin after fake deep sleep
|
||||||
|
reset_pin_number(pin_PA18.number);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool board_requests_safe_mode(void) {
|
bool board_requests_safe_mode(void) {
|
||||||
@ -144,10 +145,8 @@ void board_deinit(void) {
|
|||||||
common_hal_digitalio_digitalinout_deinit(&CTR_5V);
|
common_hal_digitalio_digitalinout_deinit(&CTR_5V);
|
||||||
common_hal_digitalio_digitalinout_deinit(&CTR_3V3);
|
common_hal_digitalio_digitalinout_deinit(&CTR_3V3);
|
||||||
common_hal_digitalio_digitalinout_deinit(&USB_HOST_ENABLE);
|
common_hal_digitalio_digitalinout_deinit(&USB_HOST_ENABLE);
|
||||||
}
|
|
||||||
|
|
||||||
void board_deep_sleep_hook(void) {
|
// Turn off RTL8720DN before the deep sleep.
|
||||||
// Pins are reset before entering deep sleep in cleanup_after_vm()
|
// Pin state is kept during BACKUP sleep.
|
||||||
// This hook turn RTL_PWR off
|
|
||||||
gpio_set_pin_direction(pin_PA18.number, GPIO_DIRECTION_OUT);
|
gpio_set_pin_direction(pin_PA18.number, GPIO_DIRECTION_OUT);
|
||||||
}
|
}
|
||||||
|
@ -101,12 +101,10 @@ mp_obj_t common_hal_alarm_light_sleep_until_alarms(size_t n_alarms, const mp_obj
|
|||||||
PM->SLEEPCFG.reg = PM_SLEEPCFG_SLEEPMODE_STANDBY;
|
PM->SLEEPCFG.reg = PM_SLEEPCFG_SLEEPMODE_STANDBY;
|
||||||
while (PM->SLEEPCFG.bit.SLEEPMODE != PM_SLEEPCFG_SLEEPMODE_STANDBY_Val) {
|
while (PM->SLEEPCFG.bit.SLEEPMODE != PM_SLEEPCFG_SLEEPMODE_STANDBY_Val) {
|
||||||
}
|
}
|
||||||
// Even though RAMCFG_OFF, SYSRAM seems to be retained. Probably
|
// STDBYCFG is left to be 0 to retain SYSRAM. Note that, even if
|
||||||
// because RTC keeps sleepwalking. Anyway, STDBYCFG should be
|
// RAMCFG_OFF is set here, SYSRAM seems to be retained, probably
|
||||||
// left intact as 0 to retain SYSRAM.
|
// because RTC and/or USB keeps sleepwalking.
|
||||||
#if 0
|
|
||||||
PM->STDBYCFG.reg = PM_STDBYCFG_RAMCFG_OFF;
|
|
||||||
#endif
|
|
||||||
while (!mp_hal_is_interrupted()) {
|
while (!mp_hal_is_interrupted()) {
|
||||||
RUN_BACKGROUND_TASKS;
|
RUN_BACKGROUND_TASKS;
|
||||||
// Detect if interrupt was alarm or ctrl-C interrupt.
|
// Detect if interrupt was alarm or ctrl-C interrupt.
|
||||||
@ -153,11 +151,6 @@ void NORETURN common_hal_alarm_enter_deep_sleep(void) {
|
|||||||
alarm_time_timealarm_prepare_for_deep_sleep();
|
alarm_time_timealarm_prepare_for_deep_sleep();
|
||||||
// port_disable_tick(); // TODO: Required for SAMD?
|
// port_disable_tick(); // TODO: Required for SAMD?
|
||||||
|
|
||||||
// Set pin state before the deep sleep, to turn off devices and reduce power.
|
|
||||||
// In case of Wio Terminal, set PA18 to 0 to turn off RTL8720DN.
|
|
||||||
// Pin state is kept during BACKUP sleep.
|
|
||||||
board_deep_sleep_hook();
|
|
||||||
|
|
||||||
// cache alarm flag and etc since RTC about to be reset
|
// cache alarm flag and etc since RTC about to be reset
|
||||||
uint32_t _flag = SAMD_ALARM_FLAG; // RTC->MODE0.BKUP[0].reg
|
uint32_t _flag = SAMD_ALARM_FLAG; // RTC->MODE0.BKUP[0].reg
|
||||||
uint32_t _target = RTC->MODE0.COMP[1].reg;
|
uint32_t _target = RTC->MODE0.COMP[1].reg;
|
||||||
@ -193,13 +186,7 @@ void NORETURN common_hal_alarm_enter_deep_sleep(void) {
|
|||||||
// Enable interrupts
|
// Enable interrupts
|
||||||
common_hal_mcu_enable_interrupts();
|
common_hal_mcu_enable_interrupts();
|
||||||
|
|
||||||
// Set-up Deep Sleep Mode & RAM retention
|
// Set-up Deep Sleep Mode with backup RAM retention
|
||||||
// Left BRAMCFG untouched as 0
|
|
||||||
#if 0
|
|
||||||
PM->BKUPCFG.reg = PM_BKUPCFG_BRAMCFG(0x2); // No RAM retention 0x2 partial:0x1
|
|
||||||
while (PM->BKUPCFG.bit.BRAMCFG != 0x2) { // Wait for synchronization
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
PM->SLEEPCFG.reg = PM_SLEEPCFG_SLEEPMODE_BACKUP;
|
PM->SLEEPCFG.reg = PM_SLEEPCFG_SLEEPMODE_BACKUP;
|
||||||
while (PM->SLEEPCFG.bit.SLEEPMODE != PM_SLEEPCFG_SLEEPMODE_BACKUP_Val) {
|
while (PM->SLEEPCFG.bit.SLEEPMODE != PM_SLEEPCFG_SLEEPMODE_BACKUP_Val) {
|
||||||
}
|
}
|
||||||
@ -216,24 +203,10 @@ void NORETURN common_hal_alarm_enter_deep_sleep(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// In case of fake deep sleep, event loop is mostly managed in main.c.
|
// Default common_hal_alarm_pretending_deep_sleep is defined in
|
||||||
// Default common_hal_alarm_pretending_deep_sleep is defined in shared-bindings.
|
// shared-bindings, which is used here. Note that "pretending" does
|
||||||
// Note that "pretending" does not work on REPL; it only works for main.py (or code.py, ...).
|
// not work on REPL; it only works for main.py (or code.py, ...).
|
||||||
//
|
|
||||||
// In case of fake sleep, if pin state is modified in the hook, the pin is left dirty...
|
|
||||||
#if 0
|
|
||||||
void common_hal_alarm_pretending_deep_sleep(void) {
|
|
||||||
// RTC is already be furnished by common_hal_alarm_set_deep_sleep_alarms.
|
|
||||||
// fake_sleep = true;
|
|
||||||
|
|
||||||
board_deep_sleep_hook();
|
|
||||||
port_idle_until_interrupt();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void common_hal_alarm_gc_collect(void) {
|
void common_hal_alarm_gc_collect(void) {
|
||||||
gc_collect_ptr(shared_alarm_get_wake_alarm());
|
gc_collect_ptr(shared_alarm_get_wake_alarm());
|
||||||
}
|
}
|
||||||
|
|
||||||
MP_WEAK void board_deep_sleep_hook(void) {
|
|
||||||
}
|
|
||||||
|
@ -57,5 +57,4 @@ extern void alarm_set_wakeup_reason(samd_sleep_source_t reason);
|
|||||||
void alarm_get_wakeup_cause(void);
|
void alarm_get_wakeup_cause(void);
|
||||||
extern void alarm_reset(void);
|
extern void alarm_reset(void);
|
||||||
|
|
||||||
extern void board_deep_sleep_hook(void);
|
|
||||||
#endif // MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_ALARM__INIT__H
|
#endif // MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_ALARM__INIT__H
|
||||||
|
@ -171,13 +171,14 @@ void alarm_pin_pinalarm_reset(void) {
|
|||||||
static void pinalarm_set_alarms_light(size_t n_alarms, const mp_obj_t *alarms) {
|
static void pinalarm_set_alarms_light(size_t n_alarms, const mp_obj_t *alarms) {
|
||||||
int err = PINALARM_NOERR;
|
int err = PINALARM_NOERR;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
const mcu_pin_obj_t *pin;
|
||||||
|
|
||||||
for (i = 0; i < n_alarms; i++) {
|
for (i = 0; i < n_alarms; i++) {
|
||||||
if (!mp_obj_is_type(alarms[i], &alarm_pin_pinalarm_type)) {
|
if (!mp_obj_is_type(alarms[i], &alarm_pin_pinalarm_type)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
alarm_pin_pinalarm_obj_t *alarm = MP_OBJ_TO_PTR(alarms[i]);
|
alarm_pin_pinalarm_obj_t *alarm = MP_OBJ_TO_PTR(alarms[i]);
|
||||||
const mcu_pin_obj_t *pin = alarm->pin;
|
pin = alarm->pin;
|
||||||
|
|
||||||
if (!pin_number_is_free(pin->number)) {
|
if (!pin_number_is_free(pin->number)) {
|
||||||
err = PINALARM_ERR_NOT_FREE;
|
err = PINALARM_ERR_NOT_FREE;
|
||||||
@ -229,14 +230,15 @@ static void pinalarm_set_alarms_light(size_t n_alarms, const mp_obj_t *alarms) {
|
|||||||
|
|
||||||
switch (err) {
|
switch (err) {
|
||||||
case PINALARM_ERR_NOT_FREE:
|
case PINALARM_ERR_NOT_FREE:
|
||||||
mp_raise_RuntimeError(translate("Pin is not free"));
|
assert_pin_free(pin);
|
||||||
;
|
// raise ValueError here
|
||||||
|
MP_FALLTHROUGH
|
||||||
case PINALARM_ERR_NOEXTINT:
|
case PINALARM_ERR_NOEXTINT:
|
||||||
mp_raise_RuntimeError(translate("No hardware support on pin"));
|
mp_raise_RuntimeError(translate("No hardware support on pin"));
|
||||||
case PINALARM_ERR_NOCHANNEL:
|
case PINALARM_ERR_NOCHANNEL:
|
||||||
mp_raise_RuntimeError(translate("A hardware interrupt channel is already in use"));
|
mp_raise_RuntimeError(translate("A hardware interrupt channel is already in use"));
|
||||||
default:
|
default:
|
||||||
mp_raise_RuntimeError(translate("Unknown error"));
|
mp_raise_RuntimeError(translate("Unknown reason."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user