程序总是卡死在“SSIDataGet(SSI0_BASE, &temp
);”这里。
#include
#include
#include "inc/tm4c123gh6pm.h"
#include "inc/hw_gpio.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_uart.h"
#include "driverlib/ssi.h"
#include "driverlib/uart.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "driverlib/sysctl.h"
uint32_t i = 0;
uint32_t temp[16]=[0];
void main()
[
unsigned long i = 0;
// 运行在40MHz 模式下
SysCtlClockSet(SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
//配置串口通信
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
GPIOPinConfigure(GPIO_PA0_U0RX);
GPIOPinConfigure(GPIO_PA1_U0TX);
GPIOPinTypeUART(GPIO_PORTA_BASE,GPIO_PIN_0|GPIO_PIN_1);
UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 9600,
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
// 使能 SSI0模块
SysCtlPeripheralEnable(SYSCTL_PERIPH_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);
// 设置 SSI 协议、工作模式、位速率和数据宽度
// SSI0_BASE - 使用 SSI0
// SysCtlClockGet() - 提供到 SSI0的时钟速率
// SSI_FRF_MOTO_MODE_0 - 数据传输协议,极性: 1,相位: 1
// SSI_MODE_SLAVE - 模式选择:配置为从机模式
// 1000000 - 设定 SSI模块位速率为 1M
// 8 - 8 位数据宽度
SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_3,SSI_MODE_SLAVE, 1000000, 8);
// 使能 SSI模块
SSIEnable(SSI0_BASE);
// 清除缓冲区的数据,确保读到的数据时正确的。
while(SSIDataGetNonBlocking(SSI0_BASE, &temp[0]));
// 进入死循环
while(1)
[
// 接收数据
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, ~GPIO_PIN_3); //把片选拉低
for(i = 0;i < 16; i++)
[
SSIDataGet(SSI0_BASE, &temp);
UARTCharPut(UART0_BASE,temp);
]
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, GPIO_PIN_3); //把片选拉高
UARTCharPut(UART0_BASE,'n');
// 清除缓冲区的数据,确保读到的数据时正确的。
while(SSIDataGetNonBlocking(SSI0_BASE, &temp[0]));
]
]