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++) {
handles[i] = NULL;
}
supervisor_disable_tick();
if (refcount != 0) {
supervisor_disable_tick();
}
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.
rmt_rx_start(channel, true);
supervisor_enable_tick();
refcount++;
if (refcount == 1) {
supervisor_enable_tick();
}
}
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) {
struct timeval tv_now;
gettimeofday(&tv_now, NULL);
// convert usec back to ticks
uint64_t all_subticks = (uint64_t)(tv_now.tv_usec * 2) / 71;
// Convert microseconds to subticks of 1/32768 seconds
// 32768/1000000 = 64/15625 in lowest terms
// this arithmetic overflows after 570 years
int64_t all_subticks = esp_timer_get_time() * 512 / 15625;
if (subticks != NULL) {
*subticks = all_subticks % 32;
}
return (uint64_t)tv_now.tv_sec * 1024L + all_subticks / 32;
return all_subticks / 32;
}
// Enable 1/1024 second tick.