I have configured McBSP0 in DLB mode.McBSP internal clock is used to generate CLKR/X & FSR/X. Also,FSGM=1 & FPER =32 bit frame & FWID =1.In the code i have tried to send 4 data words using DLB mode.But ,the problem is i'm recieving 1st data correctly . But from 2nd data onwards, i'm recieving different data.Please suggest on this issue.
void transfer(McBSP_reg *McBSP,unsigned int *source,unsigned int * dest)
{while(!(McBSP->SPCR & (0x1<<17))); //wait until XRDY =1
McBSP->DXR=*source;
printf("transmitted value:\t%02X\n",McBSP->DXR);
if(McBSP->SRGR&(0X1<<28)) //if FSGM=1
if(McBSP->SPCR&(0x1<<18))
McBSP->SPCR |=0x1<<23; //FRST=1
while(!(McBSP->SPCR&0x2)) ; //until RRDY=1
*dest=McBSP->DRR;
printf("recieved value:\t%02X\n",*dest); } void main() {unsigned int data[4],Rxdata,i; data[0]=5; data[1]=2; data[2]=3; data[3]=6; Rxdata=0; PLLC0_init(); PLLC1_init(); PSC1_LPSC_Enable(0,14);
PINMUX1=0x22222220;
PINMUX2=0x02222220;
McBSP_init(McBSP0);
for(i=0;i<4;i++)
transfer(McBSP0,&data[i],&Rxdata);
}
void McBSP_init(McBSP_reg *McBSP)
{McBSP->SPCR &=~(0x00C000000);
while(McBSP->SPCR&0x00C000000);
McBSP->SPCR &=~(0x00010001);
McBSP->SRGR |=(0x1<<28) |0x2 ; //FSGM=1
McBSP->SRGR |=(0x20<<20)|(0x1<<8); //FPER =32 ,FWID=1
McBSP->PCR |=(0x1<<11)|(0x1<<10)|(0x1<<9)|(0x1<<8);
McBSP->XCR =0x104A0;
McBSP->RCR =0x104A0;
McBSP->XCR |=0x1<<18;
McBSP->RCR |=0x1<<18;
while(McBSP->SPCR & 0xC00000);
while(McBSP->SPCR & 0x10001);
McBSP->SRGR =McBSP->SRGR | (0x1<<29); //CLKSM=1
McBSP->PCR &= ~(0x80); //SCLKME=0
wait(2*150);
McBSP->SPCR |=0x1<<22;
wait(2*50);
McBSP->SPCR |= 0x1<<16);
wait(2*50);
if(McBSP->SPCR & (0x1<<19))
McBSP->SPCR &= ~(0x1<<16);
McBSP->SPCR |=0x10001;
}