Changes for getting supervisor ticks
This commit is contained in:
parent
a44c09e286
commit
12b81618a3
|
@ -1 +1 @@
|
||||||
Subproject commit 761d6437e8cd6a131d51de96974337121a9c7164
|
Subproject commit 00e00ee8acb043b976302051291bc236ae2676cb
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-07-30 07:23-0500\n"
|
"POT-Creation-Date: 2020-08-01 12:58-0500\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
|
|
@ -88,9 +88,8 @@ void pulsein_interrupt_handler(uint8_t channel) {
|
||||||
uint32_t current_count = tc->COUNT16.COUNT.reg;
|
uint32_t current_count = tc->COUNT16.COUNT.reg;
|
||||||
|
|
||||||
pulseio_pulsein_obj_t* self = get_eic_channel_data(channel);
|
pulseio_pulsein_obj_t* self = get_eic_channel_data(channel);
|
||||||
if (!supervisor_background_tasks_ok() || self->errored_too_fast) {
|
if (!supervisor_background_tasks_ok() ) {
|
||||||
self->errored_too_fast = true;
|
mp_raise_RuntimeError(translate("Input taking too long"));
|
||||||
common_hal_pulseio_pulsein_pause(self);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (self->first_edge) {
|
if (self->first_edge) {
|
||||||
|
@ -154,7 +153,6 @@ void common_hal_pulseio_pulsein_construct(pulseio_pulsein_obj_t* self,
|
||||||
self->start = 0;
|
self->start = 0;
|
||||||
self->len = 0;
|
self->len = 0;
|
||||||
self->first_edge = true;
|
self->first_edge = true;
|
||||||
self->errored_too_fast = false;
|
|
||||||
|
|
||||||
if (refcount == 0) {
|
if (refcount == 0) {
|
||||||
// Find a spare timer.
|
// Find a spare timer.
|
||||||
|
@ -264,9 +262,6 @@ void common_hal_pulseio_pulsein_resume(pulseio_pulsein_obj_t* self,
|
||||||
// Make sure we're paused.
|
// Make sure we're paused.
|
||||||
common_hal_pulseio_pulsein_pause(self);
|
common_hal_pulseio_pulsein_pause(self);
|
||||||
|
|
||||||
// Reset erroring
|
|
||||||
self->errored_too_fast = false;
|
|
||||||
|
|
||||||
// Send the trigger pulse.
|
// Send the trigger pulse.
|
||||||
if (trigger_duration > 0) {
|
if (trigger_duration > 0) {
|
||||||
gpio_set_pin_pull_mode(self->pin, GPIO_PULL_OFF);
|
gpio_set_pin_pull_mode(self->pin, GPIO_PULL_OFF);
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
#ifndef CIRCUITPY_INCLUDED_SUPERVISOR_BACKGROUND_CALLBACK_H
|
#ifndef CIRCUITPY_INCLUDED_SUPERVISOR_BACKGROUND_CALLBACK_H
|
||||||
#define CIRCUITPY_INCLUDED_SUPERVISOR_BACKGROUND_CALLBACK_H
|
#define CIRCUITPY_INCLUDED_SUPERVISOR_BACKGROUND_CALLBACK_H
|
||||||
|
|
||||||
|
#include "supervisor/port.h"
|
||||||
|
|
||||||
/** Background callbacks are a linked list of tasks to call in the background.
|
/** Background callbacks are a linked list of tasks to call in the background.
|
||||||
*
|
*
|
||||||
* Include a member of type `background_callback_t` inside an object
|
* Include a member of type `background_callback_t` inside an object
|
||||||
|
@ -84,4 +86,6 @@ void background_callback_end_critical_section(void);
|
||||||
*/
|
*/
|
||||||
void background_callback_gc_collect(void);
|
void background_callback_gc_collect(void);
|
||||||
|
|
||||||
|
uint64_t background_get_ticks(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -73,6 +73,9 @@ uint32_t *port_heap_get_top(void);
|
||||||
void port_set_saved_word(uint32_t);
|
void port_set_saved_word(uint32_t);
|
||||||
uint32_t port_get_saved_word(void);
|
uint32_t port_get_saved_word(void);
|
||||||
|
|
||||||
|
// Used to keep track of last time background was run
|
||||||
|
uint64_t get_background_ticks(void);
|
||||||
|
|
||||||
// Get the raw tick count since start up. A tick is 1/1024 of a second, a common low frequency
|
// Get the raw tick count since start up. A tick is 1/1024 of a second, a common low frequency
|
||||||
// clock rate. If subticks is not NULL then the port will fill in the number of subticks where each
|
// clock rate. If subticks is not NULL then the port will fill in the number of subticks where each
|
||||||
// tick is 32 subticks (for a resolution of 1/32768 or 30.5ish microseconds.)
|
// tick is 32 subticks (for a resolution of 1/32768 or 30.5ish microseconds.)
|
||||||
|
|
|
@ -37,6 +37,12 @@ STATIC volatile background_callback_t *callback_head, *callback_tail;
|
||||||
#define CALLBACK_CRITICAL_BEGIN (common_hal_mcu_disable_interrupts())
|
#define CALLBACK_CRITICAL_BEGIN (common_hal_mcu_disable_interrupts())
|
||||||
#define CALLBACK_CRITICAL_END (common_hal_mcu_enable_interrupts())
|
#define CALLBACK_CRITICAL_END (common_hal_mcu_enable_interrupts())
|
||||||
|
|
||||||
|
volatile uint64_t last_background_tick = 0;
|
||||||
|
|
||||||
|
uint64_t get_background_ticks(void) {
|
||||||
|
return last_background_tick;
|
||||||
|
}
|
||||||
|
|
||||||
void background_callback_add_core(background_callback_t *cb) {
|
void background_callback_add_core(background_callback_t *cb) {
|
||||||
CALLBACK_CRITICAL_BEGIN;
|
CALLBACK_CRITICAL_BEGIN;
|
||||||
if (cb->prev || callback_head == cb) {
|
if (cb->prev || callback_head == cb) {
|
||||||
|
@ -64,6 +70,7 @@ void background_callback_add(background_callback_t *cb, background_callback_fun
|
||||||
|
|
||||||
static bool in_background_callback;
|
static bool in_background_callback;
|
||||||
void background_callback_run_all() {
|
void background_callback_run_all() {
|
||||||
|
last_background_tick = port_get_raw_ticks(NULL);
|
||||||
if (!callback_head) {
|
if (!callback_head) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,8 +68,6 @@ static volatile uint64_t PLACE_IN_DTCM_BSS(background_ticks);
|
||||||
|
|
||||||
static background_callback_t tick_callback;
|
static background_callback_t tick_callback;
|
||||||
|
|
||||||
volatile uint64_t last_finished_tick = 0;
|
|
||||||
|
|
||||||
void supervisor_background_tasks(void *unused) {
|
void supervisor_background_tasks(void *unused) {
|
||||||
port_start_background_task();
|
port_start_background_task();
|
||||||
|
|
||||||
|
@ -93,13 +91,11 @@ void supervisor_background_tasks(void *unused) {
|
||||||
|
|
||||||
assert_heap_ok();
|
assert_heap_ok();
|
||||||
|
|
||||||
last_finished_tick = port_get_raw_ticks(NULL);
|
|
||||||
|
|
||||||
port_finish_background_task();
|
port_finish_background_task();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool supervisor_background_tasks_ok(void) {
|
bool supervisor_background_tasks_ok(void) {
|
||||||
return port_get_raw_ticks(NULL) - last_finished_tick < 1024;
|
return port_get_raw_ticks(NULL) - get_background_ticks() < 1024;
|
||||||
}
|
}
|
||||||
|
|
||||||
void supervisor_tick(void) {
|
void supervisor_tick(void) {
|
||||||
|
|
Loading…
Reference in New Issue