FX3学习笔记7-GPIO使用的注意事项

  • Post author:
  • Post category:其他



FX3 GPIO可以配置成Simple GPIO和Complex GPIO两种


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;

未完,完整版可查看原文地址:


(原文出处: http://bbs.21ic.com/icview-1199060-1-1.html?fromuser=)