Andrey Shtyrya

MCUXpresso - Help to initialize EINT2

Discussion created by Andrey Shtyrya on Sep 11, 2017
Latest reply on Sep 15, 2017 by Andrey Shtyrya

Hello! Im new with MCUXpresso, just starting to program mcu in C, before i always worked in assembler. Im trying to make a program witn lpc1769 with the OM13000 board to change the frecuency of blinking led when the interrupt on a pin is triggered, pin 2.12 falling edge. Build goes ok but it never enters IRQ rutine. Can please someone check the if EINT2_IRQ init or rutine is okey??? The only work the irq should do is to change frec value.  Here is the code:

 

/*
===============================================================================
Name : gpio.c
Author : $(author)
Version :
Copyright : $(copyright)
Description : cambiar frecuencia de parapdeo del led con un pulsador por interrupcion
===============================================================================
*/

#if defined (__USE_LPCOPEN)
#if defined(NO_BOARD_LIB)
#include "chip.h"
#else
#include "board.h"
#endif
#endif

#include <cr_section_macros.h>

#include "FreeRTOS.h"
#include "task.h"
#include "semphr.h"
#include "queue.h"

xSemaphoreHandle xSemaforo; // Tiene que ser Global, porque lo tiene que poder ver todas las tareas
int boton=0; //variable global del boton en pin 53

int frec=100; //tiempo de semiciclo de parpadeo en ms

void static taskLEDoff (void)
{
while(1)
{
xSemaphoreTake(xSemaforo,portMAX_DELAY);
Chip_GPIO_WritePortBit(LPC_GPIO,0,22,0); //apago con 0
vTaskDelay(frec/portTICK_RATE_MS); //tiempo off en 100ms
xSemaphoreGive(xSemaforo);
}
}

void static taskLEDon (void)
{
while(1)
{
xSemaphoreTake(xSemaforo,portMAX_DELAY);
Chip_GPIO_WritePortBit(LPC_GPIO,0,22,1); //enciendo con 1
vTaskDelay(frec/portTICK_RATE_MS); //tiempo on en 100ms
xSemaphoreGive(xSemaforo);
}
}

//RUTINA DE INTERRUPCION
void EINT2_IRQHandler()
{
NVIC_DisableIRQ(EINT2_IRQn); //desactivo interrupcion
Chip_GPIOINT_ClearIntStatus(LPC_GPIOINT,GPIOINT_PORT2,12); //limpio IRQ
NVIC_ClearPendingIRQ(EINT2_IRQn);

frec=500;

NVIC_EnableIRQ(EINT2_IRQn); //hablito IRQ de vuelta
}


int main (void)
{


SystemCoreClockUpdate();
Board_Init();

//INICIALIZACION INTERRUPCION
Chip_GPIO_SetPinDIRInput(LPC_GPIO,2,12); //pin como entrada
Chip_GPIOINT_Init(LPC_GPIOINT); //inicializacion IRQ
Chip_GPIOINT_SetIntFalling(LPC_GPIOINT,GPIOINT_PORT2,12); //2.12 IRQ por flanco negativo
NVIC_EnableIRQ(EINT2_IRQn); //habilito IRQ en 2.12 EINT2


xTaskCreate(taskLEDoff,"taskLEDoff",1024,0,1,0);
xTaskCreate(taskLEDon,"taskLEDon",1024,0,1,0);
xSemaforo = xSemaphoreCreateMutex();

vTaskStartScheduler();

while(1);
}

Outcomes