完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在将我的应用程序从存储在 SD 卡上的 wav 文件中读取的数据传递给 I2S 驱动程序时遇到问题。虽然我做的一切都是正确的,但我无法摆脱错误,并且板 (Adafruit Huzzah32) 不断重置。
我知道该代码没有重大问题,因为它最初是为另一个具有 I2S 接口的微控制器开发的,并且经过验证可以正常工作。现在我想将相同的代码移植到 ESP32。我尝试使用音频库 ( https://github.com/schreibfaul1/ESP32-audioI2S ) 进行设置,它工作正常,因此我知道我的设置在布线方面可以通过 I2S 播放声音。 I2S 配置如下所示: 代码:全选 // configure the ESP32's I2S interface m_i2s_config.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT; m_i2s_config.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT; // memory (SRAM) allocated to I2S buffer: (bits_per_sample/8)*channels*dma_buf_count*dmu_buf_len m_i2s_config.dma_buf_count = 2; // between 2 and 128 (see error code 283) m_i2s_config.dma_buf_len = I2S_BUF_SIZE*2; // number of I2S samples, multiplied by 2 due to 16bit samples stored on 32bit (L/R) m_i2s_config.fixed_mclk = I2S_PIN_NO_CHANGE; m_i2s_config.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1; // interrupt priority m_i2s_config.sample_rate = 16000; m_i2s_config.tx_desc_auto_clear = true; // new in V1.0.1 m_i2s_config.use_apll = APLL_DISABLE; m_i2s_config.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX); #if ESP_ARDUINO_VERSION_MAJOR >= 2 m_i2s_config.communication_format = (i2s_comm_format_t)(I2S_COMM_FORMAT_STAND_I2S); // Arduino vers. > 2.0.0 #else // standard I2S format (i.e. not left-justified) means data transmission starts one BCLK cycle after LRCLK transition // MAX98357A needs I2S format and MSB first m_i2s_config.communication_format = (i2s_comm_format_t)(I2S_COMM_FORMAT_I2S | I2S_COMM_FORMAT_I2S_MSB); #endif I2S_BUF_SIZE是512,我了解到是在samples中测得的。样本是16位的,我的数据是L/R格式存储的,占用32位,所以我预留了双倍的空间。 我有 3 个变量来从 SD 获取样本并将它们传递给 I2S: 代码:全选 uint8_t* maBufferA = NULL; uint8_t* maBufferB = NULL; int32_t maMixedI2SSamples[I2S_BUF_SIZE] = {}; 最后一个包含来自多个 wav 文件的混合样本,另外 2 个被其内容交替覆盖并使用 i2s_write 命令传递给 I2S: 代码:全选 maBufferA = (uint8_t*) heap_caps_calloc(I2S_BUF_SIZE, sizeof(int32_t), MALLOC_CAP_DEFAULT|MALLOC_CAP_INTERNAL|MALLOC_CAP_DMA); 代码:全选 memcpy(maBufferA, maMixedI2SSamples, sizeof(int32_t)*I2S_BUF_SIZE); 在这个带有 i2s_write 的命令中,我收到错误并重新启动(见下文): 代码:全选 err = i2s_write((i2s_port_t)I2S_NUM_0, maBufferA, sizeof(int32_t) * I2S_BUF_SIZE, 0, 100); 20:27:42:I2SWavPlayer::StartPlayback>>将 BufferA 传递给 i2s 驱动程序。 20:27:42:Guru Meditation 错误:核心 1 恐慌(StoreProhibited)。异常未处理。 20:27:42:核心1寄存器转储: 20:27:42:PC:0x400F15AD PS:0x00060730 A0:0x800D37C2 A1:0X3FFB1EA0 20:27:42 :A2:A2:A2:A2:A2:0X00000000 A3:0X3FFB2068 A4:0X3FFB2068 A4:0X00000000000000000000000000000000000000000000000000000000倍00x00000000000000000 件事:42: A6 : 0x00000064 A7 : 0x00000000 A8 : 0x800d5428 A9 : 0x3ffb1e90 20:27:42 : A10 : 0x00000002 A11 : 0x3f401518 A12 : 0x00000ffc A13 : 0x3ffb5090 20:27:42 : A14 : 0x3ffb86fc A15 : 0x000000ff SAR : 0x0000001b EXCCAUSE: 0x0000001d 20:27:42: EXCVADDR: 0x00000000 LBEG : 0x400014fd LEND : 0x4000150d LCOUNT : 0xfffffff1 20:27:42: 20:27:42 : ELF file SHA256: 0000000000000000 20:27:42 : 20:27:42: Backtrace: 0x400f15ad :0x3FFB1EA0 0x400D37BF:0x3FFB1ED0 0x400D1586:0x3FFB1F10 0x400D19CF:0x3FFB1F30 0x400D722A:0X3FFB1FB1FB1 FB0 0X400864C9:0x400864C9:0X3FFB1 FRINT IMETING ITY IN i i i i i i i i i i i i i |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
542浏览 6评论
454浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
434浏览 5评论
436浏览 4评论
409浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 14:42 , Processed in 0.860708 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号