/**--------------File Info---------------------------------------------------------------------------------
** File name: spi_rec.c
** Latest Version: 1.1
** Descriptions: 通过 SSI 发送接口循环向外输出 ,并通过SSI的接收接口接收回来通过UART在主机上显示。
**
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
/* 调用库函数的头文件 */
#include "hw_memmap.h"
#include "hw_types.h"
#include "hw_ssi.h"
#include "ssi.h"
#include "gpio.h"
#include "sysctl.h"
#include "systick.h"
#include "driverlib/uart.h"
#include "inc/hw_ints.h"
#include
#define BitRate 115200 /* 设定波特率 */
#define DataWidth 8 /* 设定数据宽度 */
unsigned long rec[16];
/*unsigned char DISP_TAB[16] = {
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E}; */
unsigned char DISP_TAB[] = {0xC0};
/*********************************************************************************************************
** Function name: delay
**
** Descriptions: 延时函数,输入参数越大,延时时间越长
**
** input parameters: uld 延时时间值
** output parameters: NONE
**
** Returned value: NONE
**
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void delay (unsigned long uld)
{
for( ;uld ;uld--);
}
/********************************************************************************************************/
void uartPutc(const char c)
{
UARTCharPut(UART0_BASE, c);
}
//
// 通过UART发送字符串
//
void uartPuts(const char *s)
{
while (*s != '\0') uartPutc(*(s++));
}
uart_init()
{
char s[40];
//
// Set the device pinout appropriately for this board.
//
//
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
//
// Enable the (non-GPIO) peripherals used by this example. PinoutSet()
// already enabled GPIO Port A.
//
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
//
// Enable processor interrupts.
//
IntMasterEnable();
//
// Set GPIO A0 and A1 as UART pins.
//
GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
//
// Configure the UART for 115,200, 8-N-1 operation.
//
UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 115200,
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
//
// Enable the UART interrupt.
//
IntEnable(INT_UART0);
UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT);
sprintf(s, "hello, world\r\n"); // 输出hello, world
uartPuts(s);
}
int main (void)
{
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHZ);
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI); /* 为SSI提供时钟 */
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); /* 为GPIOA端口提供时钟 */
/* 设置SPI为主机模式0,8位数据宽度,115200的波特率 */
SSIConfig(SSI_BASE, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, BitRate, DataWidth);
/* 设定 GPIO A 2~5 引脚为使用外设功能 */
GPIOPinTypeSSI(GPIO_PORTA_BASE, (GPIO_PIN_2 | GPIO_PIN_3 |
GPIO_PIN_4 | GPIO_PIN_5));
HWREG(SSI_BASE + SSI_O_CR1) |= SSI_CR1_LBM;
//SSIIntEnable(SSI_BASE ,SSI_RXFF|SSI_RXOR|SSI_RXTO);
SSIIntEnable(SSI_BASE ,SSI_RXTO|SSI_RXFF);
//SSIIntEnable(SSI_BASE ,SSI_TXFF);
SSIEnable(SSI_BASE); /* 使能SPI */
IntEnable(INT_SSI0);
uart_init();
// SSIDataPut(SSI_BASE, DISP_TAB[0]);
delay(10);
/*SSIDataPut(SSI_BASE, DISP_TAB[0]);
delay(10);
SSIDataPut(SSI_BASE, DISP_TAB[0]);
delay(10);
SSIDataPut(SSI_BASE, DISP_TAB[0]);
delay(10);
SSIDataPut(SSI_BASE, DISP_TAB[0]);
delay(10);
SSIDataPut(SSI_BASE, DISP_TAB[0]); */
while (1)
{
SSIDataPut(SSI_BASE, DISP_TAB[0]); /* 循环发送数据 */
delay(1000);
}
}
void SPI_ISR(void)
{
unsigned long ulStatus;
char s[40];
ulStatus = SSIIntStatus(SSI_BASE,true);
SSIIntClear(SSI_BASE,ulStatus);
while((HWREG(SSI_BASE + SSI_O_SR) & SSI_SR_RNE))
{
SSIDataGetNonBlocking(SSI_BASE, &rec[0]); /* 接收数据 */
uartPutc(rec[0]);
}
} |