SW2 button interrupt using Processor Expert KSDK 1.2

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

SW2 button interrupt using Processor Expert KSDK 1.2

1,078 Views
maxdieudonne
Contributor I

Does anyone knows how to best create an interrupt for the SW2 button on the FRDM_K64F? I'm using Processor Expert with KSDK 1.2, I was able do it for SW3, but I need to use both buttons. I've seen instructions that does not use PE, but that defeats the purpose of quick development without needing to be an expert with the boards low level functions.

Labels (1)
0 Kudos
1 Reply

473 Views
xiangjun_rong
NXP TechSupport
NXP TechSupport

Hi, Max,

based on the example located at:

D:\Freescale\KSDK_1.2.0\examples\frdmk64f\driver_examples\gpio\kds

I have modified the example as following, I added the SW3 button function. I have tested on FRDM-K64F, it worked fine, after I pressed the SW3, the LED could  toggle, the same function as SW2.

Hope it can help you.

BR

Xiangjun Rong

// Standard C Included Files

#include <stdio.h>

// SDK Included Files

#include "board.h"

#include "gpio_pins.h"

#include "fsl_debug_console.h"

///////////////////////////////////////////////////////////////////////////////

// Variables

///////////////////////////////////////////////////////////////////////////////

volatile bool isButtonPress = false;

////////////////////////////////////////////////////////////////////////////////

// Code

////////////////////////////////////////////////////////////////////////////////

/*!

* @brief Uses a switch to controll a LED.

*

* This function toogles LED1 when press the switch.

*/

int main(void)

{

    // Define gpio input pin config structure SW.

    gpio_input_pin_user_config_t inputPin[] = {

        {

            .pinName                       = BOARD_SW_GPIO,

            .config.isPullEnable           = true,

#if FSL_FEATURE_PORT_HAS_PULL_SELECTION

            .config.pullSelect             = kPortPullUp,

#endif

#if FSL_FEATURE_PORT_HAS_PASSIVE_FILTER

            .config.isPassiveFilterEnabled = false,

#endif

#if FSL_FEATURE_PORT_HAS_DIGITAL_FILTER

            .config.isDigitalFilterEnabled = false,

#endif

            .config.interrupt              = kPortIntFallingEdge,

        },

        {

                  .pinName                       = kGpioSW3,

                    .config.isPullEnable           = true,

        #if FSL_FEATURE_PORT_HAS_PULL_SELECTION

                    .config.pullSelect             = kPortPullUp,

        #endif

        #if FSL_FEATURE_PORT_HAS_PASSIVE_FILTER

                    .config.isPassiveFilterEnabled = false,

        #endif

        #if FSL_FEATURE_PORT_HAS_DIGITAL_FILTER

                    .config.isDigitalFilterEnabled = false,

        #endif

                    .config.interrupt              = kPortIntFallingEdge,

        },

        {

            .pinName = GPIO_PINS_OUT_OF_RANGE,

        }

    };

    // Define gpio output pin config structure LED1.

    gpio_output_pin_user_config_t outputPin[] = {

        {

            .pinName              = kGpioLED1,

            .config.outputLogic   = 0,

#if FSL_FEATURE_PORT_HAS_SLEW_RATE

            .config.slewRate      = kPortFastSlewRate,

#endif

#if FSL_FEATURE_PORT_HAS_DRIVE_STRENGTH

            .config.driveStrength = kPortHighDriveStrength,

#endif

        },

        {

            .pinName = GPIO_PINS_OUT_OF_RANGE,

        }

    };

    // Init hardware

    hardware_init();

    // Print a note to terminal.

    PRINTF("\r\n GPIO PD Driver example\r\n");

    PRINTF("\r\n Press %s to turn on/off a LED1\r\n",BOARD_SW_NAME);

    // Init LED1, Switch.

    GPIO_DRV_Init(inputPin, outputPin);

    // Turn LED1 on.

    GPIO_DRV_ClearPinOutput(kGpioLED1);

    while(1)

    {

        if(isButtonPress)

        {

            PRINTF(" %s is pressed \r\n",BOARD_SW_NAME);

            // Reset state of button.

            isButtonPress=false;

        }

    }

}

/*!

* @brief Interrupt service fuction of switch.

*

* This function toogles LED1

*/

void BOARD_SW_IRQ_HANDLER(void)

{

    // Clear external interrupt flag.

    GPIO_DRV_ClearPinIntFlag(BOARD_SW_GPIO);

    // Change state of button.

    isButtonPress = true;

    // Toggle LED1.

    GPIO_DRV_TogglePinOutput(kGpioLED1);

}

void PORTA_IRQHandler(void)

{

    GPIO_DRV_ClearPinIntFlag(kGpioSW3);

    // Toggle LED1.

    GPIO_DRV_TogglePinOutput(kGpioLED1);

}

/*******************************************************************************

* EOF

******************************************************************************/

0 Kudos