This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

RTOS/OMAP-L138: GPIO - configuration problem

Part Number: OMAP-L138
Other Parts Discussed in Thread: OMAPL138

Tool/software: TI-RTOS

I have a problem while configuring GP1 [13]. There is no interruption when the status changes. What is wrong?

btw what does "index" mean in GPIO_read (index) functions?

//***

typedef enum GPIO_PIN {
    GPIO_PIN_MMC_SDCD      = 0U,
    GPIO_PIN_SWITCH,
    GPIO_PIN_COUNT
}GPIO_PIN;

#define GPIO_SWITCH_PORT_NUM          (0U)
#define GPIO_SWITCH_PIN_NUM           (29U) //GP1[13]

/* GPIO Driver board specific pin configuration structure */
GPIO_PinConfig gpioPinConfigs[] = {
    /* Output pin : AM335X_ICE V2_LD_PIN */
    GPIO_DEVICE_CONFIG(GPIO_MMC_SDCD_PORT_NUM, GPIO_MMC_SDCD_PIN_NUM) |
    GPIO_CFG_IN_INT_BOTH_EDGES | GPIO_CFG_INPUT,

    GPIO_DEVICE_CONFIG(GPIO_SWITCH_PORT_NUM, GPIO_SWITCH_PIN_NUM) |
    GPIO_CFG_IN_INT_BOTH_EDGES | GPIO_CFG_INPUT
};

/* GPIO Driver call back functions */
GPIO_CallbackFxn gpioCallbackFunctions[] = {
    NULL,
    NULL
};

/* GPIO Driver configuration structure */
#if defined(SOC_K2G) || defined(SOC_OMAPL137) || defined(SOC_OMAPL138)
GPIO_v0_Config GPIO_v0_config = {
    gpioPinConfigs,
    gpioCallbackFunctions,
    sizeof(gpioPinConfigs) / sizeof(GPIO_PinConfig),
    sizeof(gpioCallbackFunctions) / sizeof(GPIO_CallbackFxn),
    0,
};
//-----------------------------------------------------------
void board_initGPIO(void)
{
    
#if defined(SOC_K2H) || defined(SOC_K2K) || defined(SOC_K2E) || defined(SOC_K2L) || defined(SOC_K2G) || defined(SOC_C6678) || defined(SOC_C6657) || defined(SOC_OMAPL137) || defined(SOC_OMAPL138)
    GPIO_v0_HwAttrs gpio_cfg;

    /* Get the default SPI init configurations */
    GPIO_socGetInitCfg(GPIO_MMC_SDCD_PORT_NUM, &gpio_cfg);

    /* Modify the default GPIO configurations if necessary */

    /* Set the default GPIO init configurations */
    GPIO_socSetInitCfg(GPIO_MMC_SDCD_PORT_NUM, &gpio_cfg);

#if defined(SOC_K2G)
    /* Setup GPIO interrupt configurations */
    GPIO_socSetIntMux(GPIO_MMC_SDCD_PORT_NUM, GPIO_MMC_SDCD_PIN_NUM, NULL, GPIO_MUX_SEL);
#endif
#if defined(SOC_OMAPL137) || defined(SOC_OMAPL138)
    /* Setup GPIO interrupt configurations */
    GPIO_socSetBankInt(GPIO_MMC_SDCD_PORT_NUM, GPIO_MMC_SDCD_PIN_NUM, NULL);
    GPIO_socSetBankInt(GPIO_SWITCH_PORT_NUM, GPIO_SWITCH_PIN_NUM, NULL);
#endif
#endif

}
//------------------------------------------------------------------
void mmcsd_fatfs_console(UArg arg0, UArg arg1)
{
	/* Perform board specific GPIO init  */
    board_initGPIO();
 /* GPIO initialization */
    GPIO_init();

    /* Set the callback function */
    GPIO_setCallback(GPIO_PIN_MMC_SDCD, AppGpioCallbackFxn);

    /* Enable GPIO interrupt on the specific gpio pin */
    GPIO_enableInt(GPIO_PIN_MMC_SDCD);

    /* Set the callback function */
    GPIO_setCallback(GPIO_PIN_SWITCH, AppGpioCallbackFxn2);

    /* Enable GPIO interrupt on the specific gpio pin */
    GPIO_enableInt(GPIO_PIN_SWITCH);

    /* MMCSD FATFS initialization */
    FATFS_init();

    if (GPIO_PIN_MMC_SDCD_ACTIVE_STATE != GPIO_read(GPIO_PIN_MMC_SDCD))
    {
        FATFS_open(0U, NULL, &fatfsHandle);
        fatfsShellProcessFlag = 1;
    }
    else
    {
        MMCSD_log ("\nPlease insert card.\r\n");
    }

    while(1)
{
//*******
}
//-----------------------------------------------------------------
int main(void)
{
	Task_Handle task;
	Task_Handle main_task;
	Task_Params taskParams;
	Error_Block eb;
    /* Call board init functions */
    Board_initCfg boardCfg;
    boardCfg = BOARD_INIT_PINMUX_CONFIG |
        BOARD_INIT_MODULE_CLOCK | BOARD_INIT_UART_STDIO;
    Board_init(boardCfg);

    Error_init(&eb);
    task = Task_create(mmcsd_fatfs_console, NULL, &eb);
    if (task == NULL) {
        System_printf("Task_create() failed!\n");
        BIOS_exit(0);
    }

    /* Start BIOS */
    BIOS_start();
    
    return (0);
}
//------------------------------------------------------
/*
 *  ======== Callback function ========
 */
void AppGpioCallbackFxn(void)
{
	Task_sleep(200);
}
void AppGpioCallbackFxn2(void)
{
    Task_sleep(200);
}

  • Hello,

    Which version of Processor SDK are you using? And is this on a custom board or LCDK?

    Please refer to the initialization in the GPIO_LedBlink example at \pdk_omapl138_1_0_7\packages\ti\drv\gpio\test\led_blink. There may be something you missed.

    To turn the example into a CCS project, follow the instructions here:

    software-dl.ti.com/.../index_device_drv.html

    The index is the value used to look up GPIO pins defined in the GPIO_PinConfig table. You can view the source at \pdk_omapl138_1_0_7\packages\ti\drv\gpio\src\

    Regards,
    Sahin