I'm trying to use the MC1322x spi port
void SPI_Init()
{
uint32_t Command=0xff;
//CLK
Gpio_SetPinFunction(gGpioPin7_c, gGpioNormalMode_c);
Gpio_SetPinDir(gGpioPin7_c, gGpioDirOut_c);
Gpio_SetPinData(gGpioPin7_c, gGpioPinStateLow_c);
//MOSI
Gpio_SetPinFunction(gGpioPin6_c, gGpioNormalMode_c);
Gpio_SetPinDir(gGpioPin6_c, gGpioDirOut_c);
Gpio_SetPinData(gGpioPin6_c, gGpioPinStateLow_c);
//MISO
Gpio_SetPinFunction(gGpioPin5_c, gGpioAlternate1Mode_c);
Gpio_SetPinDir(gGpioPin5_c, gGpioDirIn_c);
//Gpio_SetPinData(gGpioPin5_c, gGpioPinStateLow_c);
//SS
Gpio_SetPinFunction(gGpioPin4_c, gGpioNormalMode_c);
Gpio_SetPinDir(gGpioPin4_c, gGpioDirOut_c);
Gpio_SetPinData(gGpioPin4_c, gGpioPinStateHigh_c);
pConfig.Setup.Bits.SsSetup = ConfigSsSetupMasterHigh;
pConfig.Setup.Bits.SsDelay = ConfigSsDelay1Clk;
pConfig.Setup.Bits.SdoInactive = ConfigSdoInactiveZ;
pConfig.Setup.Bits.ClockFreq = ConfigClockFreqDiv256;
pConfig.Setup.Bits.Mode = ConfigModeMaster;
pConfig.Setup.Bits.S3Wire = ConfigS3WireInactive;
pConfig.Setup.Bits.ClockPol = ConfigClockPolPositive;
pConfig.Setup.Bits.ClockPhase = ConfigClockPhase1stEdge;
pConfig.ClkCtrl.Bits.DataCount = 8;
pConfig.ClkCtrl.Bits.ClockCount = 8;
ret = SPI_Open();
ret = SPI_SetConfig(&pConfig);
//SPI_SetCallback();
while(1)
{
Gpio_SetPinData(gGpioPin4_c, gGpioPinStateLow_c);
ret = SPI_SetTxAsync(Command);
SPI_StartAsync();
//SPI_Abort();
Gpio_SetPinData(gGpioPin4_c, gGpioPinStateHigh_c);
ret = SPI_GetStatus();
}
What's wrong?
Solved! Go to Solution.
This settings are enough to config the SPI port?
//CLK
Gpio_SetPinFunction(gGpioPin7_c, gGpioAlternate1Mode_c);
//MOSI
Gpio_SetPinFunction(gGpioPin6_c, gGpioAlternate1Mode_c);
//MISO
Gpio_SetPinFunction(gGpioPin5_c, gGpioAlternate1Mode_c);
//SS
Gpio_SetPinFunction(gGpioPin4_c, gGpioAlternate1Mode_c);
the SS is driven automatically using the SPI Libray?
This settings are enough to config the SPI port?
//CLK
Gpio_SetPinFunction(gGpioPin7_c, gGpioAlternate1Mode_c);
//MOSI
Gpio_SetPinFunction(gGpioPin6_c, gGpioAlternate1Mode_c);
//MISO
Gpio_SetPinFunction(gGpioPin5_c, gGpioAlternate1Mode_c);
//SS
Gpio_SetPinFunction(gGpioPin4_c, gGpioAlternate1Mode_c);
the SS is driven automatically using the SPI Libray?
Maybe it is mandatory to set the SPI_ISR? I tried to test the SPI_StartAsync() return value, and it was not
equal to gSpiErrNoError_c, so I inserted the SPI_ISR inititialization, and now the return value is ok.
IntAssignHandler(gSpiInt_c, (IntHandlerFunc_t)SPI_ISR);
ITC_SetPriority(gSpiInt_c, gItcNormalPriority_c);
ITC_EnableInterrupt(gSpiInt_c);
void SPICallBack(void)
{
static int i = 0;
//Maybe something flag to clear?
i++;
}
void SPI_Init()
{
uint32_t Command=0xff;
//CLK
Gpio_SetPinFunction(gGpioPin7_c, gGpioAlternate1Mode_c);
//Gpio_SetPinDir(gGpioPin7_c, gGpioDirOut_c);
//Gpio_SetPinData(gGpioPin7_c, gGpioPinStateLow_c);
//Gpio_SetPinData(gGpioPin7_c, gGpioPinStateHigh_c);
//MOSI
Gpio_SetPinFunction(gGpioPin6_c, gGpioAlternate1Mode_c);
//Gpio_SetPinDir(gGpioPin6_c, gGpioDirOut_c);
//Gpio_SetPinData(gGpioPin6_c, gGpioPinStateLow_c);
//MISO
Gpio_SetPinFunction(gGpioPin5_c, gGpioAlternate1Mode_c);
//Gpio_SetPinDir(gGpioPin5_c, gGpioDirIn_c);
//Gpio_SetPinData(gGpioPin5_c, gGpioPinStateLow_c);
//SS
Gpio_SetPinFunction(gGpioPin4_c, gGpioAlternate1Mode_c);
//Gpio_SetPinDir(gGpioPin4_c, gGpioDirOut_c);
//Gpio_SetPinData(gGpioPin4_c, gGpioPinStateHigh_c);
pConfig.Setup.Bits.SsSetup = ConfigSsSetupMasterAutoL;
pConfig.Setup.Bits.SsDelay = ConfigSsDelay1Clk;
pConfig.Setup.Bits.SdoInactive = ConfigSdoInactiveZ;
pConfig.Setup.Bits.ClockFreq = ConfigClockFreqDiv2;
pConfig.Setup.Bits.Mode = ConfigModeMaster;
pConfig.Setup.Bits.S3Wire = ConfigS3WireInactive;
//pConfig.Setup.Bits.ClockPol = ConfigClockPolPositive;
//pConfig.Setup.Bits.ClockPhase = ConfigClockPhase1stEdge;
pConfig.ClkCtrl.Bits.DataCount = 8;
pConfig.ClkCtrl.Bits.ClockCount = 8;
if (gSpiErrNoError_c == SPI_Open())
{
if (gSpiErrNoError_c == SPI_SetConfig(&pConfig))
{
//SPI_SetCallback((spiCallback_t)SPICallBack);
while(1)
{
Gpio_SetPinData(gGpioPin4_c, gGpioPinStateLow_c);
if (gSpiErrNoError_c == SPI_SetTxAsync(Command))
{
ret = SPI_StartAsync();
if (gSpiErrNoError_c != ret)
SPI_Abort();
}
Gpio_SetPinData(gGpioPin4_c, gGpioPinStateHigh_c);
}
}
}
}
It seems to be not enough.
See pg. 11-20 of the reference manual, but I'm pretty sure you need to set all of those pins to Alternate mode 1.
-Mar.