Merge pull request #3710 from jepler/esp32-i2c-crash

esp32: Two random changes that also fixed the I2C crash for me
This commit is contained in:
Scott Shawcroft 2020-11-17 17:11:41 -08:00 committed by GitHub
commit 18513dedd1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 7 deletions

View File

@ -77,7 +77,9 @@ void pulsein_reset(void) {
for (size_t i = 0; i < RMT_CHANNEL_MAX; i++) { for (size_t i = 0; i < RMT_CHANNEL_MAX; i++) {
handles[i] = NULL; handles[i] = NULL;
} }
supervisor_disable_tick(); if (refcount != 0) {
supervisor_disable_tick();
}
refcount = 0; refcount = 0;
} }
@ -122,8 +124,10 @@ void common_hal_pulseio_pulsein_construct(pulseio_pulsein_obj_t* self, const mcu
// start RMT RX, and enable ticks so the core doesn't turn off. // start RMT RX, and enable ticks so the core doesn't turn off.
rmt_rx_start(channel, true); rmt_rx_start(channel, true);
supervisor_enable_tick();
refcount++; refcount++;
if (refcount == 1) {
supervisor_enable_tick();
}
} }
bool common_hal_pulseio_pulsein_deinited(pulseio_pulsein_obj_t* self) { bool common_hal_pulseio_pulsein_deinited(pulseio_pulsein_obj_t* self) {

View File

@ -191,14 +191,14 @@ uint32_t port_get_saved_word(void) {
} }
uint64_t port_get_raw_ticks(uint8_t* subticks) { uint64_t port_get_raw_ticks(uint8_t* subticks) {
struct timeval tv_now; // Convert microseconds to subticks of 1/32768 seconds
gettimeofday(&tv_now, NULL); // 32768/1000000 = 64/15625 in lowest terms
// convert usec back to ticks // this arithmetic overflows after 570 years
uint64_t all_subticks = (uint64_t)(tv_now.tv_usec * 2) / 71; int64_t all_subticks = esp_timer_get_time() * 512 / 15625;
if (subticks != NULL) { if (subticks != NULL) {
*subticks = all_subticks % 32; *subticks = all_subticks % 32;
} }
return (uint64_t)tv_now.tv_sec * 1024L + all_subticks / 32; return all_subticks / 32;
} }
// Enable 1/1024 second tick. // Enable 1/1024 second tick.