完善资料让更多小伙伴认识你,还能领取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: Core 1 register dump: 20:27:42: PC : 0x400f15ad PS : 0x00060730 A0 : 0x800d37c2 A1 : 0x3ffb1ea0 20:27:42: A2 : 0x00000000 A3 : 0x3ffb2068 A4 : 0x00000004 A5 : 0x00000000 20:27 :42:A6:0x00000064 A7:0x00000000 A8:0x800D5428 A9:0x3FFB1E90 20:27:42:A10:0X00000002 A11 :0X3F401518 A12:0X00000FFC A13:0X00000FFC A13:0x00000FFC A13:0X3FFB50.2FFB5S A.2FFFB5S A1 A.23FFFB500 20: 0.2.A.2FFFB500 20: 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:0x3FFB1FB1 FB0 0x400864C9:0X400864C9:0X3FFB1 i i i i i iyy iyy iyy iby i.1 i.2 i.2 i.1 i.2 i.2 i.2 i.2 i.2 i.2 i.1 i.2 i.1 i.2 i.2 i.1 i.2 i.1 i.1 i.2 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1905个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36352 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4391 浏览 0 评论
6043 浏览 1 评论
6759 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4207 浏览 0 评论
617浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
612浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
602浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
692浏览 2评论
791浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 12:22 , Processed in 1.044071 second(s), Total 74, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号