This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我现在使用DM368 的MCBSP接口与AIC32通信,MCBSP为从模式,AIC32为主模式。内核是2.6.18,相关设置如下:
static struct evm_snd_platform_data dm365_evm_snd_data = {
.clk_name = "McBSPCLK",
.tx_dma_ch = DM365_DMA_MCBSP_TX,
.rx_dma_ch = DM365_DMA_MCBSP_RX,
.tx_dma_offset = DAVINCI_MCBSP_DXR_REG,
.rx_dma_offset = DAVINCI_MCBSP_DRR_REG,
.codec_fmt = SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_IB_NF,
.eventq_no = EVENTQ_3,
};
设置采样率为8KHz,数据位16bits,用示波器测量FSX,CLKX,DX信号, FSX输出8KHz,CLK256KHz,而DX没有数据信号输出,只有1.8V左右的电平输出。我把AIC32的寄存器和MCBSP结存器打印了出来。
AIC32寄存器:
Register 0 = 0x0
Register 1 = 0x80
Register 2 = 0xaa
Register 3 = 0x91 //pll enable. sample rate is 8KHz
Register 4 = 0x20
Register 5 = 0x1e
Register 6 = 0x0
Register 7 = 0xa // Fsref = 48KHz
Register 8 = 0xc0 // master mode
Register 9 = 0x0 // I2S mode
Register 10 = 0x1 //1bit delay
Register 11 = 0x1
Register 12 = 0x0
Register 13 = 0x0
Register 14 = 0x0
Register 15 = 0x7f
Register 16 = 0x7f
Register 17 = 0xf
Register 18 = 0xf0
Register 19 = 0x4
Register 20 = 0x78
Register 21 = 0x78
Register 22 = 0x4
Register 23 = 0x78
Register 24 = 0x78
Register 25 = 0x0
Register 26 = 0x80
Register 27 = 0x0
Register 28 = 0x0
Register 29 = 0x80
Register 30 = 0x0
Register 31 = 0x0
Register 32 = 0x18
Register 33 = 0x18
Register 34 = 0x0
Register 35 = 0x0
Register 36 = 0x0
Register 37 = 0x0
Register 38 = 0x0
Register 39 = 0x0
Register 40 = 0x0
Register 41 = 0x0
Register 42 = 0x6c
Register 43 = 0x81
Register 44 = 0x81
Register 45 = 0x1
Register 46 = 0x1
Register 47 = 0x81
Register 48 = 0x0
Register 49 = 0x0
Register 50 = 0x0
Register 51 = 0xe
Register 52 = 0x1
Register 53 = 0x1
Register 54 = 0x81
Register 55 = 0x0
Register 56 = 0x0
Register 57 = 0x0
Register 58 = 0xe
Register 59 = 0x0
Register 60 = 0x0
Register 61 = 0x0
Register 62 = 0x1
Register 63 = 0x1
Register 64 = 0x81
Register 65 = 0xe
Register 66 = 0x0
Register 67 = 0x0
Register 68 = 0x0
Register 69 = 0x1
Register 70 = 0x1
Register 71 = 0x81
Register 72 = 0xe
Register 73 = 0x1
Register 74 = 0x1
Register 75 = 0x81
Register 76 = 0x1
Register 77 = 0x1
Register 78 = 0x81
Register 79 = 0x8
Register 80 = 0x1
Register 81 = 0x1
Register 82 = 0x81
Register 83 = 0x0
Register 84 = 0x0
Register 85 = 0x0
Register 86 = 0xa
Register 87 = 0x0
Register 88 = 0x0
Register 89 = 0x0
Register 90 = 0x1
Register 91 = 0x1
Register 92 = 0x81
Register 93 = 0xa
Register 94 = 0x0
Register 95 = 0x0
Register 96 = 0x0
Register 97 = 0x0
Register 98 = 0x0
Register 99 = 0x0
Register 100 = 0x0
Register 101 = 0x0
Register 102 = 0x2
Register 103 = 0x0
Register 104 = 0x0
Register 105 = 0x0
Register 106 = 0x0
Register 107 = 0x0
Register 108 = 0x0
Register 109 = 0x0
Register 110 = 0xff
Register 111 = 0xff
Register 112 = 0xff
Register 113 = 0xff
Register 114 = 0xff
Register 115 = 0xff
Register 116 = 0xff
Register 117 = 0xff
Register 118 = 0xff
Register 119 = 0xff
Register 120 = 0xff
Register 121 = 0xff
Register 122 = 0xff
Register 123 = 0xff
Register 124 = 0xff
Register 125 = 0xff
Register 126 = 0xff
Register 127 = 0xff
MCBSP寄存器:
DAVINCI_MCBSP_DRR_REG = 0x 0
DAVINCI_MCBSP_DXR_REG = 0x 0
DAVINCI_MCBSP_SPCR_REG = 0x 2f30000 //FREE =1, FRST=1,GRST=1,XINTM=3h,XRST=1,
DAVINCI_MCBSP_RCR_REG = 0x 0
DAVINCI_MCBSP_XCR_REG = 0x 450140 //RPHASE =0,RDATDLY=1,RFRLEN1=1h(2 words in phase 1), I chaged this register to 0x80450040,result is same.
DAVINCI_MCBSP_SRGR_REG = 0x201f0f01
DAVINCI_MCBSP_PCR_REG = 0x 3
主程序只打开playback设备用于播放,读取WAV.c的数据然后播放。程序如下
int main()
{
int ret = OSA_EFAIL;
DRV_AudioConfig Audioconfig;
int num=30000,i=0;
gAUDIO_ctrl= (AUDIO_Ctrl*)malloc(sizeof(AUDIO_Ctrl));
Audioconfig.deviceId =0;
Audioconfig.numChannels=1;
Audioconfig.samplingRate=SAMPLE_RATE;
Audioconfig.buff_Of_Samples=NUMSAMPLES;
ret = DRV_audioOpen2(&(gAUDIO_ctrl->audioHndl2), &Audioconfig);
if( ret != OSA_SOK )
{
return ret;
}
while(1)
{
for(i=0;i<33;i++)
{ DRV_audiowrite(&(gAUDIO_ctrl->audioHndl2),rawData, 30000);}
}
}
运行程序有时候会提示错误:error from write : Input/output error. 有时候又没有这个错误
有人遇到过这个问题吗,不知道是驱动设置错了还是主程序不对,请高手指教啊!
另外,我把mcbsp设置为主模式,aic32为从模式,FSX和CLKX总是没有始终信号输出,DX有数据输出。不知道怎么回事,打印了PSC,PLL,PINMUX0等寄存器都没有问题,实在是不知道问题出在哪里?DMA这块我不是很清楚,会不会跟这里设置有关,问题怎么查呢?