主题 : uda1341 驱动移植问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 7146
精华: 0
发帖: 9
金钱: 90 两
威望: 45 点
综合积分: 18 分
注册时间: 2009-07-03
最后登录: 2017-09-13
楼主  发表于: 2009-08-31 13:38

 uda1341 驱动移植问题

大家好,我现在在移植声卡驱动uda1341,oss的时候,能够放音了,但是有时会出现
dma0: loadbuffer:timeout loading buffer
dma enqueue failed.
不知道是什么原因,好像是dcon 设置不对,因为我对这个修改好像没有变化。
还有个问题就是mini2440 的dsp 缓冲区块大小该如何设置,SNDCTL_DSP_SETFRAGMENT?不知道版主能帮忙回答下吗?


十分感谢!
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2009-08-31 14:16
问这种问题的时候,记得说清楚你做了什么,在什么基础上做的,怎么做的。
别人没有兴趣去猜的
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 7146
精华: 0
发帖: 9
金钱: 90 两
威望: 45 点
综合积分: 18 分
注册时间: 2009-07-03
最后登录: 2017-09-13
2楼  发表于: 2009-08-31 16:11
您好,我是参考这个帖子来完成的驱动移植,http://blog.csdn.net/lobbve/archive/2009/04/13/4069211.aspx
完成移植后,cat  test.wav  > /dev/dsp 没有问题,cat  /dev/dsp  > test.wav  没有成功,无错误提示,

我的应用程序里,如下控制声卡,

    ioctl(ca->fd, SNDCTL_DSP_RESET, 0);

    p = bits;        /* 16 bits */
    ioctl(ca->fd, SNDCTL_DSP_SAMPLESIZE, &p);

    p = stereo;        /* number of channels */
    ioctl(ca->fd, SNDCTL_DSP_CHANNELS, &p);

    p = AFMT_S16_NE;    /* choose LE or BE (endian) */
    ioctl(ca->fd, SNDCTL_DSP_SETFMT, &p);

    p = rate;        /* rate in khz */
    ioctl(ca->fd, SNDCTL_DSP_SPEED, &p);

    ioctl(ca->fd, SNDCTL_DSP_GETBLKSIZE, &min_size);
    if (min_size > blocksize) {
        cond = 1;
        p = min_size / blocksize;
        while (cond) {
        //int i = ioctl(ca->fd, SNDCTL_DSP_SUBDIVIDE, &p);
        printf("the ioctl SNDCTL_DSP_SUBDIVIDE \n");      /* 由于不支持 SNDCTL_DSP_SUBDIVIDE ,用SNDCTL_DSP_SETFRAGMENT替换,这里可能使用该参数有问题? */
            int i = ioctl(ca->fd, SNDCTL_DSP_SETFRAGMENT, &p);
        printf("the ioctl SNDCTL_DSP_SETFRAGMENT i is %d\n",i);  }


我是再做voip的语音传输部分,需要控制dsp缓冲区的块大小

如上控制之后,提示
dma0: loadbuffer:timeout loading buffer
dma enqueue failed.


请大家指教,十分感谢!

    
级别: 新手上路
UID: 7146
精华: 0
发帖: 9
金钱: 90 两
威望: 45 点
综合积分: 18 分
注册时间: 2009-07-03
最后登录: 2017-09-13
3楼  发表于: 2009-09-01 17:06
我查到资料,可能是dma设置有问题,
static int __init audio_init_dma(audio_stream_t * s, char *desc)
{
int ret ;
enum s3c2410_dmasrc source;
int hwcfg;
unsigned long devaddr;
int dcon;
unsigned int flags = 0;

if(s->dmach == DMA_CH2){
  source = S3C2410_DMASRC_MEM;
  hwcfg = 3;
  devaddr = 0x55000010;
  dcon = 0xa0800000;
  flags = S3C2410_DMAF_AUTOSTART;
  
  ret = s3c2410_dma_request(s->dmach, &s3c2410iis_dma_out, NULL);
  s3c2410_dma_devconfig(s->dmach, source, hwcfg, devaddr);
  s3c2410_dma_config(s->dmach, 2, dcon);
  s3c2410_dma_set_buffdone_fn(s->dmach, audio_dmaout_done_callback);
  s3c2410_dma_setflags(s->dmach, flags);
  return ret;
}
else if(s->dmach == DMA_CH1){
  source =S3C2410_DMASRC_HW;
  hwcfg =3;
  devaddr = 0x55000010;
  dcon = 0xa2900000;
  flags = S3C2410_DMAF_AUTOSTART;
  
  ret = s3c2410_dma_request(s->dmach, &s3c2410iis_dma_in, NULL);
  s3c2410_dma_devconfig(s->dmach, source, hwcfg, devaddr);
  s3c2410_dma_config(s->dmach, 2, dcon);
  s3c2410_dma_set_buffdone_fn(s->dmach, audio_dmain_done_callback);
  s3c2410_dma_setflags(s->dmach, flags);
  return ret ;
}
else
  return 1;
}

其中dcon的值该为多少呢,版主大人期待您的答复!  十分感谢!
级别: 新手上路
UID: 5051
精华: 0
发帖: 37
金钱: 355 两
威望: 200 点
综合积分: 74 分
注册时间: 2009-04-09
最后登录: 2011-06-20
4楼  发表于: 2009-09-02 01:55
楼上的把你的uda341.c代码放上来看看,我也在研究声卡,一起讨论

我遇到的问题是:
UDA1341 audio driver initialized
s3c2440-uda1341: failed to get memory region resouce
s3c2410-iis: probe of s3c2410-iis.0 failed with error -2
shine audio driver init!
级别: 新手上路
UID: 7146
精华: 0
发帖: 9
金钱: 90 两
威望: 45 点
综合积分: 18 分
注册时间: 2009-07-03
最后登录: 2017-09-13
5楼  发表于: 2009-09-02 09:32
朋友,我已经给出那个源码的网址了,是一个网友的blog,就在我的第一个帖子里呢,咱们交流下
级别: 新手上路
UID: 5051
精华: 0
发帖: 37
金钱: 355 两
威望: 200 点
综合积分: 74 分
注册时间: 2009-04-09
最后登录: 2011-06-20
6楼  发表于: 2009-09-02 19:32
哈哈,加我QQ:895942755,我的还没有解决
级别: 新手上路
UID: 7146
精华: 0
发帖: 9
金钱: 90 两
威望: 45 点
综合积分: 18 分
注册时间: 2009-07-03
最后登录: 2017-09-13
7楼  发表于: 2009-09-11 10:30
版主大人,小弟还有个问题,就是我把oss的驱动大概改成全双工的了,但是cat  /dev/dsp > tmp.wav
发现tmp.wav 文件不为空,但是cat tmp.wav > /dev/dsp  却没有声音,无法确定是否录音成功,

还有就是我在用开发板进行8k采样进行 voip 通话的时候,听传来的声音,像卡通人物说话,特别快似的,但是我已经设置采样率为 8K了,您能给分析下原因吗?

多谢! 大家都给些意见