I have modified uart echo example for communicate with gps module . when the data recieved,mcu enters FaultISR ? what is the problem?
here is my code
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/fpu.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "string.h"
//*****************************************************************************
//
//! \addtogroup example_list
//! <h1>UART Echo (uart_echo)</h1>
//!
//! This example application utilizes the UART to echo text. The first UART
//! (connected to the USB debug virtual serial port on the evaluation board)
//! will be configured in 115,200 baud, 8-n-1 mode. All characters received on
//! the UART are transmitted back to the UART.
//
//*****************************************************************************
//*****************************************************************************
//
// The error routine that is called if the driver library encounters an error.
//
//*****************************************************************************
#ifdef DEBUG
void
__error__(char *pcFilename, unsigned long ulLine)
{
}
#endif
char RxBuf[128];
char TxBuf[128];
char GpsData[128];
char RxTemp;
unsigned long WAdr=0;
unsigned long Sayi;
//*****************************************************************************
//
// The UART interrupt handler.
//EXTERN UARTIntHandler
//*****************************************************************************
void
GPSInt(void)
{
unsigned long ulStatus,GpsStat;
//
// Get the interrrupt status.
//
GpsStat=ROM_UARTIntStatus(UART5_BASE, true);
ulStatus = ROM_UARTIntStatus(UART0_BASE, true);
if(GpsStat) //int. kaynagi gps mi?
{
ROM_UARTIntClear(UART5_BASE, GpsStat);
RxTemp=ROM_UARTCharGetNonBlocking(UART5_BASE);
switch(WAdr){
case 0 :
if (RxTemp==0x24){
RxBuf[WAdr]=RxTemp;
WAdr++;}
break;
case 1:
if (RxTemp==0x47){
RxBuf[WAdr]=RxTemp;
WAdr++;}
else
WAdr=0;
break;
case 2:
if (RxTemp==0x50){
RxBuf[WAdr]=RxTemp;
WAdr++;}
else
WAdr=0;
break;
case 3:
if (RxTemp==0x47){
RxBuf[WAdr]=RxTemp;
WAdr++;}
else
WAdr=0;
break;
case 4:
if (RxTemp==0x47){
RxBuf[WAdr]=RxTemp;
WAdr++;}
else
WAdr=0;
break;
default :
if (RxTemp==0x24){
strcpy(GpsData,RxBuf);
Sayi=WAdr-1;
WAdr=0;
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_PIN_2);
SysCtlDelay(SysCtlClockGet() / (1000 * 3));
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0);}
else{
RxBuf[WAdr]=RxTemp;
WAdr=(WAdr+1)&0x7F;}
break;
}
}
}
//*****************************************************************************
//
// Send a string to the UART.
//
//*****************************************************************************
void
UARTSend(const unsigned char *pucBuffer, unsigned long ulCount)
{
//
// Loop while there are more characters to send.
//
while(ulCount--)
{
//
// Write the next character to the UART.
//
ROM_UARTCharPutNonBlocking(UART0_BASE, *pucBuffer++);
}
}
//*****************************************************************************
//
// This example demonstrates how to send a string of data to the UART.
//
//*****************************************************************************
int
main(void)
{
//
// Enable lazy stacking for interrupt handlers. This allows floating-point
// instructions to be used within interrupt handlers, but at the expense of
// extra stack usage.
//
ROM_FPUEnable();
ROM_FPULazyStackingEnable();
ROM_SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHZ);
//
// Enable the GPIO port that is used for the on-board LED.
//
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
//
// Enable the GPIO pins for the LED (PF2).
//
ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_2);
//
// Enable the peripherals used by this example.
//
//ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);
//ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
//
// Set GPIO A0 and A1 as UART pins.
//
//GPIOPinConfigure(GPIO_PA0_U0RX);
//GPIOPinConfigure(GPIO_PA1_U0TX);
//ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
GPIOPinConfigure(GPIO_PB0_U1RX);
GPIOPinConfigure(GPIO_PB1_U1TX);
ROM_GPIOPinTypeUART(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1);
//
// Configure the UART for 115,200, 8-N-1 operation.
//
//ROM_UARTConfigSetExpClk(UART0_BASE, ROM_SysCtlClockGet(), 921600,
//(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
// UART_CONFIG_PAR_NONE));
ROM_UARTConfigSetExpClk(UART1_BASE, ROM_SysCtlClockGet(), 9600,
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
//
// Enable the UART interrupt.
//
//ROM_IntEnable(INT_UART0);
ROM_IntEnable(INT_UART1);
//ROM_UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT);
ROM_UARTIntEnable(UART1_BASE, UART_INT_RX);
//
// Enable processor interrupts.
//
ROM_IntMasterEnable();
//
// Prompt for text to be entered.
//
//UARTSend((unsigned char *)"OK\r\n", 4);
//
// Loop forever echoing data through the UART.
//
while(1)
{
}
}