diff --git a/build/configs/rtl8730e/audio/defconfig b/build/configs/rtl8730e/audio/defconfig index 06ec369a1a..a111c4b125 100644 --- a/build/configs/rtl8730e/audio/defconfig +++ b/build/configs/rtl8730e/audio/defconfig @@ -176,6 +176,8 @@ CONFIG_AMEBASMART_I2S2=y # CONFIG_AMEBASMART_I2S_RX is not set CONFIG_AMEBASMART_I2S_TX=y CONFIG_AMEBASMART_I2S_TXCL=16 +CONFIG_AMEBASMART_I2S_TX_DMA_SIZE=4096 +CONFIG_AMEBASMART_I2S_TX_DMA_PAGE=4 # # Realtek RTL8730E WIFI Support diff --git a/build/configs/rtl8730e/flat_dev_ddr/defconfig b/build/configs/rtl8730e/flat_dev_ddr/defconfig index edbd5b4658..c6bdd96e3a 100644 --- a/build/configs/rtl8730e/flat_dev_ddr/defconfig +++ b/build/configs/rtl8730e/flat_dev_ddr/defconfig @@ -176,7 +176,8 @@ CONFIG_AMEBASMART_I2S2=y # CONFIG_AMEBASMART_I2S_RX is not set CONFIG_AMEBASMART_I2S_TX=y CONFIG_AMEBASMART_I2S_TXCL=32 - +CONFIG_AMEBASMART_I2S_TX_DMA_SIZE=4096 +CONFIG_AMEBASMART_I2S_TX_DMA_PAGE=4 # # Realtek RTL8730E WIFI Support # diff --git a/build/configs/rtl8730e/flat_dev_psram/defconfig b/build/configs/rtl8730e/flat_dev_psram/defconfig index f74a3e7eb7..6ed7c7c12b 100644 --- a/build/configs/rtl8730e/flat_dev_psram/defconfig +++ b/build/configs/rtl8730e/flat_dev_psram/defconfig @@ -176,7 +176,8 @@ CONFIG_AMEBASMART_I2S2=y # CONFIG_AMEBASMART_I2S_RX is not set CONFIG_AMEBASMART_I2S_TX=y CONFIG_AMEBASMART_I2S_TXCL=32 - +CONFIG_AMEBASMART_I2S_TX_DMA_SIZE=4096 +CONFIG_AMEBASMART_I2S_TX_DMA_PAGE=4 # # Realtek RTL8730E WIFI Support # diff --git a/build/configs/rtl8730e/loadable_audio/defconfig b/build/configs/rtl8730e/loadable_audio/defconfig index a3326291e9..49eb01abb8 100644 --- a/build/configs/rtl8730e/loadable_audio/defconfig +++ b/build/configs/rtl8730e/loadable_audio/defconfig @@ -186,7 +186,8 @@ CONFIG_AMEBASMART_I2S2=y # CONFIG_AMEBASMART_I2S_RX is not set CONFIG_AMEBASMART_I2S_TX=y CONFIG_AMEBASMART_I2S_TXCL=16 - +CONFIG_AMEBASMART_I2S_TX_DMA_SIZE=4096 +CONFIG_AMEBASMART_I2S_TX_DMA_PAGE=4 # # Realtek RTL8730E WIFI Support # diff --git a/build/configs/rtl8730e/loadable_ext_ddr/defconfig b/build/configs/rtl8730e/loadable_ext_ddr/defconfig index 06853c39f5..bcca38fe46 100644 --- a/build/configs/rtl8730e/loadable_ext_ddr/defconfig +++ b/build/configs/rtl8730e/loadable_ext_ddr/defconfig @@ -186,7 +186,8 @@ CONFIG_AMEBASMART_I2S2=y # CONFIG_AMEBASMART_I2S_RX is not set CONFIG_AMEBASMART_I2S_TX=y CONFIG_AMEBASMART_I2S_TXCL=16 - +CONFIG_AMEBASMART_I2S_TX_DMA_SIZE=4096 +CONFIG_AMEBASMART_I2S_TX_DMA_PAGE=4 # # Realtek RTL8730E WIFI Support # diff --git a/build/configs/rtl8730e/loadable_ext_psram/defconfig b/build/configs/rtl8730e/loadable_ext_psram/defconfig index 428cced657..0c8761b9e5 100644 --- a/build/configs/rtl8730e/loadable_ext_psram/defconfig +++ b/build/configs/rtl8730e/loadable_ext_psram/defconfig @@ -184,7 +184,8 @@ CONFIG_AMEBASMART_I2S2=y # CONFIG_AMEBASMART_I2S3 is not set # CONFIG_AMEBASMART_I2S_RX is not set CONFIG_AMEBASMART_I2S_TX=y - +CONFIG_AMEBASMART_I2S_TX_DMA_SIZE=4096 +CONFIG_AMEBASMART_I2S_TX_DMA_PAGE=4 # # Realtek RTL8730E WIFI Support # diff --git a/os/arch/arm/src/amebasmart/Kconfig b/os/arch/arm/src/amebasmart/Kconfig index b242e4dc57..09d9772154 100644 --- a/os/arch/arm/src/amebasmart/Kconfig +++ b/os/arch/arm/src/amebasmart/Kconfig @@ -182,6 +182,20 @@ config AMEBASMART_I2S_TXCL int "I2S TX Channel Length" default 32 range 8 32 + +config AMEBASMART_I2S_TX_DMA_SIZE + int "I2S TX DMA SIZE" + default 4096 + range 4 16384 + ---help--- + 4 ~ 16384, set to a factor of APB size + +config AMEBASMART_I2S_TX_DMA_PAGE + int "I2S TX DMA PAGE" + default 4 + ---help--- + DMA page should be more than 2 + endif endif diff --git a/os/arch/arm/src/amebasmart/amebasmart_i2s.c b/os/arch/arm/src/amebasmart/amebasmart_i2s.c index 66d0898951..767e79565b 100644 --- a/os/arch/arm/src/amebasmart/amebasmart_i2s.c +++ b/os/arch/arm/src/amebasmart/amebasmart_i2s.c @@ -119,8 +119,17 @@ #define OVER_SAMPLE_RATE (384U) -#define I2S_DMA_PAGE_SIZE 4096 /* 4 ~ 16384, set to a factor of APB size */ -#define I2S_DMA_PAGE_NUM 4 /* Vaild number is 2~4 */ +#ifdef CONFIG_AMEBASMART_I2S_TX_DMA_SIZE +#define I2S_DMA_PAGE_SIZE CONFIG_AMEBASMART_I2S_TX_DMA_SIZE /* 4 ~ 16384, set to a factor of APB size */ +#else +#define I2S_DMA_PAGE_SIZE 4096 /* 4 ~ 16384, set to a factor of APB size */ +#endif + +#ifdef CONFIG_AMEBASMART_I2S_TX_DMA_PAGE +#define I2S_DMA_PAGE_NUM CONFIG_AMEBASMART_I2S_TX_DMA_PAGE /* Minimum number is 2 */ +#else +#define I2S_DMA_PAGE_NUM 4 +#endif #ifdef CONFIG_PM static volatile bool i2s_lock_state = 0; diff --git a/os/board/rtl8730e/src/component/mbed/targets/hal/rtl8730e/i2s_api.c b/os/board/rtl8730e/src/component/mbed/targets/hal/rtl8730e/i2s_api.c index 7253db97e7..4cbf269ae6 100755 --- a/os/board/rtl8730e/src/component/mbed/targets/hal/rtl8730e/i2s_api.c +++ b/os/board/rtl8730e/src/component/mbed/targets/hal/rtl8730e/i2s_api.c @@ -20,8 +20,11 @@ #include "ameba_audio_clock.h" #include "amebasmart_i2s.h" +#ifdef CONFIG_AMEBASMART_I2S_TX_DMA_PAGE +#define SP_MAX_DMA_PAGE_NUM (CONFIG_AMEBASMART_I2S_TX_DMA_PAGE + 1) +#else #define SP_MAX_DMA_PAGE_NUM 8 - +#endif /** @addtogroup Ameba_Mbed_API * @{ */ @@ -220,8 +223,8 @@ void i2s_set_dma_buffer(i2s_t *obj, char *tx_buf, char *rx_buf, uint32_t i, j; #endif - if ((page_num < 2) || (page_num > 8) || (page_size < 8)) { - DBG_PRINTF(MODULE_I2S, LEVEL_INFO, "%s: PageNum(%d) valid value is 2~8; PageSize(%d must > 8)\r\n", \ + if ((page_num < 2) || (page_num > (SP_MAX_DMA_PAGE_NUM - 1)) || (page_size < 4)) { + DBG_PRINTF(MODULE_I2S, LEVEL_INFO, "%s: PageNum(%d) valid value is > 2 and less than SP_MAX_DMA_PAGE_NUM; PageSize(%d must > 4)\r\n", \ __FUNCTION__, page_num, page_size); return; }