Sfoglia il codice sorgente

add:添加luat_i2s_modify

Dozingfiretruck 2 anni fa
parent
commit
ba8a56c45d
3 ha cambiato i file con 23 aggiunte e 5 eliminazioni
  1. 13 0
      app/port/luat_i2s_air101.c
  2. 5 0
      include/driver/wm_i2s.h
  3. 5 5
      platform/drivers/i2s/wm_i2s.c

+ 13 - 0
app/port/luat_i2s_air101.c

@@ -116,6 +116,19 @@ int luat_i2s_setup(luat_i2s_conf_t *conf) {
     return 0;
 }
 
+int luat_i2s_modify(uint8_t id,uint8_t channel_format,uint8_t data_bits,uint32_t sample_rate){
+	if (id != 0) return -1;
+	i2s_conf.channel_format = channel_format;
+	i2s_conf.data_bits = data_bits;
+	i2s_conf.sample_rate = sample_rate;
+	wm_i2s_mono_select(channel_format==LUAT_I2S_CHANNEL_STEREO?I2S_CTRL_STEREO:I2S_CTRL_MONO);
+	wm_i2s_left_channel_sel(channel_format==0?I2S_LEFT_CHANNEL:I2S_RIGHT_CHANNEL);
+	wm_i2s_set_word_len((data_bits/8 - 1)*0x10);
+	wm_i2s_set_freq(sample_rate, 2*256*sample_rate);
+	return 0;
+}
+
+
 int luat_i2s_send(uint8_t id, uint8_t* buff, size_t len) {
 	int ret;
     if (buff == NULL) {

+ 5 - 0
include/driver/wm_i2s.h

@@ -289,6 +289,11 @@ int wm_i2s_tx_rx_dma(I2S_InitDef *opts, int16_t *data_tx, int16_t *data_rx, uint
 int wm_i2s_transmit_dma(wm_dma_handler_type *hdma, uint16_t *data, uint16_t len);
 int wm_i2s_receive_dma(wm_dma_handler_type *hdma, uint16_t *data, uint16_t len);
 
+void wm_i2s_mono_select(bool bl);
+void wm_i2s_left_channel_sel(bool bl);
+void wm_i2s_set_word_len(uint8_t len);
+void wm_i2s_set_freq(uint32_t lr_freq, uint32_t mclk);
+
 /**
  * @}
  */

+ 5 - 5
platform/drivers/i2s/wm_i2s.c

@@ -33,7 +33,7 @@ static uint32_t wm_i2s_get_mode(void)
 #endif
 
 //i2s_stardard
-static void wm_i2s_set_format(uint32_t format)
+void wm_i2s_set_format(uint32_t format)
 {
 	uint32_t reg;
 	reg = tls_reg_read32(HR_I2S_CTRL);
@@ -42,12 +42,12 @@ static void wm_i2s_set_format(uint32_t format)
 	tls_reg_write32(HR_I2S_CTRL, reg);
 }
 
-static void wm_i2s_left_channel_sel(bool bl)
+void wm_i2s_left_channel_sel(bool bl)
 {
 	tls_bitband_write(HR_I2S_CTRL, 23, bl);
 }
 
-static void wm_i2s_mono_select(bool bl)
+void wm_i2s_mono_select(bool bl)
 {
 	tls_bitband_write(HR_I2S_CTRL, 22, bl);
 }
@@ -120,7 +120,7 @@ static void wm_i2s_clk_inverse(bool bl)
 }
 #endif
 
-static void wm_i2s_set_word_len(uint8_t len)
+void wm_i2s_set_word_len(uint8_t len)
 {
 	uint32_t reg;
     
@@ -209,7 +209,7 @@ static void wm_i2s_rx_uderflow_int_mask(bool bl)
 }
 #endif
 
-static void wm_i2s_set_freq(uint32_t lr_freq, uint32_t mclk) 
+void wm_i2s_set_freq(uint32_t lr_freq, uint32_t mclk) 
 {
 	uint32_t div, mclk_div;
 	uint32_t temp;