void Board_Buttons_Init(void) { buttonsData[0].callbackSw=NULL; buttonsData[1].callbackSw=NULL; buttonsData[2].callbackSw=NULL; buttonsData[3].callbackSw=NULL; Chip_SCU_PinMuxSet(0x1, 0, (SCU_MODE_PULLUP | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_FUNC0)); // P1_0 as GPIO0[4] Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, BUTTONS_BUTTON1_GPIO_PORT_NUM, BUTTONS_BUTTON1_GPIO_BIT_NUM); // input Chip_SCU_GPIOIntPinSel(0, 0, 4); // GPIO0[4] to INT0 Chip_PININT_ClearIntStatus(LPC_GPIO_PIN_INT, PININTCH(0)); // INT0 Chip_PININT_SetPinModeEdge(LPC_GPIO_PIN_INT, PININTCH(0)); // INT0 Chip_PININT_EnableIntLow(LPC_GPIO_PIN_INT, PININTCH(0)); // INT0 NVIC_ClearPendingIRQ(PIN_INT0_IRQn); NVIC_EnableIRQ(PIN_INT0_IRQn); Chip_SCU_PinMuxSet(0x1, 1, (SCU_MODE_PULLUP | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_FUNC0)); // P1_1 as GPIO0[8] Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, BUTTONS_BUTTON2_GPIO_PORT_NUM, BUTTONS_BUTTON2_GPIO_BIT_NUM); // input Chip_SCU_GPIOIntPinSel(1, 0, 8); // GPIO0[8] to INT1 Chip_PININT_ClearIntStatus(LPC_GPIO_PIN_INT, PININTCH(1)); // INT1 Chip_PININT_SetPinModeEdge(LPC_GPIO_PIN_INT, PININTCH(1)); // INT1 Chip_PININT_EnableIntLow(LPC_GPIO_PIN_INT, PININTCH(1)); // INT1 NVIC_ClearPendingIRQ(PIN_INT1_IRQn); NVIC_EnableIRQ(PIN_INT1_IRQn); Chip_SCU_PinMuxSet(0x1, 2, (SCU_MODE_PULLUP | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_FUNC0)); // P1_2 as GPIO0[9] Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, BUTTONS_BUTTON3_GPIO_PORT_NUM, BUTTONS_BUTTON3_GPIO_BIT_NUM); // input Chip_SCU_GPIOIntPinSel(2, 0, 9); // GPIO0[9] to INT2 Chip_PININT_ClearIntStatus(LPC_GPIO_PIN_INT, PININTCH(2)); // INT2 Chip_PININT_SetPinModeEdge(LPC_GPIO_PIN_INT, PININTCH(2)); // INT2 Chip_PININT_EnableIntLow(LPC_GPIO_PIN_INT, PININTCH(2)); // INT2 NVIC_ClearPendingIRQ(PIN_INT2_IRQn); NVIC_EnableIRQ(PIN_INT2_IRQn); Chip_SCU_PinMuxSet(0x1, 6, (SCU_MODE_PULLUP | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_FUNC0)); // P1_6 as GPIO1[9] Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, BUTTONS_BUTTON4_GPIO_PORT_NUM, BUTTONS_BUTTON4_GPIO_BIT_NUM); // input Chip_SCU_GPIOIntPinSel(3, 1, 9); // GPIO1[9] to INT3 Chip_PININT_ClearIntStatus(LPC_GPIO_PIN_INT, PININTCH(3)); // INT3 Chip_PININT_SetPinModeEdge(LPC_GPIO_PIN_INT, PININTCH(3)); // INT3 Chip_PININT_EnableIntLow(LPC_GPIO_PIN_INT, PININTCH(3)); // INT3 NVIC_ClearPendingIRQ(PIN_INT3_IRQn); NVIC_EnableIRQ(PIN_INT3_IRQn); }
static void initHardware(void) { SystemCoreClockUpdate(); Board_Init(); ciaaIOInit(); ciaaUARTInit(); ciaaWriteOutput(0, 0); //BOTON 1 Chip_PININT_Init(LPC_GPIO_PIN_INT); //Set GPIO0[4] (SW1) -> GPIO0_IRQHandler Chip_SCU_GPIOIntPinSel(0,0,4); //falling edge IRQ Chip_PININT_SetPinModeEdge(LPC_GPIO_PIN_INT,PININTCH0); Chip_PININT_EnableIntLow(LPC_GPIO_PIN_INT,PININTCH0); //habilitar la IRQ NVIC_EnableIRQ(PIN_INT0_IRQn); //BOTON 2 //Set GPIO0[4] (SW1) -> GPIO0_IRQHandler Chip_SCU_GPIOIntPinSel(1,1,9); //falling edge IRQ Chip_PININT_SetPinModeEdge(LPC_GPIO_PIN_INT,PININTCH1); Chip_PININT_EnableIntLow(LPC_GPIO_PIN_INT,PININTCH1); //habilitar la IRQ NVIC_EnableIRQ(PIN_INT1_IRQn); }
//BOTON 4 // 0 Low - 1 High void ciaaIO_ISR_SetButton4(uint8_t LowOrHigh) { //Set GPIO1[9] Chip_SCU_GPIOIntPinSel(3,1,9); Chip_PININT_SetPinModeEdge(LPC_GPIO_PIN_INT,PININTCH3); if (LowOrHigh) { Chip_PININT_EnableIntHigh(LPC_GPIO_PIN_INT,PININTCH3); } else { Chip_PININT_EnableIntLow(LPC_GPIO_PIN_INT,PININTCH3); } //habilitar la IRQ NVIC_EnableIRQ(PIN_INT3_IRQn); }
//BOTON 2 // 0 Low - 1 High void ciaaIO_ISR_SetButton2(uint8_t LowOrHigh) { //Set GPIO0[8] Chip_SCU_GPIOIntPinSel(1,0,8); Chip_PININT_SetPinModeEdge(LPC_GPIO_PIN_INT,PININTCH1); if (LowOrHigh) { Chip_PININT_EnableIntHigh(LPC_GPIO_PIN_INT,PININTCH1); } else { Chip_PININT_EnableIntLow(LPC_GPIO_PIN_INT,PININTCH1); } //habilitar la IRQ NVIC_EnableIRQ(PIN_INT1_IRQn); }
bool Board_GPIOs_enableIntCallback(int gpioNumber,void(*function)(void*),void* arg, uint8_t flagEdgeLevel, uint8_t flagHighLow) { // check if gpio alerady has assigned int for(uint8_t i=0; i<4 ; i++) { if(extIntData[i].callback!=NULL && extIntData[i].gpioNumber==gpioNumber) return 0; } // find free extInt callback for(uint8_t i=0; i<4 ; i++) { if(extIntData[i].callback==NULL) { extIntData[i].callback = function; extIntData[i].callbackArg = arg; extIntData[i].gpioNumber=gpioNumber; // Enable interrupt uint8_t intNumber = i + 4; // starts from INT4 Chip_SCU_GPIOIntPinSel(intNumber, gpiosInfo[gpioNumber].gpio, gpiosInfo[gpioNumber].gpioBit); Chip_PININT_ClearIntStatus(LPC_GPIO_PIN_INT, PININTCH(intNumber)); if(flagEdgeLevel) Chip_PININT_SetPinModeEdge(LPC_GPIO_PIN_INT, PININTCH(intNumber)); else Chip_PININT_SetPinModeLevel(LPC_GPIO_PIN_INT, PININTCH(intNumber)); if(flagHighLow) Chip_PININT_EnableIntHigh(LPC_GPIO_PIN_INT, PININTCH(intNumber)); else Chip_PININT_EnableIntLow(LPC_GPIO_PIN_INT, PININTCH(intNumber)); switch(intNumber) { case 4: NVIC_ClearPendingIRQ(PIN_INT4_IRQn); NVIC_EnableIRQ(PIN_INT4_IRQn); break; case 5: NVIC_ClearPendingIRQ(PIN_INT5_IRQn); NVIC_EnableIRQ(PIN_INT5_IRQn); break; case 6: NVIC_ClearPendingIRQ(PIN_INT6_IRQn); NVIC_EnableIRQ(PIN_INT6_IRQn); break; case 7: NVIC_ClearPendingIRQ(PIN_INT7_IRQn); NVIC_EnableIRQ(PIN_INT7_IRQn); break; } return 1; } } return 0; }