Hello,
I followed the example in Biospsp folder to initialize SPI1 which works fine and then I tried to initialize SPI0 using similar code which you can see below, yet trying to read/write something from the SPI0 returns -1. Any idea why is not working?
Sys/BIOS app.cfg file contains:
var dev2Params = new DEV.Params();
dev2Params.instance.name = "devSpi_0";
dev2Params.initFxn = "&userSpi0Init";
dev2Params.deviceParams = "&g_spi0Params";
dev2Params.devid = 0;
Program.global.devSpi_0 = DEV.create("/spi0", "&Spi_IOMFXNS", dev2Params);
var dev3Params = new DEV.Params();
dev3Params.instance.name = "devSpi_1";
dev3Params.initFxn = "&userSpi1Init";
dev3Params.deviceParams = "&g_spi1Params";
dev3Params.devid = 1;
Program.global.devSpi_1 = DEV.create("/spi1", "&Spi_IOMFXNS", dev3Params);
Main.c code:
GIO_Handle m_spiHandle=NULL;
void userSpi0Init()
{
g_spi0Params = Spi_PARAMS;
g_spi0Params.hwiNumber = 9;
g_spi0Params.spiHWCfgData.intrLevel = FALSE;
g_spi0Params.opMode = Spi_OpMode_DMAINTERRUPT;
g_spi0Params.outputClkFreq = 10000000;
g_spi0Params.loopbackEnabled = FALSE;
g_spi0Params.edmaHandle = NULL;
g_spi0Params.spiHWCfgData.masterOrSlave = Spi_CommMode_MASTER;
g_spi0Params.spiHWCfgData.pinOpModes = Spi_PinOpMode_SPISCS_4PIN;
g_spi0Params.spiHWCfgData.configDatafmt[0].charLength = 8;
g_spi0Params.spiHWCfgData.configDatafmt[1].charLength = 16;
g_spi0Params.spiHWCfgData.configDatafmt[0].clkHigh = TRUE ;
g_spi0Params.spiHWCfgData.configDatafmt[0].lsbFirst = FALSE;
g_spi0Params.spiHWCfgData.configDatafmt[0].oddParity = FALSE;
g_spi0Params.spiHWCfgData.configDatafmt[0].parityEnable = FALSE ;
g_spi0Params.spiHWCfgData.configDatafmt[0].phaseIn = FALSE ;
g_spi0Params.spiHWCfgData.configDatafmt[0].waitEnable = FALSE;
//g_spiParams.spiHWCfgData.configDatafmt[0].wdelay = 0;
g_spi0Params.spiHWCfgData.csDefault = 0xff;
g_spi0Params.spiHWCfgData.intrLevel = TRUE;
EDMA3_DRV_Result edmaResult = 0;
Error_Block eb;
Spi_ChanParams chanParams;
GIO_Params ioParams;
Error_init(&eb);
/*
* Initialize channel attributes.
*/
GIO_Params_init(&ioParams);
/* initialize the stream attributes */
chanParams.hEdma = edma3init(0, &edmaResult);
ioParams.chanParams = &chanParams;
//g_spi0Params.edmaHandle = chanParams.hEdma;
/* create SPI channel for transmission */
m_spiHandle = GIO_create("/spi0", GIO_INOUT, &ioParams, &eb);
if (NULL == m_spiHandle)
{
return 0;
}
}
int Transfer(uint8_t cs, uint8_t *pWriteBuffer, uint8_t *pReadBuffer, uint16_t bufferLength)
{
Spi_DataParam dataparam;
SizeT size = 0;
Error_Block eb;
Error_init(&eb);
/* clear the spi params data structure */
memset(&dataparam, 0x00, sizeof(Spi_DataParam));
dataparam.chipSelect = 1 << cs;
dataparam.bufLen = bufferLength;
dataparam.inBuffer = pReadBuffer;
dataparam.outBuffer = pWriteBuffer;
dataparam.flags = Spi_CSHOLD;
dataparam.dataFormat = Spi_DataFormat_0;
size = dataparam.bufLen;
/* write command to FLASH */
int32_t error = GIO_submit(m_spiHandle, IOM_WRITE, &dataparam, &size, NULL);
if ((error != 0) && (size != 0))
{
System_printf("SPI0 Write: Data Write Failed: %d\n", error);
return 0;
}
return size;
}
Thank you in advance,
David.