3 Replies Latest reply on Feb 10, 2016 5:39 AM by Madhu Lakshmipathy

    complex GPIO interrupt

    nia.fong_1534961

      I configured a complex GPIO for interrupt mode CY_U3P_GPIO_INTR_NEG_EDGE but never see the interrupt callback getting called.  The firmware does load fine.  I tested the same code on a simple GPIO configuration -- just changed complex to simple config and io matrix -- and the interrupt works fine.  Any idea why the complex GPIO configuration won't work?  Does something else need to be called/configured?  The callback function is registered in GpioInit(). 

         

          // complex configuration

         

          gpioComplexConfig.outValue = CyTrue;
          gpioComplexConfig.inputEn = CyTrue;
          gpioComplexConfig.driveLowEn = CyFalse;
          gpioComplexConfig.driveHighEn = CyFalse;
          gpioComplexConfig.intrMode = CY_U3P_GPIO_INTR_NEG_EDGE;
          gpioComplexConfig.pinMode = CY_U3P_GPIO_MODE_STATIC;
          gpioComplexConfig.timerMode = CY_U3P_GPIO_TIMER_SHUTDOWN;
          gpioComplexConfig.threshold = 0;
          gpioComplexConfig.timer = 0;
          gpioComplexConfig.period = 0;
          status = CyU3PGpioSetComplexConfig(34, &gpioComplexConfig);

         

         // register interrupt

         

          status = CyU3PGpioInit(&gpioClock, GpioInterruptCallback);

         

         // IO  matrix

         

          io_cfg.isDQ32Bit = CyFalse;
          io_cfg.s0Mode = CY_U3P_SPORT_INACTIVE;
          io_cfg.s1Mode = CY_U3P_SPORT_INACTIVE;
          io_cfg.useUart   = CyTrue;
          io_cfg.useI2C    = CyFalse;
          io_cfg.useI2S    = CyFalse;
          io_cfg.useSpi    = CyTrue;
          io_cfg.lppMode   = CY_U3P_IO_MATRIX_LPP_DEFAULT;
          io_cfg.gpioSimpleEn[0]  = 0;
          io_cfg.gpioSimpleEn[1]  = 0;
          io_cfg.gpioComplexEn[0] = 0;
          io_cfg.gpioComplexEn[1] = 0x6;
          status = CyU3PDeviceConfigureIOMatrix (&io_cfg);