Lines Matching full:dma

85  * @brief DMA buffer object
106 uint32_t last_buf_size; /*!< DMA last buffer size */
107 i2s_dma_t *tx; /*!< DMA Tx buffer*/
108 i2s_dma_t *rx; /*!< DMA Rx buffer*/
156 I2S DMA operation
242 ESP_EARLY_LOGE(TAG, "dma error, interrupt status: 0x%08x", status); in i2s_intr_handler_default()
333 …OR(gdma_new_channel(&dma_cfg, &p_i2s[i2s_num]->tx_dma_chan), TAG, "Register tx dma channel error"); in i2s_dma_intr_init()
334 …ESP_RETURN_ON_ERROR(gdma_connect(p_i2s[i2s_num]->tx_dma_chan, trig), TAG, "Connect tx dma channel … in i2s_dma_intr_init()
342 …OR(gdma_new_channel(&dma_cfg, &p_i2s[i2s_num]->rx_dma_chan), TAG, "Register rx dma channel error"); in i2s_dma_intr_init()
343 …ESP_RETURN_ON_ERROR(gdma_connect(p_i2s[i2s_num]->rx_dma_chan, trig), TAG, "Connect rx dma channel … in i2s_dma_intr_init()
437 //start DMA link in i2s_start()
483 /* The DMA buffer limitation is 4092 bytes */ in i2s_get_buf_size()
492 ESP_RETURN_ON_FALSE(dma_obj, ESP_ERR_INVALID_ARG, TAG, "I2S DMA object can't be NULL"); in i2s_delete_dma_buffer()
511 ESP_GOTO_ON_FALSE(dma_obj, ESP_ERR_INVALID_ARG, err, TAG, "I2S DMA object can't be NULL"); in i2s_alloc_dma_buffer()
515 /* Allocate DMA buffer */ in i2s_alloc_dma_buffer()
517 ESP_GOTO_ON_FALSE(dma_obj->buf[cnt], ESP_ERR_NO_MEM, err, TAG, "Error malloc dma buffer"); in i2s_alloc_dma_buffer()
518 /* Initialize DMA buffer to 0 */ in i2s_alloc_dma_buffer()
521 /* Allocate DMA descpriptor */ in i2s_alloc_dma_buffer()
523 …ESP_GOTO_ON_FALSE(dma_obj->desc[cnt], ESP_ERR_NO_MEM, err, TAG, "Error malloc dma description ent… in i2s_alloc_dma_buffer()
525 …/* DMA descriptor must be initialize after all descriptor has been created, otherwise they can't b… in i2s_alloc_dma_buffer()
527 /* Initialize DMA descriptor */ in i2s_alloc_dma_buffer()
541 …ESP_LOGD(TAG, "DMA Malloc info, datalen=blocksize=%d, dma_desc_num=%"PRIu32, dma_obj->buf_size, bu… in i2s_alloc_dma_buffer()
544 /* Delete DMA buffer if failed to allocate memory */ in i2s_alloc_dma_buffer()
551 ESP_RETURN_ON_FALSE(dma_obj, ESP_ERR_INVALID_ARG, TAG, "I2S DMA object can't be NULL"); in i2s_realloc_dma_buffer()
553 /* Destroy old dma descriptor and buffer */ in i2s_realloc_dma_buffer()
555 /* Alloc new dma descriptor and buffer */ in i2s_realloc_dma_buffer()
556 … ESP_RETURN_ON_ERROR(i2s_alloc_dma_buffer(i2s_num, dma_obj), TAG, "Failed to allocate dma buffer"); in i2s_realloc_dma_buffer()
561 static esp_err_t i2s_destroy_dma_object(i2s_port_t i2s_num, i2s_dma_t **dma) in i2s_destroy_dma_object() argument
563 /* Check if DMA truely need destroy */ in i2s_destroy_dma_object()
565 if (!(*dma)) { in i2s_destroy_dma_object()
569 i2s_delete_dma_buffer(i2s_num, (*dma)); in i2s_destroy_dma_object()
571 if ((*dma)->desc) { in i2s_destroy_dma_object()
572 free((*dma)->desc); in i2s_destroy_dma_object()
573 (*dma)->desc = NULL; in i2s_destroy_dma_object()
576 if ((*dma)->buf) { in i2s_destroy_dma_object()
577 free((*dma)->buf); in i2s_destroy_dma_object()
578 (*dma)->buf = NULL; in i2s_destroy_dma_object()
580 /* Delete DMA mux */ in i2s_destroy_dma_object()
581 vSemaphoreDelete((*dma)->mux); in i2s_destroy_dma_object()
582 /* Delete DMA queue */ in i2s_destroy_dma_object()
583 vQueueDelete((*dma)->queue); in i2s_destroy_dma_object()
584 /* Free DMA structure */ in i2s_destroy_dma_object()
585 free(*dma); in i2s_destroy_dma_object()
586 *dma = NULL; in i2s_destroy_dma_object()
587 ESP_LOGD(TAG, "DMA queue destroyed"); in i2s_destroy_dma_object()
591 static esp_err_t i2s_create_dma_object(i2s_port_t i2s_num, i2s_dma_t **dma) in i2s_create_dma_object() argument
593 ESP_RETURN_ON_FALSE(dma, ESP_ERR_INVALID_ARG, TAG, "DMA object secondary pointer is NULL"); in i2s_create_dma_object()
594 ESP_RETURN_ON_FALSE((*dma == NULL), ESP_ERR_INVALID_ARG, TAG, "DMA object has been created"); in i2s_create_dma_object()
596 /* Allocate new DMA structure */ in i2s_create_dma_object()
597 *dma = (i2s_dma_t *) calloc(1, sizeof(i2s_dma_t)); in i2s_create_dma_object()
598 ESP_RETURN_ON_FALSE(*dma, ESP_ERR_NO_MEM, TAG, "DMA object allocate failed"); in i2s_create_dma_object()
599 /* Allocate DMA buffer poiter */ in i2s_create_dma_object()
600 (*dma)->buf = (char **)heap_caps_calloc(buf_cnt, sizeof(char *), MALLOC_CAP_DMA); in i2s_create_dma_object()
601 if (!(*dma)->buf) { in i2s_create_dma_object()
604 /* Allocate secondary pointer of DMA descriptor chain */ in i2s_create_dma_object()
605 (*dma)->desc = (lldesc_t **)heap_caps_calloc(buf_cnt, sizeof(lldesc_t *), MALLOC_CAP_DMA); in i2s_create_dma_object()
606 if (!(*dma)->desc) { in i2s_create_dma_object()
610 (*dma)->queue = xQueueCreate(buf_cnt - 1, sizeof(char *)); in i2s_create_dma_object()
611 if (!(*dma)->queue) { in i2s_create_dma_object()
614 (*dma)->mux = xSemaphoreCreateMutex(); in i2s_create_dma_object()
615 if (!(*dma)->mux) { in i2s_create_dma_object()
621 ESP_LOGE(TAG, "I2S DMA object create failed, preparing to uninstall"); in i2s_create_dma_object()
622 /* Destroy DMA queue if failed to allocate memory */ in i2s_create_dma_object()
623 i2s_destroy_dma_object(i2s_num, dma); in i2s_create_dma_object()
928 /* Check the size of DMA buffer */ in i2s_check_cfg_validity()
1106 ESP_RETURN_ON_ERROR(ret, TAG, "I2S%d tx DMA buffer malloc failed", i2s_num); in i2s_set_clk()
1112 ESP_RETURN_ON_ERROR(ret, TAG, "I2S%d rx DMA buffer malloc failed", i2s_num); in i2s_set_clk()
1216 /* Create DMA object */ in i2s_dma_object_init()
1218 …ESP_RETURN_ON_ERROR(i2s_create_dma_object(i2s_num, &p_i2s[i2s_num]->tx), TAG, "I2S TX DMA object c… in i2s_dma_object_init()
1222 …ESP_RETURN_ON_ERROR(i2s_create_dma_object(i2s_num, &p_i2s[i2s_num]->rx), TAG, "I2S RX DMA object c… in i2s_dma_object_init()
1474 ESP_RETURN_ON_ERROR(i2s_dma_object_init(i2s_num), TAG, "I2S dma object create failed"); in i2s_init_legacy()
1476 …ROR(i2s_realloc_dma_buffer(i2s_num, p_i2s[i2s_num]->tx), TAG, "Allocate I2S dma tx buffer failed"); in i2s_init_legacy()
1479 …ROR(i2s_realloc_dma_buffer(i2s_num, p_i2s[i2s_num]->rx), TAG, "Allocate I2S dma rx buffer failed"); in i2s_init_legacy()
1482 /* Initialize I2S DMA object */ in i2s_init_legacy()
1530 /* Destroy dma object if exist */ in i2s_driver_uninstall()
1826 /* Clear I2S RX DMA buffer */ in i2s_zero_dma_buffer()
1833 /* Clear I2S TX DMA buffer */ in i2s_zero_dma_buffer()