我在一块板子上用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]);
}
}
}
请专家帮忙看下,先谢谢了。