TI中文支持网
TI专业的中文技术问题搜集分享网站

335x mcasp0 多通道发送数据的疑问

大家好,如题,如果axr0、axr1全部设置为输出模式,那么在应用层读写/dev/dsp时,怎么知道数据是从那一个管脚出去的呢?

以下是关键代码

static u8 am335x_iis_serializer_direction0[] = {//分别对应AXR0、AXR1、AXR2和ARX3
TX_MODE, TX_MODE, INACTIVE_MODE, INACTIVE_MODE,
INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
};

static struct snd_platform_data am335x_evm_snd_data0 = {
.tx_dma_offset = 0x46000000, /* McASP0 */
.rx_dma_offset = 0x46000000,
.op_mode = DAVINCI_MCASP_IIS_MODE,
.num_serializer = ARRAY_SIZE(am335x_iis_serializer_direction0),
.tdm_slots = 2,//对于i2s,就是通道数
.serial_dir = am335x_iis_serializer_direction0,
.asp_chan_q = EVENTQ_2,
.version = MCASP_VERSION_3,
.txnumevt = 2,// 指定发送FIFO大小
.rxnumevt = 2,
};

设置了两个做为输出时,读写/dev/dsp时出错:用示波器查看数据管脚,没有信号输出。

如果只配置一个管脚为TX_MODE,那么读写/dev/dsp是正常的,用示波器看对应的管脚有数据输出,如下

[ 1041.271057] ###getinto davinci_mcasp_start
[ 1041.275360] ###getinto mcasp_start_tx
[ 1041.279235] ###getout mcasp_start_tx
[ 1041.282958] ###getout davinci_mcasp_start
You said 24000 bytes
You said 24000 bytes
You said 24000 bytes
You said 24000 bytes
You said 24000 bytes

怎么样才能使得两个数据管脚都有信号输出??

附上测试程序:

int main()
{
int fd; /* 声音设备的文件描述符 */
int arg; /* 用于ioctl调用的参数 */
int status; /* 系统调用的返回值 */

/* 打开声音设备 */
fd = open("/dev/dsp", O_RDWR);
if (fd < 0) {
perror("open of /dev/dsp failed");
exit(1);
}
else{
printf("open /dev/dsp successed\n");
}

while (1) {
status = write(fd, buf, sizeof(buf)); // 回放 

if (status != sizeof(buf))
printf("wrote wrong number of bytes,%d\n",status);
else
printf("You said %d bytes\n",status);

}
}

chenyu zhang2:

不知道你这个问题解决了没有,我也遇到相同的问题

赞(0)
未经允许不得转载:TI中文支持网 » 335x mcasp0 多通道发送数据的疑问
分享到: 更多 (0)