【发布时间】:2019-07-28 14:59:01
【问题描述】:
我正在尝试使用 I2S 和内部 DAC 在 Heltec WiFi LoRa 32 V2 上使用 Arduino IDE 播放来自 SPIFF 的 WAV 文件。
我有一个音频放大器和一个示波器连接到电路板的 DAC2(引脚 25),但我没有收到任何信号。我通过生成正弦波来简化问题(如 ESP-IDF 示例中所示)。代码如下:
#include <Streaming.h>
#include <driver/i2s.h>
#include "freertos/queue.h"
#define SAMPLE_RATE (22050)
#define SAMPLE_SIZE 4000
#define PI (3.14159265)
#define I2S_BCK_IO (GPIO_NUM_26)
#define I2S_WS_IO (GPIO_NUM_25)
#define I2S_DO_IO (GPIO_NUM_22)
#define I2S_DI_IO (-1)
size_t i2s_bytes_write = 0;
static const int i2s_num = 0;
int sample_data[SAMPLE_SIZE];
i2s_config_t i2s_config = {
.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_DAC_BUILT_IN), // Only TX
.sample_rate = SAMPLE_RATE,
.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT, //2-channels
.communication_format = (i2s_comm_format_t)I2S_COMM_FORMAT_I2S,
.intr_alloc_flags = 0,//ESP_INTR_FLAG_LEVEL1
.dma_buf_count = 8,
.dma_buf_len = 64,
.use_apll = false //Interrupt level 1
};
i2s_pin_config_t pin_config = {
.bck_io_num = I2S_BCK_IO,
.ws_io_num = I2S_WS_IO,
.data_out_num = I2S_DO_IO,
.data_in_num = I2S_DI_IO //Not used
};
static void setup_sine_wave()
{
unsigned int i;
int sample_val;
double sin_float;
size_t i2s_bytes_write = 0;
for (i = 0; i < SAMPLE_SIZE; i++)
{
sin_float = sin(i * PI / 180.0);
sin_float *= 127;
sample_val = (uint8_t)sin_float;
sample_data[i] = sample_val;
Serial << sample_data[i] << ",";
delay(1);
}
Serial << endl << "Sine wave generation complete" << endl;
}
void setup() {
pinMode(26, OUTPUT);
Serial.begin(115200);
i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);
//i2s_set_pin(I2S_NUM_0, NULL);
i2s_set_pin(I2S_NUM_0, &pin_config);
i2s_set_dac_mode(I2S_DAC_CHANNEL_RIGHT_EN);
i2s_set_sample_rates(I2S_NUM_0, 22050); //set sample rates
setup_sine_wave();
i2s_set_clk(I2S_NUM_0, SAMPLE_RATE, I2S_BITS_PER_SAMPLE_16BIT, I2S_CHANNEL_MONO);
i2s_write(I2S_NUM_0, &sample_data, SAMPLE_SIZE, &i2s_bytes_write, 500);
i2s_driver_uninstall(I2S_NUM_0); //stop & destroy i2s driver
}
void loop()
{
i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);
i2s_write(I2S_NUM_0, &sample_data, SAMPLE_SIZE, &i2s_bytes_write, 500);
delay(100);
i2s_driver_uninstall(I2S_NUM_0);
delay(10);
}
代码上传并运行正常,但引脚 25 上仍然没有信号。我还查看了引脚 26 (DAC1),但它似乎被 LoRa_IRQ 使用。谁能帮帮我?
【问题讨论】: