从0开始创建FX3工程之三 - GPIO

第一步是GPIO初始化,需要调用CyU3PGpioInit函数设置gpio模块的时钟以及回调函数。
其中复用的GPIO口需要调用CyU3PDeviceGpioOverride。
设置高低电平的函数为:
CyU3PGpioSetValue (45, CyFalse);//低电平
CyU3PGpioSetValue (45, CyTrue);//高电平
代码如下:

#ifdef MY_GPIO
    io_cfg.gpioSimpleEn[1]  = 0x00002000; /* GPIO 45 0x2000 = 1<<(45-32)*/
    //GPIO 50,51,52: 0x1C0000 = 1<<(50-32) | 1<<(51-32) | 1<<(52-32);
#else
    io_cfg.gpioSimpleEn[1]  = 0;
#endif

#ifdef MY_GPIO
CyU3PReturnStatus_t
my_gpio_init(void)
{
        CyU3PGpioClock_t gpioClock;
        CyU3PGpioSimpleConfig_t gpioConfig;
        CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS;

        /* Init the GPIO module */
        gpioClock.fastClkDiv = 2;
        gpioClock.slowClkDiv = 0;
        gpioClock.simpleDiv = CY_U3P_GPIO_SIMPLE_DIV_BY_2;
        gpioClock.clkSrc = CY_U3P_SYS_CLK;
        gpioClock.halfDiv = 0;

        apiRetStatus = CyU3PGpioInit(&gpioClock, NULL);
        if (apiRetStatus != 0)
        {
            CyU3PDebugPrint (4, "CyU3PGpioInit failed, error code = %d\n", apiRetStatus);
            return apiRetStatus;
        }
        //Init GPIO 45 as output
        gpioConfig.outValue = CyFalse;//默认输出低电平
        gpioConfig.driveLowEn = CyTrue;//允许输出低
        gpioConfig.driveHighEn = CyTrue;//允许输出高
        gpioConfig.inputEn = CyFalse;//不是输入,则是输出
        gpioConfig.intrMode = CY_U3P_GPIO_NO_INTR;
        apiRetStatus = CyU3PGpioSetSimpleConfig(45, &gpioConfig);
        if (apiRetStatus != CY_U3P_SUCCESS)
        {
            CyU3PDebugPrint (4, "CyU3PGpioSetSimpleConfig failed, error code = %d\n",
                    apiRetStatus);
            return apiRetStatus;
        }
        CyU3PGpioSetValue (45, CyFalse);
        CyU3PBusyWait(10);
        CyU3PGpioSetValue (45, CyTrue);
        //Init GPIO 21
        /* Override GPIO 21 as this pin is associated with GPIF Control signal.
         * The IO cannot be selected as GPIO by CyU3PDeviceConfigureIOMatrix call
         * as it is part of the GPIF IOs. Override API call must be made with
         * caution as this will change the functionality of the pin. If the IO
         * line is used as part of GPIF and is connected to some external device,
         * then the line will no longer behave as a GPIF IO.. Here CTL4 line is
         * not used and so it is safe to override.  */
        apiRetStatus = CyU3PDeviceGpioOverride (21, CyTrue);
        if (apiRetStatus != 0)
        {
            CyU3PDebugPrint (4, "CyU3PDeviceGpioOverride failed, error code = %d\n",
                    apiRetStatus);
            return apiRetStatus;
        }

        /* Configure GPIO 21 as output */
        gpioConfig.outValue = CyFalse;
        gpioConfig.driveLowEn = CyTrue;
        gpioConfig.driveHighEn = CyTrue;
        gpioConfig.inputEn = CyFalse;
        gpioConfig.intrMode = CY_U3P_GPIO_NO_INTR;
        apiRetStatus = CyU3PGpioSetSimpleConfig(21, &gpioConfig);
        if (apiRetStatus != CY_U3P_SUCCESS)
        {
            CyU3PDebugPrint (4, "CyU3PGpioSetSimpleConfig failed, error code = %d\n",
                    apiRetStatus);
            return apiRetStatus;
        }
        CyU3PGpioSetValue (21, CyFalse);
        //CyU3PThreadSleep(200);
        CyU3PBusyWait(10);
        CyU3PGpioSetValue (21, CyTrue);
        return apiRetStatus;
}
#endif

输入模式,参考demo cyfxgpioapp.

gpioConfig.outValue = CyTrue;
gpioConfig.inputEn = CyTrue;
gpioConfig.driveLowEn = CyFalse;
gpioConfig.driveHighEn = CyFalse;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值