一块TI的lm3s系列的arm单片机用ssi发送信息给另一块芯片,...
时间:10-02
整理:3721RD
点击:
一块TI的lm3s系列的arm单片机用ssi发送信息给另一块芯片,为什么第一次不能发送0x00。红色的那一句通不过。我用的是问w5200作为连接ethernet的芯片,不知道如下代码是否可以建立起mcu和w5200的联系。我用的是spi模式,代码如下:
//
#include "inc/lm3s8962.h"
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "inc/hw_ssi.h"
#include "driverlib/sysctl.h" // 与系统配置有关
#include "driverlib/gpio.h" //与操作GPIO有关
#include "driverlib/ssi.h" //与操作SSI有关
volatile unsigned long ul_delay=0;
unsigned long ul_buf;
long num;
int main(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
unsigned char jtagp;
GPIOPinTypeGPIOInput(GPIO_PORTD_BASE,GPIO_PIN_7);
jtagp = GPIOPinRead(GPIO_PORTD_BASE,GPIO_PIN_7);
//jtagp = 0x01;
if(jtagp == 0x80 )
{
return 0;
}
// 设置系统时钟
SysCtlClockSet(SYSCTL_SYSdiv_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_8MHZ);
// 使能SSI1和GPIOD
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE | SYSCTL_PERIPH_GPIOD);
// 配置PD.4输出
GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_4);
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_4,0X10);
// 配置SSI端口:SSI1CLK/SSI1FSS/SSI1RX/SSI1TX (8mA,弱上拉)
GPIOPinTypeSSI(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
// 禁止SSI0接口
SSIDisable(SSI1_BASE);
// 配置SSI0: 主机模式,SSICLK=8MHz,Freescale SPI帧格
SSIConfigSetExpClk(SSI1_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_3,
SSI_MODE_MASTER, 115200, 8);
// 使能SSI0接口
SSIEnable(SSI1_BASE);
while(1)
{
// 发送address到发送FIFO
SSIDataPut(SSI1_BASE, 0x00);//这一句有问题
SSIDataPut(SSI1_BASE, 0x1f);
SSIDataPut(SSI1_BASE, 0x00);
SSIDataPut(SSI1_BASE, 0x01);
// 读接收FIFO到ul_buf
SSIDataGet(SSI1_BASE, &ul_buf);
// 判断ul_buf是否为0x03,是的话,LED闪烁一次
if(ul_buf==0x03)
{
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_4,
~GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_4));
}
// 延时
for(ul_delay=0; ul_delay<500000; ul_delay++);
}
}
//
#include "inc/lm3s8962.h"
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "inc/hw_ssi.h"
#include "driverlib/sysctl.h" // 与系统配置有关
#include "driverlib/gpio.h" //与操作GPIO有关
#include "driverlib/ssi.h" //与操作SSI有关
volatile unsigned long ul_delay=0;
unsigned long ul_buf;
long num;
int main(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
unsigned char jtagp;
GPIOPinTypeGPIOInput(GPIO_PORTD_BASE,GPIO_PIN_7);
jtagp = GPIOPinRead(GPIO_PORTD_BASE,GPIO_PIN_7);
//jtagp = 0x01;
if(jtagp == 0x80 )
{
return 0;
}
// 设置系统时钟
SysCtlClockSet(SYSCTL_SYSdiv_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_8MHZ);
// 使能SSI1和GPIOD
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE | SYSCTL_PERIPH_GPIOD);
// 配置PD.4输出
GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_4);
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_4,0X10);
// 配置SSI端口:SSI1CLK/SSI1FSS/SSI1RX/SSI1TX (8mA,弱上拉)
GPIOPinTypeSSI(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
// 禁止SSI0接口
SSIDisable(SSI1_BASE);
// 配置SSI0: 主机模式,SSICLK=8MHz,Freescale SPI帧格
SSIConfigSetExpClk(SSI1_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_3,
SSI_MODE_MASTER, 115200, 8);
// 使能SSI0接口
SSIEnable(SSI1_BASE);
while(1)
{
// 发送address到发送FIFO
SSIDataPut(SSI1_BASE, 0x00);//这一句有问题
SSIDataPut(SSI1_BASE, 0x1f);
SSIDataPut(SSI1_BASE, 0x00);
SSIDataPut(SSI1_BASE, 0x01);
// 读接收FIFO到ul_buf
SSIDataGet(SSI1_BASE, &ul_buf);
// 判断ul_buf是否为0x03,是的话,LED闪烁一次
if(ul_buf==0x03)
{
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_4,
~GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_4));
}
// 延时
for(ul_delay=0; ul_delay<500000; ul_delay++);
}
}