forked from Makuna/NeoPixelBus
@@ -127,7 +127,7 @@ public:
|
||||
ESP_ERROR_CHECK(ret);
|
||||
}
|
||||
free(_data);
|
||||
free(_dmadata);
|
||||
heap_caps_free(_dmadata);
|
||||
_spiHandle = NULL;
|
||||
}
|
||||
|
||||
|
@@ -126,6 +126,7 @@ static i2s_bus_t I2S[I2S_NUM_MAX] = {
|
||||
|
||||
void IRAM_ATTR i2sDmaISR(void* arg);
|
||||
|
||||
|
||||
bool i2sInitDmaItems(uint8_t bus_num) {
|
||||
if (bus_num >= I2S_NUM_MAX) {
|
||||
return false;
|
||||
@@ -170,13 +171,29 @@ bool i2sInitDmaItems(uint8_t bus_num) {
|
||||
I2S[bus_num].tx_queue = xQueueCreate(I2S_DMA_QUEUE_COUNT, sizeof(i2s_dma_item_t*));
|
||||
if (I2S[bus_num].tx_queue == NULL) {// memory error
|
||||
log_e("MEM ERROR!");
|
||||
free(I2S[bus_num].dma_items);
|
||||
heap_caps_free(I2S[bus_num].dma_items);
|
||||
I2S[bus_num].dma_items = NULL;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool i2sDeinitDmaItems(uint8_t bus_num) {
|
||||
if (bus_num >= I2S_NUM_MAX) {
|
||||
return false;
|
||||
}
|
||||
if (!I2S[bus_num].tx_queue) {
|
||||
return false; // nothing to deinit
|
||||
}
|
||||
|
||||
vQueueDelete(I2S[bus_num].tx_queue);
|
||||
I2S[bus_num].tx_queue = NULL;
|
||||
heap_caps_free(I2S[bus_num].dma_items);
|
||||
I2S[bus_num].dma_items = NULL;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
esp_err_t i2sSetClock(uint8_t bus_num, uint8_t div_num, uint8_t div_b, uint8_t div_a, uint8_t bck, uint8_t bits) {
|
||||
if (bus_num >= I2S_NUM_MAX || div_a > 63 || div_b > 63 || bck > 63) {
|
||||
return ESP_FAIL;
|
||||
@@ -381,6 +398,10 @@ void i2sInit(uint8_t bus_num,
|
||||
esp_intr_enable(I2S[bus_num].isr_handle);
|
||||
}
|
||||
|
||||
void i2sDeinit(uint8_t bus_num) {
|
||||
i2sDeinitDmaItems(bus_num);
|
||||
}
|
||||
|
||||
esp_err_t i2sSetSampleRate(uint8_t bus_num, uint32_t rate, uint8_t bits) {
|
||||
if (bus_num >= I2S_NUM_MAX) {
|
||||
return ESP_FAIL;
|
||||
|
@@ -27,6 +27,8 @@ void i2sInit(uint8_t bus_num,
|
||||
size_t dma_count,
|
||||
size_t dma_len);
|
||||
|
||||
void i2sDeinit(uint8_t bus_num);
|
||||
|
||||
void i2sSetPins(uint8_t bus_num, int8_t out, bool invert);
|
||||
|
||||
esp_err_t i2sSetClock(uint8_t bus_num, uint8_t div_num, uint8_t div_b, uint8_t div_a, uint8_t bck, uint8_t bits_per_sample);
|
||||
|
@@ -170,9 +170,9 @@ public:
|
||||
}
|
||||
|
||||
i2sSetPins(_bus.I2sBusNumber, -1, false);
|
||||
|
||||
i2sDeinit(_bus.I2sBusNumber);
|
||||
free(_data);
|
||||
free(_i2sBuffer);
|
||||
heap_caps_free(_i2sBuffer);
|
||||
}
|
||||
|
||||
bool IsReadyToUpdate() const
|
||||
|
Reference in New Issue
Block a user