完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
您好 NXP 开发人员,我是 NXP,我正在使用 LPC55S28 实现 DMA 来传输 I2S 数据,我发现 NXP 官方 SDK 的 I2S 使用 DMA 传输 16 位,不知道如何修改为 24 位,请指导我们。谢谢你(鞠躬)。还附上了代码的一部分。
I2S 的配置 I2S_TxGetDefaultConfig( s_TxConfig); s_TxConfig.除法器 = DEMO_I2S_CLOCK_DIVIDER; s_TxConfig.masterSlave = DEMO_I2S_TX_MODE; s_TxConfig.dataLength = DataLenth; s_TxConfig.frameLength = 帧长度; s_TxConfig.leftJust = false; I2S_TxInit(DEMO_I2S_TX, s_TxConfig); I2S_RxGetDefaultConfig( s_RxConfig); s_RxConfig.divider = DEMO_I2S_CLOCK_DIVIDER; s_RxConfig.masterSlave = DEMO_I2S_RX_MODE; s_RxConfig.dataLength = DataLenth; s_RxConfig.frameLength = 帧长度; s_RxConfig.leftJust = false; I2S_RxInit(DEMO_I2S_RX, s_RxConfig); PRINTF(“音频环回已启动!rn”); PRINTF(“耳机将播放输入到音频线路输入连接器的内容。rn”); // PRINTF("CLOCK_GetPll0OutFreq = %drn", CLOCK_GetPll0OutFreq); s_RxTransfer.data = s_Buffer[0]; s_RxTransfer.dataSize = sizeof(s_Buffer); s_TxTransfer.data = s_Buffer[0]; s_TxTransfer.dataSize = sizeof(s_Buffer); #if I2S_24BIT 24 位 s_TxTransfer.data = sin_24bit[0]; s_TxTransfer.dataSize = sizeof(sin_24bit); #else 16 位 s_TxTransfer.data = sin_16bit[0]; s_TxTransfer.dataSize = sizeof(sin_16bit); #endif DMA0 的配置 #if DMA_Transfer dma_init(demo_dma); DMA_EnableChannel(DEMO_DMA, DEMO_I2S_TX_CHANNEL); DMA_EnableChannel(DEMO_DMA, DEMO_I2S_RX_CHANNEL); DMA_SetChannelPriority(DEMO_DMA、DEMO_I2S_TX_CHANNEL、kDMA_ChannelPriority2); DMA_SetChannelPriority(DEMO_DMA、DEMO_I2S_RX_CHANNEL、kDMA_ChannelPriority3); DMA_CreateHandle( s_DmaTxHandle、 DEMO_DMA、 DEMO_I2S_TX_CHANNEL); DMA_CreateHandle( s_DmaRxHandle、 DEMO_DMA、 DEMO_I2S_RX_CHANNEL); I2S_TxTransferCreateHandleDMA(DEMO_I2S_TX, s_TxHandle, s_DmaTxHandle, TxCallback, (void *) s_TxTransfer); I2S_TxTransferCreateHandleDMA(DEMO_I2S_RX, s_RxHandle, s_DmaRxHandle, RxCallback, (void *) s_RxTransfer); /* 需要将两个 transmit buffers排入队列,因此当第一个 * 完成传输,另一个立即开始 */ I2S_TxTransferSendDMA(DEMO_I2S_TX、s_TxHandle、s_TxTransfer); I2S_TxTransferSendDMA(DEMO_I2S_TX、s_TxHandle、s_TxTransfer); I2S_TxTransferSendDMA(DEMO_I2S_TX、s_TxHandle、s_TxTransfer); I2S_RxTransferReceiveDMA(DEMO_I2S_RX、s_RxHandle、s_RxTransfer); I2S_RxTransferReceiveDMA(DEMO_I2S_RX、s_RxHandle、s_RxTransfer); #else //I2STransfer I2S_TxTransferCreateHandle(DEMO_I2S_TX, s_TxHandle, TxCallback, (void *) s_TxTransfer); I2S_RxTransferCreateHandle(DEMO_I2S_RX, s_RxHandle, RxCallback, (void *) s_RxTransfer); I2S_RxTransferNonBlocking(DEMO_I2S_RX、s_RxHandle、s_RxTransfer); I2S_TxTransferNonBlocking(DEMO_I2S_TX、s_TxHandle、s_TxTransfer); #endif |
|
相关推荐
1个回答
|
|
|
在 LPC55S28 上配置 DMA0 以实现 24 位 I2S 数据传输,需调整 I2S 数据格式、DMA 传输宽度及缓冲区对齐。以下是关键步骤和代码示例: 1. I2S 配置调整修改 2. DMA 传输宽度配置DMA 需按 32 位 传输(因 24 位数据嵌入 32 位帧): 3. 数据缓冲区对齐定义 32 位缓冲区,将 24 位数据右对齐(高位补零): 4. 时钟分频器计算调整 5. 验证与调试
常见问题
通过上述步骤,I2S 和 DMA 将协同传输 24 位音频数据。建议参考《LPC55S28 User Manual》中 I2S 和 DMA 章节验证寄存器配置。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
2135个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
37376 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
6775 浏览 1 评论
7793 浏览 1 评论
7642 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
5071 浏览 0 评论
1556浏览 2评论
关于NINA-W132 Wi-Fi模块SPI通信遇到的疑问求解
1209浏览 2评论
如何在MPC PowerPC MCU上首次刷写后禁用BDM?
749浏览 1评论
将HFREFR和LFREFR寄存器值设置为错误的值来将故障注入CMU,但CMU_ISR值始终为零,为什么?
735浏览 1评论
将SPSDK for FRDM-MCX-W71 SDK与VS一起安装时出现hidapi构建错误怎么解决?
678浏览 1评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 08:27 , Processed in 0.817086 second(s), Total 77, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
452