音视频技术
直播中

王磊

8年用户 1637经验值
私信 关注
[问答]

请问ADSP2156X是否可以通过ASRC将TDM8信号转换为TDM16?

ADSP2156X有一个TDM8输入通道,需要Bypass并以TDM16格式输出(数据放在TDM16前8个slot中,后8个slot保持为0),是否可以使用ASRC来转换,代码上如何配置?

回帖(1)

郭中

2025-4-22 18:12:12

ADSP2156X可以通过合理配置其SPORT接口和ASRC模块实现TDM8到TDM16的格式转换。以下是具体分析和配置建议:


1. 硬件功能分析



  • SPORT接口灵活性:ADSP2156X的SPORT接口支持TDM8/TDM16等格式,可独立配置输入输出数据格式。

  • ASRC的作用:ASRC主要用于采样率转换。若输入输出采样率相同,可能无需启用ASRC;若需要采样率调整,ASRC需介入处理。

  • 通道扩展逻辑:通道数扩展(8→16)主要由SPORT和DMA协作完成,ASRC不直接处理通道数变化,但可与SPORT配合实现数据流控制。




2. 实现方案


场景1:无需采样率转换(Bypass ASRC)



  • 输入配置:SPORT设为TDM8模式,接收数据至缓冲区。

  • 输出配置:同一SPORT或另一SPORT设为TDM16模式,DMA将数据从输入缓冲区复制到输出缓冲区的前8时隙,后8时隙填零。

  • 关键配置
    // SPORT输入配置(TDM8)
    *pSPORTx_RCR1 = RFSR | RCKFE | RDTYPE_TDM | RSLEN_8;
    // SPORT输出配置(TDM16)
    *pSPORTx_TCR1 = TFSR | TCKFE | TDTYPE_TDM | TSLEN_16;
    // DMA设置:将输入数据复制到输出缓冲区前8时隙,后续清零


场景2:需采样率转换(启用ASRC)



  • ASRC配置:设置ASRC输入为TDM8、输出为TDM16,通过插值/抽取调整采样率。

  • 数据路由:ASRC输出数据至中间缓冲区,再通过SPORT以TDM16格式发送,后8时隙填零。

  • 关键代码
    // ASRC配置示例
    *pASRC_CTL = ASRCEN | IN_FORMAT_TDM8 | OUT_FORMAT_TDM16;
    // 设置ASRC输入输出采样率比(例如48kHz→96kHz)
    *pASRC_RATIO = 0x8000; // 1:2插值
    // DMA配置:将ASRC输出数据前8时隙映射到TDM16输出缓冲区




3. 关键配置步骤




  1. SPORT初始化



    • 输入SPORT设为TDM8,帧长8时隙,字长匹配数据精度(如32位)。

    • 输出SPORT设为TDM16,帧长16时隙,后8时隙可通过硬件自动填零或由软件/DMA显式清零。




  2. ASRC配置(如需)



    • 启用ASRC,设置输入/输出格式、采样率比。

    • 配置ASRC数据流为“TDM8→TDM16”,确保输出通道数扩展。




  3. DMA数据路由



    • 输入DMA将TDM8数据存入缓冲区。

    • 中间DMA将数据经ASRC处理(若启用)后,复制到输出缓冲区的前8时隙。

    • 输出DMA发送TDM16数据,后8时隙初始化为零。






4. 注意事项



  • 时钟同步:确保输入输出SPORT的时钟(CLK)和帧同步(FS)信号相位一致。

  • 时隙对齐:TDM16输出时,需设置TFSDURRFSDUR确保帧同步信号覆盖所有时隙。

  • 性能优化:使用DMA链式传输或环形缓冲区减少CPU干预,提高实时性。




5. 示例代码片段


// SPORT输入配置(TDM8)
*pSPORT0_RCR1 = RFSR | RCKFE | RDTYPE_TDM | RSLEN_8 | RWSLEN_32;
// SPORT输出配置(TDM16)
*pSPORT1_TCR1 = TFSR | TCKFE | TDTYPE_TDM | TSLEN_16 | TWSLEN_32;

// ASRC配置(如需)
*pASRC_CTL = ASRCEN | IN_FORMAT_TDM8 | OUT_FORMAT_TDM16;
*pASRC_RATIO = 0x8000; // 1:2插值

// DMA配置:输入到ASRC
configure_dma(SPORT0_RX_BUFFER, ASRC_IN_BUFFER, 8*4); // 8时隙×32位
// DMA配置:ASRC输出到TDM16
configure_dma(ASRC_OUT_BUFFER, SPORT1_TX_BUFFER, 16*4); // 前8时隙有效,后8填零

通过上述配置,ADSP2156X可高效实现TDM8→TDM16的格式转换,满足数据Bypass及后8时隙清零的需求。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分