打印

FX3 GPIO使用的注意事项(新手入门手册)

[复制链接]
2994|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 zengweitotty 于 2015-11-6 15:09 编辑

新手入门的系列文档【原创】
Simple GPIO是通用GPIO功能,输入输出,上拉,外部中断
Complex GPIO是复杂IO,支持的功能如下图。 FX3 TRM page 199.

       Complex IO 最多只能用到8个引脚,每一组是根据gpio_id号对8取余来区分的,因此需要用到的IO只能是对8取余之后不一样的数值,同时如果你使用的是16位的GPIF buswidth, 则DQ[15:0], CTL[4:0] and PMODE 这些引脚是锁定的,你需要是用APICyU3PDeviceGpioOverride(gpio_id,CyFalse) 来配置成complex io,具体用法可以参考API guide。
你希望使用GPIO[17](%8 = 1) GPIO[55](%8 = 7) GPIO[56](%8 = 0) GPIO[57](%8 = 1),所以GPIO[17]和GPIO[57]是不能同时作为complex io的,如果希望使用GPIO[17]为Complex IO,则需要CyU3PDeviceGpioOverride(17,CyFalse)来配置,同时IOmatrix 的gpioComplexEn[0] = 0x0, 如果希望使用GPIO[57]为complex io,则使用IOmatrix的gpioComplexEn[1] = 0x1 << (57 – 32) 来配置。
     例如想用GPIO[17]做complex io来用,可以使用如下代码来配置。

#define Select_GPIO 17

void GPIO_Init()
{
        CyU3PGpioClock_t            gpioClock;
       CyU3PGpioSimpleConfig_t      gpioConfig;
        CyU3PReturnStatus_t apiRetStatus =CY_U3P_SUCCESS;

    apiRetStatus =     CyU3PDeviceGpioOverride(Select_GPIO, CyTrue);
            if(apiRetStatus != 0)
            {
               CyU3PDebugPrint (4, "GPIO Override failed, Error Code = %d\n",apiRetStatus);
              // CyFxAppErrorHandler (apiRetStatus);
            }

       gpioConfig.outValue    = CyTrue;
        gpioConfig.driveLowEn  =CyTrue;
        gpioConfig.driveHighEn = CyTrue;
       gpioConfig.inputEn     = CyTrue;//true,input
       gpioConfig.intrMode    = CY_U3P_GPIO_NO_INTR;
       apiRetStatus           =CyU3PGpioSetSimpleConfig (Select_GPIO, &gpioConfig);
        if (apiRetStatus != CY_U3P_SUCCESS)
        {
           CyU3PDebugPrint (4, "GPIO Set Config Error, Error Code = %d\n",apiRetStatus);
           // CyFxAppErrorHandler (apiRetStatus);
        }
}

在主函数中进行如下配置。

   io_cfg.gpioSimpleEn[0]  = 0;
    io_cfg.gpioSimpleEn[1]  = 0;
    io_cfg.gpioComplexEn[0] = 0;
    io_cfg.gpioComplexEn[1] = 0;




沙发
一般首席| | 2017-11-25 20:48 | 只看该作者
翻译的蛮好的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

61

帖子

19

粉丝