add timer peripheral
This commit is contained in:
parent
18e463cca5
commit
ff987e7496
@ -188,6 +188,7 @@ SRC_C += \
|
||||
lib/utils/pyexec.c \
|
||||
lib/utils/stdout_helpers.c \
|
||||
lib/utils/sys_stdio_mphal.c \
|
||||
peripherals/timer.c \
|
||||
peripherals/pcnt.c \
|
||||
peripherals/pins.c \
|
||||
peripherals/rmt.c \
|
||||
|
73
ports/esp32s2/peripherals/timer.c
Normal file
73
ports/esp32s2/peripherals/timer.c
Normal file
@ -0,0 +1,73 @@
|
||||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2020 microDev
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "peripherals/timer.h"
|
||||
|
||||
#define TIMER_FREE 1
|
||||
#define TIMER_BUSY 0
|
||||
|
||||
static uint8_t timer_state[2][2];
|
||||
|
||||
void peripherals_timer_reset(void) {
|
||||
timer_index_t timer;
|
||||
for (uint8_t i = 0; i < 2; i++) {
|
||||
for (uint8_t j = 0; j < 2; j++) {
|
||||
if (timer_state[i][j] == TIMER_BUSY) {
|
||||
timer.idx = (timer_idx_t)j;
|
||||
timer.group = (timer_group_t)i;
|
||||
timer_state[i][j] = TIMER_FREE;
|
||||
peripherals_timer_deinit(&timer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void peripherals_timer_init(const timer_config_t * config, timer_index_t * timer) {
|
||||
// get free timer
|
||||
for (uint8_t i = 0; i < 2; i++) {
|
||||
for (uint8_t j = 0; j < 2; j++) {
|
||||
if (timer_state[i][j] == TIMER_FREE) {
|
||||
timer->idx = (timer_idx_t)j;
|
||||
timer->group = (timer_group_t)i;
|
||||
timer_state[i][j] = TIMER_BUSY;
|
||||
goto init_timer;
|
||||
} else if (i == 1 && j == 1) {
|
||||
timer->idx = TIMER_MAX;
|
||||
timer->group = TIMER_GROUP_MAX;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
init_timer:
|
||||
// initialize timer module
|
||||
timer_init(timer->group, timer->idx, config);
|
||||
timer_set_counter_value(timer->group, timer->idx, 0);
|
||||
}
|
||||
|
||||
void peripherals_timer_deinit(timer_index_t * timer) {
|
||||
timer_deinit(timer->group, timer->idx);
|
||||
}
|
41
ports/esp32s2/peripherals/timer.h
Normal file
41
ports/esp32s2/peripherals/timer.h
Normal file
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2020 microDev
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef MICROPY_INCLUDED_ESP32S2_PERIPHERALS_TIMER_HANDLER_H
|
||||
#define MICROPY_INCLUDED_ESP32S2_PERIPHERALS_TIMER_HANDLER_H
|
||||
|
||||
#include "driver/timer.h"
|
||||
|
||||
typedef struct {
|
||||
timer_idx_t idx;
|
||||
timer_group_t group;
|
||||
} timer_index_t;
|
||||
|
||||
extern void peripherals_timer_init(const timer_config_t * config, timer_index_t * timer);
|
||||
extern void peripherals_timer_deinit(timer_index_t * timer);
|
||||
extern void peripherals_timer_reset(void);
|
||||
|
||||
#endif // MICROPY_INCLUDED_ESP32S2_PERIPHERALS_TIMER_HANDLER_H
|
@ -50,6 +50,7 @@
|
||||
|
||||
#include "peripherals/rmt.h"
|
||||
#include "peripherals/pcnt.h"
|
||||
#include "peripherals/timer.h"
|
||||
#include "components/heap/include/esp_heap_caps.h"
|
||||
#include "components/soc/soc/esp32s2/include/soc/cache_memory.h"
|
||||
|
||||
@ -103,15 +104,6 @@ void reset_port(void) {
|
||||
analogout_reset();
|
||||
#endif
|
||||
|
||||
#if CIRCUITPY_PULSEIO
|
||||
esp32s2_peripherals_rmt_reset();
|
||||
pulsein_reset();
|
||||
#endif
|
||||
|
||||
#if CIRCUITPY_PWMIO
|
||||
pwmout_reset();
|
||||
#endif
|
||||
|
||||
#if CIRCUITPY_BUSIO
|
||||
i2c_reset();
|
||||
spi_reset();
|
||||
@ -122,6 +114,19 @@ void reset_port(void) {
|
||||
peripherals_pcnt_reset();
|
||||
#endif
|
||||
|
||||
#if CIRCUITPY_FREQUENCYIO
|
||||
peripherals_timer_reset();
|
||||
#endif
|
||||
|
||||
#if CIRCUITPY_PULSEIO
|
||||
esp32s2_peripherals_rmt_reset();
|
||||
pulsein_reset();
|
||||
#endif
|
||||
|
||||
#if CIRCUITPY_PWMIO
|
||||
pwmout_reset();
|
||||
#endif
|
||||
|
||||
#if CIRCUITPY_RTC
|
||||
rtc_reset();
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user