两块LM3S9B96通信不成功。



我在一块板子上用SSI0做主发送数据,SSI1做从接收数据可以。但是我把程序拆分开,分别把主从程序下载到两块LM3S9B96板子中,链接都建立不上,用示波器根本看不到波形。下面是两个程序

Master程序:

#include "inc/hw_memmap.h"

#include "inc/hw_ssi.h"

#include "inc/hw_types.h"

#include "driverlib/ssi.h"

#include "driverlib/gpio.h"

#include "driverlib/sysctl.h"

#include "utils/uartstdio.h"

#define NUM_SSI_DATA 8

#define USER_BITRATE 1000

//*****************************************************************************

// 设定 SSI0 为SPI主模式,

//*****************************************************************************

int

main(void)

{

   unsigned long ulDataTx[NUM_SSI_DATA];

   unsigned long ulindex;

   SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |

                  SYSCTL_XTAL_16MHZ);

   SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0);

   SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

   //设定PA2&PA3&PA4&PA5为SSI0引脚,

   GPIOPinConfigure(GPIO_PA2_SSI0CLK);

   GPIOPinConfigure(GPIO_PA3_SSI0FSS);

   GPIOPinConfigure(GPIO_PA4_SSI0RX);

   GPIOPinConfigure(GPIO_PA5_SSI0TX);

   GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 |

                  GPIO_PIN_2);

   SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(),

                      SSI_FRF_MOTO_MODE_0,

                      SSI_MODE_MASTER, USER_BITRATE, 8);

   SSIEnable(SSI0_BASE);

   while(1)

{

   ulDataTx[0] = 'M';

   ulDataTx[1] = '3';

   ulDataTx[2] = 'S';

   ulDataTx[3] = 'P';

   ulDataTx[4] = 'I';

   ulDataTx[5] = 'S';

   ulDataTx[6] = 'S';

   ulDataTx[7] = 'I';

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

   {

       SSIDataPut(SSI0_BASE, ulDataTx[ulindex]);

   }

   //确认SSI发送是否为忙,确认的发送是否已完成

   while(SSIBusy(SSI0_BASE))

   {

   }

}

}

从机程序为:

#include "inc/hw_memmap.h"

#include "inc/hw_ssi.h"

#include "inc/hw_types.h"

#include "driverlib/ssi.h"

#include "driverlib/gpio.h"

#include "driverlib/sysctl.h"

#include "utils/uartstdio.h"

#define NUM_SSI_DATA 8

#define USER_BITRATE 1000

void

InitConsole(void)

{

   SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

   GPIOPinConfigure(GPIO_PA0_U0RX);

   GPIOPinConfigure(GPIO_PA1_U0TX);

   GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);

   UARTStdioInit(0);

}

//*****************************************************************************

// SSI1 为SPI从模式,接收

//*****************************************************************************

int

main(void)

{

   unsigned long ulDataRx[NUM_SSI_DATA];

   unsigned long ulindex;

   SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |

                  SYSCTL_XTAL_16MHZ);

   InitConsole();

   UARTprintf("SSI ->\n");

   UARTprintf("  Mode: SPI\n");

   UARTprintf("  Data: 8-bit\n\n");

   SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI1);

   SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);

   //设定PA2&PA3&PA4&PA5为SSI1引脚,

   GPIOPinConfigure(GPIO_PE0_SSI1CLK);

   GPIOPinConfigure(GPIO_PE1_SSI1FSS);

   GPIOPinConfigure(GPIO_PE2_SSI1RX);

   GPIOPinConfigure(GPIO_PE3_SSI1TX);

   GPIOPinTypeSSI(GPIO_PORTE_BASE, GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1 |

                  GPIO_PIN_0);

   SSIConfigSetExpClk(SSI1_BASE, SysCtlClockGet(),

                      SSI_FRF_MOTO_MODE_0,

                      SSI_MODE_SLAVE, USER_BITRATE, 8);

   SSIEnable(SSI1_BASE);

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

   {

   }

   UARTprintf("\nReceived:\n  ");

while(1)

{

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

   {

       //接收数据,把一个数据读出SSI1 的RX FIFO(如无数据直接返回)

       SSIDataGetNonBlocking(SSI1_BASE, &ulDataRx[ulindex]);

       ulDataRx[ulindex] &= 0x00FF;

       UARTprintf("'%c' ", ulDataRx[ulindex]);

   }

  }

}

请专家帮忙看下,先谢谢了。