主题 : oss驱动dsp读函数的疑惑 复制链接 | 浏览器收藏 | 打印
Just do it
级别: 侠客
UID: 2754
精华: 4
发帖: 66
金钱: 2435 两
威望: 873 点
贡献值: 40 点
综合积分: 212 分
注册时间: 2008-12-07
最后登录: 2016-04-13
楼主  发表于: 2009-09-09 21:56

 oss驱动dsp读函数的疑惑

最近在浏览shinelk大侠的大侠关于OSS音频驱动,
对于dsp读函数的不理解,请shinelk大侠解释一下,谢了
在写函数中:
smdk2410_audio_write中,
(chunksize = s->fragsize - b->size;
        if (chunksize > count)
            chunksize = count;
        DPRINTK("2: write %d to %d\n", chunksize, s->buf_idx);
        if (copy_from_user(b->start + b->size, buffer, chunksize)) {
    
由于b->size在audio_setup_buf()中被设为0
memset(s->buffers, 0, sizeof(audio_buf_t) * s->nbfrags);
所以第一次进行放音时,数据从用户空间写到音频DMA映射缓冲区,然后被
DMA到声卡。
现在的问题是:
当在但在读函数中smdk2410_audio_read,有点看不懂了,因为初始化b->size为0,
那chunksize为0,怎么进行录音呢?音频缓冲区的数据时codec经过ADC后,
DMA进去的,是不是哪里更新了b->size?

chunksize = b->size;
if (chunksize > count)
chunksize = count;
DPRINTK("read %d from %d\n", chunksize, s->buf_idx);
//---------------------------add by shinelk---------------------------------------
if(audio_channels == 1){
    buf = (b->start + s->fragsize - b->size);
    for(i = 0;i < chunksize/2;i += 2){
        for(j = 0;j < 2;j++)
            tmp[i+j] = *(buf + i*2 +j);
    }
    if (copy_to_user(buffer,tmp,chunksize/2))
Just do it
级别: 侠客
UID: 2754
精华: 4
发帖: 66
金钱: 2435 两
威望: 873 点
贡献值: 40 点
综合积分: 212 分
注册时间: 2008-12-07
最后登录: 2016-04-13
1楼  发表于: 2009-09-10 09:22
恩,懂了,谢谢版主