I am using the launchpad to display data on a simple 16x2 LCD and simultaneously a timer(in interrupt mode) to transmit some data via UART1, and a receive interrupt . TIVA launchpad in connected to a 4key key-pad.
The system is functioning as required but code gets stuck in the FaultISR() in an arbitrary fashion.LCD functions work perfectly and have been defined above main. Following is a main() :
int main(void) {
unsigned volatile int temp_val1=0,temp_val2=0;
unsigned volatile char flag=1;
SysCtlClockSet(SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); // control pins for LCD
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); // data/command pins for LCD
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); // UART1 pins, 2 inputs from keypad
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); // 2 inputs from keypad
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_2| GPIO_PIN_1| GPIO_PIN_3);
config_TIMER();
IntMasterEnable();
sw_init(); // initialises the GPIO for key-pad
LCDInitialize();
while(1)
{
if(GPIOPinRead(SW_PORT1, sw4 )==0)
{
mil(150); // a delay function, defined above main()
flag=1;
temp_val1++;
LCDClear();
}
else if(GPIOPinRead(SW_PORT1,sw3)==0)
{
mil(150);
flag=2;
temp_val2++;
LCDClear();
}
switch(flag) //flag is a variable which keeps track of the mode selected to be displayed on LSD
{
case 1:
LCDRow1();
LCDWriteString("NODE 1 : ");
if(temp_val1>30)
{
LCDWriteString(" FIRE");
}
else
{
LCDWriteString("no FIRE");
}
LCDRow2();
LCDWriteString("Temp_Field: ");
LCDWriteInteger(temp_val1);
break;
case 2:
LCDRow1();
LCDWriteString("NODE 2 : ");
if(temp_val2>30)
{
LCDWriteString(" FIRE");
}
else
{
LCDWriteString("no FIRE");
}
LCDRow2();
LCDWriteString("Temp_Field: ");
LCDWriteInteger(temp_val2);
break;
default:
break;
}
}
}