Part Number:TM4C123GH6PM
Tool/software: Code Composer Studio
Hi.
I am going to use 2 Switches ( PF0 and PF4) as a GPIO Interrupt. When SW1 pressed, turn RED on and when SW2 pressed, turn BLUE on.
Below is my code:
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "inc/hw_ints.h"
#include "driverlib/interrupt.h"
#include "Unlock_PF0/unlock_PF0.h"
uint8_t SW1_Flag,SW2_Flag;
void SW1_ISR(void);
void SW2_ISR(void);
//------------------------------------------------------
void SW1_ISR(void)
{
GPIOIntClear(GPIO_PORTF_BASE, GPIO_INT_PIN_4);//Clear Flag Interrupt on PF4
SW1_Flag=1;//Set Flag to indicate SW1 is pressed
}
void SW2_ISR(void)
{
GPIOIntClear(GPIO_PORTF_BASE, GPIO_INT_PIN_0);//Clear Flag Interrupt onf PF0
SW2_Flag=1;//Set Flag to indicate SW2 is pressed
}
//-----------------------------------------------------
int main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1| GPIO_PIN_2| GPIO_PIN_3,0);
UnlockPF0(GPIO_PORTF_BASE,GPIO_PIN_0);
GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_0|GPIO_PIN_4);
GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_0|GPIO_PIN_4, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU);
GPIOIntTypeSet(GPIO_PORTF_BASE, GPIO_PIN_0|GPIO_PIN_4, GPIO_FALLING_EDGE);
GPIOIntRegister(GPIO_PORTF_BASE,&SW2_ISR);//Register for interrupt on PF0
GPIOIntEnable(GPIO_PORTF_BASE, GPIO_INT_PIN_0);
GPIOIntRegister(GPIO_PORTF_BASE,&SW1_ISR);
GPIOIntEnable(GPIO_PORTF_BASE, GPIO_INT_PIN_4);//Register for interrupt for PF4
IntEnable(INT_GPIOF);
IntMasterEnable();
while(1)
{
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2,0);
if(SW1_Flag)// if SW1 is pressed, clear Flag, turn LED RED on.
{
SW1_Flag=0;
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,0x02);
SysCtlDelay(4000000);
}
if(SW2_Flag)// if SW2 is pressed, clear Flag, turn LED BLUE on.
{
SW2_Flag=0;
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2,0x04);
SysCtlDelay(4000000);
}
}
}
It doesn't work, but when I commented one of two line GPIOIntRegister(GPIO_PORTF_BASE,&SW1_ISR), it works.
Please help me.