bugfix(driver): fix i2s and timergroup some issues
* fix i2s and timergroup dev array used by isr crash issue * Closes IDFGH-2432 * Closes https://github.com/espressif/esp-idf/issues/4545 * fix i2s adc data inv issue * Closes IDFGH-2444 * Closes https://github.com/espressif/esp-idf/issues/4557
This commit is contained in:
parent
6784b2bcd5
commit
4a9fc1026a
3 changed files with 6 additions and 2 deletions
|
@ -90,7 +90,8 @@ typedef struct {
|
||||||
} i2s_obj_t;
|
} i2s_obj_t;
|
||||||
|
|
||||||
static i2s_obj_t *p_i2s_obj[I2S_NUM_MAX] = {0};
|
static i2s_obj_t *p_i2s_obj[I2S_NUM_MAX] = {0};
|
||||||
static i2s_dev_t* I2S[I2S_NUM_MAX] = {&I2S0, &I2S1};
|
/* DRAM_ATTR is required to avoid I2S array placed in flash, due to accessed from ISR */
|
||||||
|
static DRAM_ATTR i2s_dev_t* I2S[I2S_NUM_MAX] = {&I2S0, &I2S1};
|
||||||
static portMUX_TYPE i2s_spinlock[I2S_NUM_MAX] = {portMUX_INITIALIZER_UNLOCKED, portMUX_INITIALIZER_UNLOCKED};
|
static portMUX_TYPE i2s_spinlock[I2S_NUM_MAX] = {portMUX_INITIALIZER_UNLOCKED, portMUX_INITIALIZER_UNLOCKED};
|
||||||
static int _i2s_adc_unit = -1;
|
static int _i2s_adc_unit = -1;
|
||||||
static int _i2s_adc_channel = -1;
|
static int _i2s_adc_channel = -1;
|
||||||
|
|
|
@ -1183,10 +1183,12 @@ esp_err_t adc_set_data_inv(adc_unit_t adc_unit, bool inv_en)
|
||||||
if (adc_unit & ADC_UNIT_1) {
|
if (adc_unit & ADC_UNIT_1) {
|
||||||
// Enable ADC data invert
|
// Enable ADC data invert
|
||||||
SENS.sar_read_ctrl.sar1_data_inv = inv_en;
|
SENS.sar_read_ctrl.sar1_data_inv = inv_en;
|
||||||
|
SYSCON.saradc_ctrl2.sar1_inv = inv_en;
|
||||||
}
|
}
|
||||||
if (adc_unit & ADC_UNIT_2) {
|
if (adc_unit & ADC_UNIT_2) {
|
||||||
// Enable ADC data invert
|
// Enable ADC data invert
|
||||||
SENS.sar_read_ctrl2.sar2_data_inv = inv_en;
|
SENS.sar_read_ctrl2.sar2_data_inv = inv_en;
|
||||||
|
SYSCON.saradc_ctrl2.sar2_inv = inv_en;
|
||||||
}
|
}
|
||||||
portEXIT_CRITICAL(&rtc_spinlock);
|
portEXIT_CRITICAL(&rtc_spinlock);
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
|
|
|
@ -36,7 +36,8 @@ static const char* TIMER_TAG = "timer_group";
|
||||||
#define TIMER_SCALE_ERROR "HW TIMER SCALE ERROR"
|
#define TIMER_SCALE_ERROR "HW TIMER SCALE ERROR"
|
||||||
#define TIMER_ALARM_ERROR "HW TIMER ALARM ERROR"
|
#define TIMER_ALARM_ERROR "HW TIMER ALARM ERROR"
|
||||||
#define DIVIDER_RANGE_ERROR "HW TIMER divider outside of [2, 65536] range error"
|
#define DIVIDER_RANGE_ERROR "HW TIMER divider outside of [2, 65536] range error"
|
||||||
static timg_dev_t *TG[2] = {&TIMERG0, &TIMERG1};
|
/* DRAM_ATTR is required to avoid TG array placed in flash, due to accessed from ISR */
|
||||||
|
static DRAM_ATTR timg_dev_t *TG[2] = {&TIMERG0, &TIMERG1};
|
||||||
static portMUX_TYPE timer_spinlock[TIMER_GROUP_MAX] = {portMUX_INITIALIZER_UNLOCKED, portMUX_INITIALIZER_UNLOCKED};
|
static portMUX_TYPE timer_spinlock[TIMER_GROUP_MAX] = {portMUX_INITIALIZER_UNLOCKED, portMUX_INITIALIZER_UNLOCKED};
|
||||||
|
|
||||||
#define TIMER_ENTER_CRITICAL(mux) portENTER_CRITICAL(mux);
|
#define TIMER_ENTER_CRITICAL(mux) portENTER_CRITICAL(mux);
|
||||||
|
|
Loading…
Reference in a new issue