uda1341声卡移植(解决全双工)

在说移植之前,我们还是先分析一下它的驱动。

我先介绍一些基本知识:

S3C2410-UDA1341声卡驱动主要用到的资源有IIS音频总线,GPIO,DMA通道.S3C2410有4通道的DMA控制器,支持存储器到存储器,IO到存储器,存储器到IO和IO到IO的传输,采用猝发传输模式加快传输速率.

IIS功能描述:

IISDI:串行数据输入线.

IISDO:串行数据输出线.

SCLK:串行数据提供位时钟.

LRCK:切换左右声道数据贞(字段选择)

MCLK:系统提供的同步时钟,又称CDCLK(编解码器时钟)

S3C2410-IIS总线接口有3种数据传输模式(具体见手册)

1.正常模式.

2.DMA模式.

3.传输/接受模式.

  UDA1341和S3C2410的连接方式就是这种模式.

IIS 数据线将通过双通道DMA同时接受和发送音频数据.在这个体系中,为实现全双工,数据传输使用2个DMA通道,与IIS交互的数据经过IIS控制器写入 FIFO寄存器组.当FIFO被添满后,DMA控制器一次性将数据写入预先分配的内存区,UDA1341芯片除了提供IIS接口和麦克风接口,还提供L3 接口控制音量等,IIS总线接口信号线包括位时钟输入SCK,字段选择WS,数据输入DATAI,数据输出DATAO,系统时钟SYSCLK,L3接口由 3个I/O口控制.

IISCON:IIS控制寄存器.(具体看手册).

IISMOD:IIS模式寄存器.

IISPSR:IIS分频寄存器.

音频设备的基础知识:

OSS标准中有2个基础设备:mixer(混音器)和dsp(数字信号处理器).

现在我们就来分析一下我们的驱动吧:

int __init tq2440_uda1341_init(void)
{
    int             ret = 0;

    ret = l3_attach_client(&uda1341, "l3-bit-24x0-gpio", "uda1341");
    if (ret)
    {
        printk("l3_attach_client() failed./n");
        return ret;
    }
    l3_open(&uda1341);
    start_uda1341();

    output_stream.dma_ch = S3C2410_DMA_CH2;//这是dma的输出通道
    output_stream.dmaclient.name = "audio_out";
    if (audio_init_dma(&output_stream, "UDA1341 out"))//下面我们来分析它的初始化过程
    {
        audio_clear_dma(&output_stream);
        printk(KERN_WARNING AUDIO_NAME_VERBOSE ": unable to get DMA channels/n");
        return -EBUSY;
    }

    input_stream.dma_ch = S3C2410_DMA_CH1;//与上面相反
    input_stream.dmaclient.name = "audio_in";

    if (audio_init_dma(&input_stream, "UDA1341 in"))
    {
        audio_clear_dma(&input_stream);
        printk(KERN_WARNING AUDIO_NAME_VERBOSE ": unable to get DMA channels/n");
        return -EBUSY;
    }
    audio_dev_dsp = register_sound_dsp(&tq2440_audio_fops, -1);
    audio_dev_mixer = register_sound_mixer(&tq2440_mixer_fops, -1);

    printk(AUDIO_NAME_VERBOSE " initialized/n");

    return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值