Part Number: F28M36P63C2
Other Parts Discussed in Thread: CONTROLSUITE
Tool/software: Code Composer Studio
Hello,
I am trying to write a SPI Transfer function to write data onto an Crystalfontz OFAL1602C OLED. This is how i am writing the SPI transfer function, i am transferring 10 bits in each transfer because that's how the OLED driver WS0012 operates in spi mode.
void SPI_Transfer (Uint8 type,Uint8 value)
{
EALLOW;
GpioG1DataRegs.GPADAT.bit.GPIO19=0; //Enable the active low slave select pin on the LCD to start communication
if(DATA==type) //Set the data(1)/command(0) flag
{
SpiaRegs.SPITXBUF=1; //Set MOSI high
while(SpiaRegs.SPISTS.bit.INT_FLAG !=1) { }
dummy5 = SpiaRegs.SPIRXBUF;
}
else
{
SpiaRegs.SPITXBUF=0; //Pull MOSI Low
while(SpiaRegs.SPISTS.bit.INT_FLAG !=1) { }
dummy5 = SpiaRegs.SPIRXBUF;
}
//Clock it in.
GpioG1DataRegs.GPADAT.bit.GPIO18=0;
GpioG1DataRegs.GPADAT.bit.GPIO19=1;
//Clear the read(1)/write(0) flag to write
SpiaRegs.SPITXBUF=0; // Pull MOSI Low because you're always writing to the LCD , not reading from it.
while(SpiaRegs.SPISTS.bit.INT_FLAG !=1) { }
dummy3 = SpiaRegs.SPIRXBUF;
//Clock in the data
GpioG1DataRegs.GPADAT.bit.GPIO18=0;
GpioG1DataRegs.GPADAT.bit.GPIO18=1;
for(mask=0x80;mask;mask>>=1)
{
if(mask & value)
{
SpiaRegs.SPITXBUF=1; // if true, SET MOSI High
while(SpiaRegs.SPISTS.bit.INT_FLAG !=1) { }
dummy4 = SpiaRegs.SPIRXBUF;
}
else
{
SpiaRegs.SPITXBUF=0; //if false, PULL MOSI low
while(SpiaRegs.SPISTS.bit.INT_FLAG !=1) { }
dummy5 = SpiaRegs.SPIRXBUF;
}
//CLOCK IT IN
GpioG1DataRegs.GPADAT.bit.GPIO18=0;
GpioG1DataRegs.GPADAT.bit.GPIO18=1;
}
// Disable the Active low Slave select pin and end communication for one cycle
GpioG1DataRegs.GPADAT.bit.GPIO19=1;
EDIS;
}
I am looking at the oscilloscope output for the SPI-A pins on the DSP board and i am getting correct outputs on the SPI-STEA signal and SPI-CLK signal. But i don't see any outputs on my MOSI pin.
What am i doing wrong?? Any suggestion or help is greatly appreciated. I have also included my spi init and config function below,
void InitSpi(void)
{
// Initialize SPI-A
// Set reset low before configuration changes
// Clock polarity (0 == rising, 1 == falling)
// 16-bit character
//** Enable loop-back
SpiaRegs.SPICCR.bit.SPISWRESET = 0;
SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;
SpiaRegs.SPICCR.bit.SPICHAR = (10-1) ;
SpiaRegs.SPICCR.bit.SPILBK = 0; //disable loopback
// Enable master (0 == slave, 1 == master)
// Enable transmission (Talk)
// Clock phase (0 == normal, 1 == delayed)
// SPI interrupts are disabled
SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;//In Master mode
SpiaRegs.SPICTL.bit.TALK = 1; //Enable transmission
SpiaRegs.SPICTL.bit.CLK_PHASE = 0; //phase normal for the clock
SpiaRegs.SPICTL.bit.SPIINTENA = 0; //Disable Spi interrupts
// Set the baud rate
SpiaRegs.SPIBRR = SPI_BRR; //baud rate for SPI
// Set FREE bit
// Halting on a breakpoint will not halt the SPI
SpiaRegs.SPIPRI.bit.FREE = 1;
// Release the SPI from reset
SpiaRegs.SPICCR.bit.SPISWRESET = 1;
}
void InitSpiaGpio()
{
EALLOW;
/* Enable internal pull-up for the selected pins */
// Pull-up enable should be set in the
// GPIO_O_PUR register in the M3 code.
/* Set qualification for selected pins to asynch only */
// This will select asynch (no qualification) for the selected pins.
// Comment out other unwanted lines.
GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3; // Asynch input GPIO16 (SPISIMOA)
GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; // Asynch input GPIO17 (SPISOMIA)
GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3; // Asynch input GPIO18 (SPICLKA)
GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3; // Asynch input GPIO19 (SPISTEA)
// GpioCtrlRegs.GPBQSEL2.bit.GPIO54 = 3; // Asynch input GPIO16 (SPISIMOA)
// GpioCtrlRegs.GPBQSEL2.bit.GPIO55 = 3; // Asynch input GPIO17 (SPISOMIA)
// GpioCtrlRegs.GPBQSEL2.bit.GPIO56 = 3; // Asynch input GPIO18 (SPICLKA)
// GpioCtrlRegs.GPBQSEL2.bit.GPIO57 = 3; // Asynch input GPIO19 (SPISTEA)
/* Configure SPI-A pins using GPIO regs*/
// This specifies which of the possible GPIO pins will be SPI functional pins.
// Comment out other unwanted lines.
GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1; // Configure GPIO16 as SPISIMOA
GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; // Configure GPIO17 as SPISOMIA
GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; // Configure GPIO18 as SPICLKA
GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 1; // Configure GPIO19 as SPISTEA
// GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 1; // Configure GPIO54 as SPISIMOA
// GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 1; // Configure GPIO55 as SPISOMIA
// GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 1; // Configure GPIO56 as SPICLKA
// GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 1; // Configure GPIO57 as SPISTEA
EDIS;
}
Thank you,
Srini