EmbeddedRelated.com
Forums

AT91SAM SSC Transmit and Receive

Started by raak...@yahoo.com March 16, 2009
i am newbie and trying to transfer some data between SSC0 and SSC1 of SAM9263 processor .SSC0 TX is connected with SSC1 RX by an Hardware bridge between them.when i try to send the data without PDC i am able to receive all the words except the first which is default value and when using PDC i don\'t see any data transmitting on TX pin.can anyone help me with this problem.

############when using PDC############

#define BUFFER 256
ulong int inBuffer[BUFFER];
ulong int outBuffer[BUFFER];

#define tcmr_bwt 0xff000424
#define tfmr_bwt 0x01900fbf
#define rcmr_bwt 0xff000422
#define rfmr_bwt 0x01000f9f

int main (void)
{

AT91PS_SSC pSSC_0, pSSC_1;
ulong int *pOut, *pIn,status[2];
ulong i;
pOut = outBuffer;
pIn = inBuffer;

pSSC_0 = SSC0_init (tcmr_bwt, tfmr_bwt, rcmr_bwt, rfmr_bwt);
pSSC_1 = SSC1_init (tcmr_bwt, tfmr_bwt, rcmr_bwt, rfmr_bwt);

memset (pOut, 0xf2, BUFFER);
memset (pIn , 0x00, BUFFER);

status[0] = SSC_SendDMA (pSSC_0, pIn ,64);
status[1] = SSC_RecvDMA (pSSC_1, pOut,64 );

while ( !(SSC_isSendDone (pSSC_0) && SSC_isRecvDone (pSSC_1))) ;

return 1;
}
uchar SSC_SendDMA (AT91PS_SSC pSSC, void *pBuffer, ushort nBytes)
{
uint i;
if ( !(pSSC->SSC_TCR)) {
// first buffer can be initialized
pSSC->SSC_TPR = (ulong) pBuffer;
pSSC->SSC_TCR = nBytes;

// enable PDC transmission
pSSC->SSC_PTCR = AT91C_PDC_TXTEN;
i= (pSSC->SSC_PTSR);
sprintf(debug_PuTx_text,\"SSC_ptsr 0x%.8x\\n\", i);
debug_PuTx (debug_PuTx_text);
// enable transmitter
pSSC->SSC_CR = AT91C_SSC_TXEN;
return 2;
}
else if ( !(pSSC->SSC_TNCR)) {
// only the next buffer can be initialized
pSSC->SSC_TNPR = (ulong) pBuffer;
pSSC->SSC_TNCR = nBytes;

// enable PDC transmission
pSSC->SSC_PTCR = AT91C_PDC_TXTEN;

// enable transmitter
pSSC->SSC_CR = AT91C_SSC_TXEN;
return 1;
}
else {
// All buffer are in use...
return 0;
}
}
receive DMA is also same as send DMA , except the pins..
###########without PDC###########

int main(void){
unsigned int i,k,count=0;
AT91PS_SSC pSSC0, pSSC1;
UINT32 data_out=0;
UINT32 data_in[64] ={ 0};
#define tcmr_bwt 0x0f000424
#define tfmr_bwt 0x019000bf
#define rcmr_bwt 0x0f000424
#define rfmr_bwt 0x0100009f

pSSC0 = SSC0_init (tcmr_bwt, tfmr_bwt,rcmr_bwt, rfmr_bwt );

pSSC1 = SSC1_init (tcmr_bwt, tfmr_bwt,rcmr_bwt, rfmr_bwt);

meset().....//initialing data_in with some data

for(i=0;i<64;i++){

SSC_Send(pSSC0,data_in[i]);
data_out= SSC_Receive(pSSC1);
if(data_out != data_in[i])count++;
}
return (0);
}

any hint to the problem or small examples are welcome