//spi.c
int first = 1;
void spi_Init ()
{
first = 1;
MCBSP_FSET(SPCR10, RRST, 0);
MCBSP_FSET(SPCR20, XRST, 0);
MCBSP_FSET(SPCR20, FRST, 0);
MCBSP_FSET(SPCR20, GRST, 0);
MCBSP_RSET (SPCR10,0x1030);
MCBSP_RSET (SPCR20,0x130);
MCBSP_RSET (RCR10,0);
MCBSP_RSET (RCR20,0x5);
MCBSP_RSET (XCR10,0);
MCBSP_RSET (XCR20,0x5);
MCBSP_RSET (SRGR10,0x8C7);
MCBSP_RSET (SRGR20,0x2009);
MCBSP_RSET (MCR10,0);
MCBSP_RSET (MCR20,0);
MCBSP_RSET (PCR0,0x0f0f);
MCBSP_RSET (RCERA0,0);
MCBSP_RSET (RCERB0,0);
MCBSP_RSET (XCERA0,0);
MCBSP_RSET (XCERB0,0);
MCBSP_wait();
MCBSP_FSET(SPCR10, RRST, 1);
MCBSP_FSET(SPCR20, XRST, 1);
MCBSP_wait();
}
void spi_Open ()
{
}
void spi_Close ()
{
}
void byteToSpi (unsigned char data)
{
volatile int i;
if (!first)
{
//check xrdy (only if not first write)
while (MCBSP_FGET(SPCR20,XRDY)== 0);
}
i=MCBSP_RGET (DRR10);
i=MCBSP_RGET (DRR10);
MCBSP_RSET (DXR20,0);
MCBSP_RSET (DXR10,data); //write output data to dxr
if (first)
{
MCBSP_FSET(SPCR20, FRST, 1);
MCBSP_FSET(SPCR20, GRST, 1);
MCBSP_wait(); //wait for Sample rate generator to settle
first = 0; //start sclk, /cs generator for first write
}
while (MCBSP_FGET (SPCR10,RRDY) == 0);//wait for completion
i=MCBSP_RGET (DRR10);//clear buffer
}
unsigned char spiToByte ()
{
unsigned char read1;
volatile int i;
while (MCBSP_FGET(SPCR20,XRDY)== 0); //wait for xrdy
i=MCBSP_RGET (DRR10);
i=MCBSP_RGET (DRR10);
i=MCBSP_RGET (DRR10);
//MCBSP_RSET (DXR20,0);
MCBSP_RSET (DXR10,0xAA); //dummy xmit to start clock and /cs, data is don't care
while (MCBSP_FGET (SPCR10,RRDY) == 0); //wait for data
read1 = MCBSP_RGET (DRR10); //read result
return read1;
}