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 + AIC32 mcbsp slave mode and master mode settings

我现在使用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这块我不是很清楚,会不会跟这里设置有关,问题怎么查呢?

x 出现错误。请重试或与管理员联系。