查看: 2535|回复: 6

[求助] mx53 SSI音频没有输出

[复制链接]
回帖奖励 7 NXP金币 回复本帖可获得 1 NXP金币奖励! 每人限 1 次

该用户从未签到

7

主题

34

帖子

0

注册会员

Rank: 2

积分
124
最后登录
1970-1-1
发表于 2015-7-21 09:15:11 | 显示全部楼层 |阅读模式
环境: mx53+uda1341
我对音频驱动的理解是,codec驱动和SSI驱动已经写好了,我需要做的就是一些配置的工作。但是不管我怎么修改配置,I2S上的FSCLK和bit-clk始终没有信号。由于uda1341只能工作在从模式,所以我的SSI是主模式,2个地方的配置如下:
        MX53_PAD_KEY_COL0__AUDMUX_AUD5_TXC,
        MX53_PAD_KEY_ROW0__AUDMUX_AUD5_TXD,
        MX53_PAD_KEY_COL1__AUDMUX_AUD5_TXFS,
        MX53_PAD_KEY_ROW1__AUDMUX_AUD5_RXD,


static struct mxc_audio_platform_data uda134x_data = {
        .ssi_num = 0,
        .src_port = 1,
        .ext_port = 6,
        .init = mxc_uda134x_init,
};

看AUDMUX部分的文档,端口对应的是1->6,2->5,3->4。所以这里的src_num就是1,ext_num就是6,是不是说我用(1,6)和(2,5)效果是一样的呢?还是说与引脚的功能配置有关,如果用的是AUDMUX5就是用(2,5)?当我用(2,5)的时候用madplay播放音频得到input/output error,但是用(1,6)播放正常没有错误。

然后就是machine驱动里面对AUDMUX的配置
        /* reset port ssi_port & dai_port */
        __raw_writel(0, DAM_PTCR(ssi_port));
        __raw_writel(0, DAM_PTCR(dai_port));
        __raw_writel(0, DAM_PDCR(ssi_port));
        __raw_writel(0, DAM_PDCR(dai_port));

        /* set to synchronous */
        ssi_ptcr |= AUDMUX_PTCR_SYN;
        dai_ptcr |= AUDMUX_PTCR_SYN;

        /* set Rx sources ssi_port <--> dai_port */
        ssi_pdcr |= AUDMUX_PDCR_RXDSEL(dai_port);
        dai_pdcr |= AUDMUX_PDCR_RXDSEL(ssi_port);

        /* set Tx frame direction and source  ssi_port --> dai_port output */
        dai_ptcr |= AUDMUX_PTCR_TFSDIR;
        dai_ptcr |= AUDMUX_PTCR_TFSSEL(AUDMUX_FROM_TXFS, ssi_port);

        /* set Tx Clock direction and source ssi_port--> dai_port output */
        dai_ptcr |= AUDMUX_PTCR_TCLKDIR;
        dai_ptcr |= AUDMUX_PTCR_TCSEL(AUDMUX_FROM_TXFS, ssi_port);

        printk("AUDMUX SSI PTCR=0x%x,PDCR=0x%x\n",ssi_ptcr,ssi_pdcr);
        printk("AUDMUX DAI PTCR=0x%x,PDCR=0x%x\n",dai_ptcr,dai_pdcr);
        __raw_writel(ssi_ptcr, DAM_PTCR(ssi_port));
        __raw_writel(dai_ptcr, DAM_PTCR(dai_port));
        __raw_writel(ssi_pdcr, DAM_PDCR(ssi_port));
        __raw_writel(dai_pdcr, DAM_PDCR(dai_port));

根据打印信息,dai_ptcr的值应该是ssi的才对,可是即便我将dai_ptcr和ssi_ptcr的位置交换,BCLK和FSCLK还是没有信号。
SSI和AUDMUX的输出值
[   71.655302] scr 1bb  , 1bb
[   71.659303] sisr 320 , 300
[   71.663391] stcr 3ed , 3ed
[   71.667480] srcr 30d , 30d
[   71.671568] stccr e117       , e117
[   71.675917] srccr 40100      , 40100
[   71.680440] sfcsr 8680868    , 8680868
[   71.685309] stmsk fffffffe   , fffffffe
[   71.690353] srmsk fffffffe   , fffffffe
[   71.695396] sier 180100      , 180100

[    2.412130] AUDMUX SSI PTCR=0x84000800,PDCR=0x0
[    2.416685] AUDMUX DAI PTCR=0x800,PDCR=0xa000


为什么把SSI配置成主模式,它没有产生内部时钟给codec呢?还需要配置哪些寄存器吗?

• Port 1 to Port 6
• Port 6 provides the clock and frame sync.
• Port 2 to Port 5
• Port 5 provides the clock and frame sync.
• Port 3 to Port 4
• Port 4 provides the clock and frame sync.

根据文档是不是应该dai_port是5而ssi_port是2,那这样不就相当于音频是从dai->ssi的吗?

我知道答案 目前已有6人回答

评分

参与人数 1NXP金币 +10 收起 理由
小七 + 10 用过的飞友帮助一下

查看全部评分

回复

使用道具 举报

该用户从未签到

4

主题

31

帖子

0

注册会员

Rank: 2

积分
70
最后登录
2018-5-2
发表于 2015-7-22 09:05:56 | 显示全部楼层

回帖奖励 +1 NXP金币

帮顶一下~
回复

使用道具 举报

  • TA的每日心情
    郁闷
    2017-1-4 20:13
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    18

    主题

    1093

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1679
    最后登录
    2019-4-30
    发表于 2015-7-22 12:35:15 | 显示全部楼层

    回帖奖励 +1 NXP金币

    支持一下
    回复

    使用道具 举报

    该用户从未签到

    7

    主题

    34

    帖子

    0

    注册会员

    Rank: 2

    积分
    124
    最后登录
    1970-1-1
     楼主| 发表于 2015-7-22 17:09:19 | 显示全部楼层
    音频已经有声音了,不过噪声比较大。有一个疑问就是我在board.c文件中设置了系统时钟,测量到的值也跟我设置的很接近,但是在imx_ssi.c中打印的值一直是12M。通过BCLK和frame sync的值算出来也是12M,说明我设置的值根本就没有写到ssi中,看代码也确实没有哪里将我设置的值写入到ssi的clk?请问ssi的系统时钟我要如何修改呢?
    1. static int mxc_uda134x_init(void)
    2. {
    3.         struct clk *ssi_ext1;
    4.         struct clk *ssi_sys_clk;
    5.         struct clk *pll3;
    6.        
    7.         u32 rate;

    8.         ssi_ext1 = clk_get(NULL, "ssi_ext1_clk");
    9.         if (IS_ERR(ssi_ext1))
    10.                         return -1;
    11.     pll3 = clk_get(NULL, "pll3");
    12.            /* Change the SSI_EXT1_CLK to be sourced from PLL3 for uda134X */
    13.         clk_disable(ssi_ext1);
    14.         clk_set_parent(ssi_ext1, pll3);
    15.         clk_enable(ssi_ext1);

    16.         rate = clk_round_rate(ssi_ext1, 12888000);
    17.         if (rate < 2000000 || rate > 24000000) {
    18.                         printk(KERN_ERR "Error: UDA134x mclk freq %d out of range!\n",
    19.                                    rate);
    20.                         clk_put(ssi_ext1);
    21.                         return -1;
    22.         }
    23.         clk_set_rate(ssi_ext1, rate);
    24.         clk_enable(ssi_ext1);
    25.         uda134x_data.sysclk = rate;

    26.         return 0;
    27. }
    复制代码
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7

    主题

    34

    帖子

    0

    注册会员

    Rank: 2

    积分
    124
    最后登录
    1970-1-1
     楼主| 发表于 2015-7-23 15:28:01 | 显示全部楼层
    解决了,谢谢各位
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2022-3-3 09:56
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    106

    主题

    836

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    1527
    最后登录
    2023-6-12
    发表于 2015-7-23 19:53:19 | 显示全部楼层

    回帖奖励 +1 NXP金币

    哪里有问题啊?
    捕获.PNG
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7

    主题

    34

    帖子

    0

    注册会员

    Rank: 2

    积分
    124
    最后登录
    1970-1-1
     楼主| 发表于 2015-7-24 13:56:47 | 显示全部楼层

    i2s的sysclk设置的有问题,设置3M后播放正常,4M就没有声音了。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-22 01:56 , Processed in 0.105691 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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