请选择 进入手机版 | 继续访问电脑版
查看: 2636|回复: 0

[原创] 【LPC55S69】 WM8904(IIS+IIC+DMA)

[复制链接]
  • TA的每日心情
    无聊
    2021-12-29 19:06
  • 签到天数: 47 天

    [LV.5]常住居民I

    49

    主题

    188

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    1371
    最后登录
    2024-3-21
    发表于 2020-3-12 21:05:28 | 显示全部楼层 |阅读模式
    本帖最后由 day_day 于 2020-3-12 21:17 编辑

    WM8904Cirrus Logic一款立体声解码芯片,在LPC系列官方开发板上比较常见,因此SDK也为其专门设置了驱动包,可以方便地进行驱动。我手上的两块官方开发板LPC55S69LPC54628都采用了WM8904作为音频方案。

    音频数据通讯采用IIS协议,而寄存器配置则采用IIC协议。

    (一)时钟配置
    1-主时钟由96MHz的fro_hf提供,或者也可以启动pll0时钟
    2-PLL0提供IIS所需要的精准时钟,这个时钟的频率必须是所选择的音频码率的某个倍数,可以参考IIS外设配置页面,会最接近的时钟频率可供选择。
    3-由PLL0为MCLK提供时钟,MCLK为对外向WM8904输出的时钟,最好保证其为码率的倍数,某则音质会失真
    4-使能第四和第七个FXCOM外设时钟,其中第七个外设时钟必须由PLL0提供,最好不作任何改变,与PLL0_CLK时钟的频率保持一致。因为该外设为IIS

    (二)引脚使能
    使能接到WM8904的IIS(FXCOM7)、IIC(FXCOM4)共五个引脚 再使能SYSCON中的MCLK引脚(91),该引脚向WM8904提供时钟。
    图片1.png
    主函数初始化时补充一句:
    1. SYSCON->MCLKIO  = 1U;
    复制代码
    否则时钟无法输出,暂时没有发现该行语句完全由配置工具配置出来的方法,因此需要手动加入



    (三)SDK加入
    SDK加入wm8904_adapter、flexcomm_i2c_adapter,I2s_dma,其余关联内容会被自动选中



    (四)外设配置
    DMA0
    图片2.png
    FLFXCOMM4-IIC
    图片3.png
    FLFXCOMM7-IIS
    图片4.png

    (五)初始化wm8904
    1-创建配置结构体:
    1. wm8904_config_t wm8904Config = {
    2.     .i2cConfig    = {
    3.                     .codecI2CInstance = BOARD_CODEC_I2C_INSTANCE,
    4.                         .codecI2CSourceClock = BOARD_CODEC_I2C_CLOCK_FREQ
    5.     },
    6.     .recordSource = kWM8904_RecordSourceLineInput,
    7.     .recordChannelLeft  = kWM8904_RecordChannelLeft2,
    8.     .recordChannelRight = kWM8904_RecordChannelRight2,
    9.     .playSource         = kWM8904_PlaySourceDAC,
    10.     .slaveAddress       = WM8904_I2C_ADDRESS,
    11.     .protocol           = kWM8904_ProtocolI2S,
    12.     .format             = {
    13.                     .sampleRate = kWM8904_SampleRate48kHz,
    14.                         .bitWidth = kWM8904_BitWidth16
    15.     },
    16.     .mclk_HZ            = 24576000,
    17.     .master             = false,
    18. };
    19. codec_config_t boardCodecConfig = {
    20.                 .codecDevType = kCODEC_WM8904,
    21.                 .codecDevConfig = &wm8904Config
    22. };
    复制代码
    初始化:
    1.     codec_handle_t codecHandle;
    2.     if (CODEC_Init(&codecHandle, &boardCodecConfig) != kStatus_Success)
    3.     {
    4.             PRINTF("WM8904_Init failed!\r\n");
    5.     }
    6.     /* Initial volume kept low for hearing safety. */
    7.     /* Adjust it to your needs, 0x0006 for -51 dB, 0x0039 for 0 dB etc. */
    8.     CODEC_SetVolume(&codecHandle,
    9.                     kCODEC_PlayChannelHeadphoneLeft | kCODEC_PlayChannelHeadphoneRight,
    10.                         0x0006);
    复制代码
    2-回调函数:
    1. static void TxCallback(I2S_Type *base, i2s_dma_handle_t *handle, status_t completionStatus, void *userData);

    2. void TxCallback(
    3.                 I2S_Type *base,
    4.                 i2s_dma_handle_t *handle,
    5.                 status_t completionStatus,
    6.                 void *userData)
    7. {
    8.     /* Enqueue the same original buffer all over again */
    9.     i2s_transfer_t *transfer = (i2s_transfer_t *)userData;
    10.     I2S_TxTransferSendDMA(base, handle, *transfer);
    11. }
    复制代码
    [size=13.3333px]3-启动DMA0重复发送
    1.     i2s_transfer_t ss_TxTransfer;

    2.     ss_TxTransfer.data     = &g_Music[0];
    3. ss_TxTransfer.dataSize = sizeof(g_Music);

    4.     I2S_TxTransferCreateHandleDMA(I2S7, &FLEXCOMM7_Tx_DMA_Handle, &FLEXCOMM7_TX_Handle, TxCallback, (void *)&ss_TxTransfer);
    5.     I2S_TxTransferSendDMA(I2S7, &FLEXCOMM7_Tx_DMA_Handle, ss_TxTransfer);
    6.     I2S_TxTransferSendDMA(I2S7, &FLEXCOMM7_Tx_DMA_Handle, ss_TxTransfer);
    复制代码
    g_Music是采用例程中的music.h中的一段音频数组
    然后就可以听见嗡嗡声(不是哒哒哒哦)

    工程: LPC55S69_Project_sound.zip (714.68 KB, 下载次数: 48)
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-3-29 00:32 , Processed in 0.111965 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表