- 
/* sw1_int.c
 
- 
 *
 
- 
 * Runs on EK-TM4C123GXL LaunchPad
 
- 
 *
 
- 
 * GPIO PORTF interrupt that will toggle the on board Blue LED
 
- 
 * on rising edge whenever a user switch (SW1) is pressed.
 
- 
 *
 
- 
 */
 
- 
#include <stdint.h>
 
- 
#include "inc/tm4c123gh6pm.h"
 
- 
 
- 
void DisableInterrupts(void);
 
- 
void EnableInterrupts(void);
 
- 
void WaitForInterrupt(void);
 
- 
void GPIOPortF_Init(void);
 
- 
void GPIOPortF_Handler(void);
 
- 
 
- 
void GPIOPortF_Init(void)
 
- 
{
 
- 
 
- 
    SYSCTL_RCGC2_R |= 0x00000020;   /* 1) activate clock for Port F */
 
- 
 
- 
    GPIO_PORTF_LOCK_R = 0x4C4F434B; /* 2) unlock GPIO Port F */
 
- 
    GPIO_PORTF_CR_R = 0x1F;         /* allow changes to PF4-0 */
 
- 
    GPIO_PORTF_AMSEL_R = 0x00;      /* 3) disable analog on PF */
 
- 
    GPIO_PORTF_PCTL_R = 0x00000000; /* 4) PCTL GPIO on PF4-0 */
 
- 
    GPIO_PORTF_DIR_R = 0x0E;        /* 5) PF4,PF0 in, PF3-1 out */
 
- 
    GPIO_PORTF_AFSEL_R = 0x00;      /* 6) disable alt funct on PF7-0 */
 
- 
    GPIO_PORTF_PUR_R = 0x11;        /* enable pull-up on PF0 and PF4 */
 
- 
    GPIO_PORTF_DEN_R = 0x1F;        /* 7) enable digital I/O on PF4-0 */
 
- 
 
- 
    GPIO_PORTF_IS_R &= ~0x10;       /*  PF4 is edge-sensitive */
 
- 
    GPIO_PORTF_IBE_R &= ~0x10;      /*  PF4 is not both edges */
 
- 
    GPIO_PORTF_IEV_R &= ~0x10;      /*  PF4 falling edge event */
 
- 
    GPIO_PORTF_ICR_R = 0x10;        /*  Clear flag4 */
 
- 
    GPIO_PORTF_IM_R |= 0x10;        /*  arm interrupt on PF4 */
 
- 
    NVIC_PRI7_R = (NVIC_PRI7_R & 0xFF1FFFFF) | 0x00A00000; /*  priority 5 */
 
- 
    NVIC_EN0_R = 0x40000000;        /*  Enable interrupt 30 in NVIC */
 
- 
 
- 
    EnableInterrupts();             /* Enable global Interrupt flag (I) */
 
- 
}
 
- 
 
- 
void GPIOPortF_Handler(void)
 
- 
{
 
- 
    volatile int readback;
 
- 
 
- 
    GPIO_PORTF_ICR_R = 0x10;        /* clear PF4 int */
 
- 
    GPIO_PORTF_DATA_R ^= (1<<2);    /* toggle Blue LED */
 
- 
    readback = GPIO_PORTF_ICR_R;    /* a read to force clearing of interrupt flag */
 
- 
    readback = readback;            /* suppress compiler warning "unused variable" */
 
- 
}
 
- 
 
- 
int main(void)
 
- 
{
 
- 
    GPIOPortF_Init();               /* initialize GPIO Port F interrupt */
 
- 
 
- 
    while(1) {
 
- 
        WaitForInterrupt();
 
- 
    }
 
- 
}
 
- 
 
- 
/*********** DisableInterrupts ***************
 
- 
*
 
- 
* disable interrupts
 
- 
*
 
- 
* inputs:  none
 
- 
* outputs: none
 
- 
*/
 
- 
 
- 
void DisableInterrupts(void)
 
- 
{
 
- 
    __asm ("    CPSID  I\n");
 
- 
}
 
- 
 
- 
/*********** EnableInterrupts ***************
 
- 
*
 
- 
* emable interrupts
 
- 
*
 
- 
* inputs:  none
 
- 
* outputs: none
 
- 
*/
 
- 
 
- 
void EnableInterrupts(void)
 
- 
{
 
- 
    __asm  ("    CPSIE  I\n");
 
- 
}
 
- 
 
- 
/*********** WaitForInterrupt ************************
 
- 
*
 
- 
* go to low power mode while waiting for the next interrupt
 
- 
*
 
- 
* inputs:  none
 
- 
* outputs: none
 
- 
*/
 
- 
 
- 
void WaitForInterrupt(void)
 
- 
{
 
- 
    __asm  ("    WFI\n");
 
- 
}
 
Recent Comments