lm3s9b96通过spi与93c56读写数据



你好!

如题,lm3s9b96通过spi与93c56读写数据,存在如下问题:

(1)lm3s9b96-spi中与93c56读写数据在设置中是否应注意以下几项a.spi是低电平有效,所以在配置的时候不能只接用,而是把fss单独拉出来,通过io配置来用?b。在spi配置中选用SSI_FRF_NMW?

(2)我把ti公司提供的例程更改了一下:配置程序    SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0);

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

GPIODirModeSet(GPIO_PORTA_BASE, SSI_CS, GPIO_DIR_MODE_OUT);     // 设置 GPIO PA3为输出口 

GPIOPadConfigSet(GPIO_PORTA_BASE, SSI_CS, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);

    GPIOPinConfigure(GPIO_PA2_SSI0CLK);

    GPIOPinConfigure(GPIO_PA4_SSI0RX);

    GPIOPinConfigure(GPIO_PA5_SSI0TX);

GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_2);

SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_NMW,SSI_MODE_MASTER, 1000000, 8);

SSIEnable(SSI0_BASE);

(3)应用程序:

GPIOPinWrite(GPIO_PORTA_BASE, SSI_CS, SSI_CS);   

while(SSIDataGetNonBlocking(SSI0_BASE, &ulDataRx[0]))

      {

      }

    ulDataTx[0] = 's';

    ulDataTx[1] = 'p';

    ulDataTx[2] = 'i';

   while(SSIDataGetNonBlocking(SSI0_BASE, &ulDataRx[0]))

      {

      }

    for(ulindex = 0; ulindex < NUM_SSI_DATA; ulindex++)

    {

        SSIDataPut(SSI0_BASE, ulDataTx[ulindex]);

 }

GPIOPinWrite(GPIO_PORTA_BASE, SSI_CS, 0);

GPIOPinWrite(GPIO_PORTA_BASE, SSI_CS, SSI_CS);

 

while(!SSIBusy(SSI0_BASE))

    {

    }

 

 

      for(ulindex = 0; ulindex < NUM_SSI_DATA; ulindex++)

    {

 

        SSIDataGet(SSI0_BASE, &ulDataRx[ulindex]);

 

    }

GPIOPinWrite(GPIO_PORTA_BASE, SSI_CS, 0);

 

(4)通过示波器观察SSI0TX的数据正确,但SSI0RX不正确(pGpGpGuF),请问那个地方出现问题?请各位专家给与答复!

  • 用GPIO是可以的。你说的RX不正确指的是没有数据还是与从某处发来的数据不同?

    看你(3)中发送了”spi“,接收的数据是哪里来的?用Loopback吗?如果是想写93C56则还要包括地址数据等

  • 你对一下你的读、写时序是否与93C56的规格书上一致。对比接收到的数据(示波器上看),看看是软件的RX问题还是TX时数据时序已经错了,像检查这些低速数据通讯类的问题,一般是用示波器来分析数据时序是最快的