ESP32 I2S


I2S支持DMA;

I2S可以直接利用DAC來輸出模擬信號 (GPIO 25 & GPIO 26);

高精度時鍾使能參數:   .use_apll = true

 

ESP32配置外設一般都是配置一個結構體,I2S也不例外:

static const i2s_config_t i2s_config = { .mode = I2S_MODE_MASTER | I2S_MODE_TX, .sample_rate = 44100, .bits_per_sample = 16, .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT, .communication_format = I2S_COMM_FORMAT_I2S | I2S_COMM_FORMAT_I2S_MSB, .intr_alloc_flags = 0, // default interrupt priority .dma_buf_count = 8, .dma_buf_len = 64, .use_apll = false };

I2S可以經由多個GPIO輸出多路信號,但是輸入信號只能由一個GPIO輸入;

esp_err_t i2s_set_pin(i2s_port_t i2s_num,  const i2s_pin_config_t *pin)

這個函數有兩個參數,第一個參數就是I2S的接口號,第二個參數是pin_config的結構體初始化,如果第二個結構體參數是NULL的話,就默認設置GPIO25&GPIO26引腳,也就是說內置的兩個DAC都會被初始化;

 

下面這個API函數用於設置I2S的DAC模式,一般情況下I2S的內置DAC是被默認不激活的;

esp_err_ti2s_set_dac_mode(i2s_dac_mode_tdac_mode)

 內置的DAC至支持I2S1

 

下面這個API函數在I2S讀寫之前必須被引用,這個函數安裝I2S驅動:

esp_err_ti2s_driver_install(i2s_port_ti2s_numconsti2s_config_t *i2s_config, int queue_size, void *i2s_queue)

 

下面這個函數就是卸載I2S驅動,用完了就卸載:

esp_err_ti2s_driver_uninstall(i2s_port_ti2s_num)

 

下面這個函數用來向DMA寫數據,但是這個函數可能被官方取消,以后用I2S_write來取代:

int i2s_write_bytes(i2s_port_ti2s_numconst void *src, size_t size, TickType_t ticks_to_wait)

esp_err_ti2s_write(i2s_port_ti2s_numconst void *src, size_t size, size_t *bytes_written, TickType_t ticks_to_wait)

 

下面這個函數用於設置傳輸速率,RX&TX都管用哦,

 esp_err_ti2s_set_sample_rates(i2s_port_ti2s_num, uint32_t rate)

 

下面兩個函數分別是結束和開始I2S驅動:

 esp_err_ti2s_stop(i2s_port_ti2s_num)

 esp_err_ti2s_start(i2s_port_ti2s_num)

 

下面這個函數是清空I2S的DMA緩存:

 esp_err_ti2s_zero_dma_buffer(i2s_port_ti2s_num)

 

 

 

 

 

 

 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM