Using SPI port with MC1322x ....what's wrong?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Using SPI port with MC1322x ....what's wrong?

Jump to solution
1,861 Views
stevasway
Contributor III

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?

0 Kudos
1 Solution
729 Views
stevasway
Contributor III

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?

View solution in original post

0 Kudos
4 Replies
730 Views
stevasway
Contributor III

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?

0 Kudos
729 Views
stevasway
Contributor III

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);
      }
    }
  }
}

0 Kudos
729 Views
stevasway
Contributor III

It seems to be not enough.

0 Kudos
729 Views
redbee
Contributor III

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.

 

0 Kudos