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=)