我在一块板子上用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主模式,//*****************************************************************************intmain(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 1000voidInitConsole(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从模式,接收//*****************************************************************************intmain(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 ->
"); UARTprintf(" Mode: SPI
"); UARTprintf(" Data: 8-bit
"); 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("
Received:
"); 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]); } }} 请大家帮忙看看怎么回事?
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
主机 从机
SSI0CLK (PA2) ---> SSI1CLK (PE0)
SSI0Fss (PA3) ---> SSI1Fss (PE1)
SSI0Tx (PA5) ---> SSI1Rx (PE2)
如果可以,请问楼主是不是要想SPI接收到数据,就需要发送一个无效数据才能读取接收到的数据?
一周热门 更多>