三、斯普拉斯EZ-USB FX3 GPIO点灯

一、简介

        FX3 在所有数字 I/O 引脚上提供了由固件控制的内部上拉或下拉 电阻。50k的内部电阻上拉引脚的电平,而10k的电阻下拉 引脚的电平,以避免各个引脚进入悬空状态。I/O 引脚可以有下面状态:

        · 三态 (高阻抗) 

        · 弱上拉(通过内部50k电阻)

        · 下拉 (通过内部10k电阻)

        · 低功耗模式下保持 (I/O 值不变)

        · JTAG TDI、TMC和TRST#信号有固定的50k内部上拉电阻,TCK 信号有固定的10k下拉电阻。

        应通过内部上拉电阻将所有未使用的 I/O 上拉为高电平。应保持所有未使用的输出为悬空状态。所有I/O的驱动强度可为全强度、四分之三的强度、半强度或四分之一的强度。为每个接口独立配置这些驱动强度。

        EZ-USB在GPIF II和串行外设接口上均可实现灵活的引脚配置。GPIF II接口上任何未使用的控制引脚(CTL[15] 除外)都可作为 通用I/O使用。同样,串行外设接口上任何未使用的引脚均可配 置为通用 I/O。

 图1.0 FX3 IO引脚列表

二、程序

        GPIO时钟配置、中断回调函数配置函数

extern CyU3PReturnStatus_t
CyU3PGpioInit (
        CyU3PGpioClock_t *clk_p,                /**< Clock settings for the GPIO block. */
        CyU3PGpioIntrCb_t irq                   /**< GPIO interrupt callback function. */
        );

        GPIO 驱动能力配置函数 

extern CyU3PReturnStatus_t
CyU3PSetGpioDriveStrength (
        CyU3PDriveStrengthState_t gpioDriveStrength     /**< Desired GPIO Drive strength */
        );

         简单GPIO 配置函数

extern CyU3PReturnStatus_t
CyU3PGpioSetSimpleConfig (
       uint8_t gpioId,                  /**< Id of the pin being selected as a GPIO. */
       CyU3PGpioSimpleConfig_t *cfg_p   /**< Desired GPIO configuration. */
       );

        复杂GPIO配置函数

 extern CyU3PReturnStatus_t
CyU3PGpioSetComplexConfig (
       uint8_t gpioId,                          /**< GPIO id to be modified */
       CyU3PGpioComplexConfig_t *cfg_p          /**< Desired GPIO configuration. */
       );

        重定向引脚为GPIO函数

 extern CyU3PReturnStatus_t
CyU3PDeviceGpioOverride (
        uint8_t gpioId,         /**< The IO to be converted to GPIO. */
        CyBool_t isSimple       /**< CyTrue: simple GPIO, CyFalse: complex GPIO */
        );

         设置(一个)GPIO输出状态

extern CyU3PReturnStatus_t
CyU3PGpioSetValue (
        uint8_t  gpioId,                /**< GPIO id to be modified. */
        CyBool_t  value                 /**< Value to set on the GPIO pin. */
        );

        设置(一个)简单GPIO输出状态 

extern CyU3PReturnStatus_t
CyU3PGpioSimpleSetValue (
        uint8_t  gpioId,                /**< GPIO id to be modified. */
        CyBool_t  value                 /**< Value to set on the GPIO pin. */
        );

        对地址操作设置(一个)GPIO输出状态

 #define CyFx3GpioSetBit(GpioPin)        ((*(uvint32_t *)&GPIO->lpp_gpio_simple[GpioPin]) |= CY_U3P_LPP_GPIO_OUT_VALUE)
#define CyFx3GpioResetBit(GpioPin)        ((*(uvint32_t *)&GPIO->lpp_gpio_simple[GpioPin]) &= ~CY_U3P_LPP_GPIO_OUT_VALUE)

         在CYUSB3KIT-003开发板上验证点灯

 图2.1 CYUSB3KIT-003开发板LED2原理图

        GPIO配置源文件

#include "cyfx3_gpio.h"
#include "cyu3error.h"


static CyU3PReturnStatus_t CyFx3GpioOutConfig(uint8_t gpioId,CyBool_t isHigh)
{
	//GPIO配置为输出模式,不使能中断
	CyU3PGpioSimpleConfig_t GpioOutputConfig = {
			.outValue = isHigh,
			.driveLowEn = CyTrue,
			.driveHighEn = CyTrue,
			.inputEn = CyFalse,
			.intrMode = CY_U3P_GPIO_NO_INTR,
	};
	return CyU3PGpioSetSimpleConfig(gpioId,&GpioOutputConfig);
}

static CyU3PReturnStatus_t CyFx3GpioInConfig(uint8_t gpioId)
{
	//GPIO配置为输入模式,不使能中断
	CyU3PGpioSimpleConfig_t GpioInputConfig = {
		.outValue = CyTrue,
		.driveLowEn = CyFalse,
		.driveHighEn = CyFalse,
		.inputEn = CyTrue,
		.intrMode = CY_U3P_GPIO_NO_INTR,
	};
	return CyU3PGpioSetSimpleConfig(gpioId,&GpioInputConfig);
}

CyU3PReturnStatus_t CyFx3GpioInit(void)
{
	CyU3PReturnStatus_t CyFx3Status = CY_U3P_SUCCESS;

	//GPIO时钟配置(整个工程中只需要初始化一次)
	CyU3PGpioClock_t GpioClkConifg = {
		.fastClkDiv = 2,
		.slowClkDiv = 0,
		.halfDiv = 0,
		.simpleDiv = CY_U3P_GPIO_SIMPLE_DIV_BY_2,
		.clkSrc = CY_U3P_SYS_CLK,
	};

	CyFx3Status = CyU3PGpioInit(&GpioClkConifg,NULL);
	if(CyFx3Status != CY_U3P_SUCCESS)
	{
		return CyFx3Status;
	}

	//设置GPIO驱动强度
	return CyU3PSetGpioDriveStrength(CY_U3P_DS_FULL_STRENGTH);
}

CyU3PReturnStatus_t CyFx3GpioConfig(void)
{
	CyU3PReturnStatus_t CyFx3Status = CY_U3P_SUCCESS;

	//UART_CTS 重定向为普通IO
	CyFx3Status = CyU3PDeviceGpioOverride(LED_GPIO_PIN,CyTrue);
	if(CyFx3Status != CY_U3P_SUCCESS)
	{
		return CyFx3Status;
	}

	CyFx3Status = CyFx3GpioOutConfig(LED_GPIO_PIN,CyFalse);
	if(CyFx3Status != CY_U3P_SUCCESS)
	{
		return CyFx3Status;
	}

	CyFx3Status = CyFx3GpioInConfig(KEY_GPIO_PIN);
	if(CyFx3Status != CY_U3P_SUCCESS)
	{
		return CyFx3Status;
	}

	return CyFx3Status;
}

        GPIO配置头文件

#ifndef CYFX3_GPIO_H_
#define CYFX3_GPIO_H_

#include "cyu3gpio.h"
#include "gpio_regs.h"

#define KEY_GPIO_PIN					45
#define LED_GPIO_PIN					54

//直接对地址操作
#define CyFx3GpioReadBit(GpioPin)	    ((GPIO->lpp_gpio_simple[GpioPin]& CY_U3P_LPP_GPIO_IN_VALUE) >> 1)
#define CyFx3GpioSetBit(GpioPin)		((*(uvint32_t *)&GPIO->lpp_gpio_simple[GpioPin]) |= CY_U3P_LPP_GPIO_OUT_VALUE)
#define CyFx3GpioResetBit(GpioPin)		((*(uvint32_t *)&GPIO->lpp_gpio_simple[GpioPin]) &= ~CY_U3P_LPP_GPIO_OUT_VALUE)

#define LED_BRIGHT						CyFx3GpioSetBit(LED_GPIO_PIN)
#define LED_EXTINGUISH					CyFx3GpioResetBit(LED_GPIO_PIN)
#define LED_TOGGLE						((*(uvint32_t *)&GPIO->lpp_gpio_simple[LED_GPIO_PIN]) ^= CY_U3P_LPP_GPIO_OUT_VALUE)

//调用函数操作
//#define LED_BRIGHT						CyU3PGpioSetValue(LED_GPIO_PIN,CyFalse)
//#define LED_EXTINGUISH					CyU3PGpioSetValue(LED_GPIO_PIN,CyTrue)

#define KEY_INPUT						CyFx3GpioReadBit(KEY_GPIO_PIN)

CyU3PReturnStatus_t CyFx3GpioInit(void);
CyU3PReturnStatus_t CyFx3GpioConfig(void);

#endif /* CYFX3_GPIO_H_ */

        主函数

#include "cyfx3_gpio.h"
#include "cyu3os.h"
#include "cyu3error.h"

CyU3PThread LedThreadHandler;

#define LED_THREAD_PRIORITY			8
#define LED_THREAD_STACK_SIZE		512

void LedThread(uint32_t arg)
{
	CyFx3GpioInit();
	CyFx3GpioConfig();

	while(1)
	{
		LED_BRIGHT;
		CyU3PThreadSleep(500);
		LED_EXTINGUISH;
		CyU3PThreadSleep(500);
	}
}

void CyFxApplicationDefine(void)
{

	void *LedStackStart = CyU3PMemAlloc(LED_THREAD_STACK_SIZE);
	if(LedStackStart != NULL)
	{
		CyU3PThreadCreate((CyU3PThread*		 ) &LedThreadHandler,
						  (char*			 ) "21:Led Thread 1",
						  (CyU3PThreadEntry_t) LedThread,
						  (uint32_t          ) 0,
						  (void*			 ) LedStackStart,
						  (uint32_t          ) LED_THREAD_STACK_SIZE,
						  (uint32_t          ) LED_THREAD_PRIORITY,
						  (uint32_t          ) LED_THREAD_PRIORITY,
						  (uint32_t          ) CYU3P_NO_TIME_SLICE,
						  (uint32_t          ) CYU3P_AUTO_START);
	}
}


int main(void)
{
	CyU3PReturnStatus_t CyFx3Status;

	//初始化FX3设备
	CyFx3Status = CyU3PDeviceInit(NULL);
	if(CyFx3Status != CY_U3P_SUCCESS)
	{
		goto HandleFatalError;
	}

	//初始化FX3内核缓存
	CyFx3Status = CyU3PDeviceCacheControl(CyTrue,CyTrue,CyTrue);
	if(CyFx3Status != CY_U3P_SUCCESS)
	{
		goto HandleFatalError;
	}

	//配置IO矩阵(16位数据总线 + UART + GPIO)
	CyU3PIoMatrixConfig_t MatrixcConfig = {
		.isDQ32Bit = CyFalse,
		.s0Mode = CY_U3P_SPORT_INACTIVE,
		.s1Mode = CY_U3P_SPORT_INACTIVE,
		.useUart   = CyTrue,
		.useI2C    = CyFalse,
		.useI2S    = CyFalse,
		.useSpi    = CyFalse,
		.lppMode   = CY_U3P_IO_MATRIX_LPP_UART_ONLY,
		.gpioSimpleEn[0]  = 0,								//GPIO0~GPIO31
		.gpioSimpleEn[1]  = (0x01 << (KEY_GPIO_PIN - 32)), 	//GPIO32~GPIO60    使能GPIO45引脚
		/*GPIO54为串口的CTS引脚 所有不用配置*/
		.gpioComplexEn[0] = 0,
		.gpioComplexEn[1] = 0,
	};
	CyFx3Status = CyU3PDeviceConfigureIOMatrix(&MatrixcConfig);
    if (CyFx3Status != CY_U3P_SUCCESS)
    {
        goto HandleFatalError;
    }

    //初始化RTOS内核
	CyU3PKernelEntry();

HandleFatalError:
	//复位
	CyU3PDeviceReset(CyTrue);
}

三、验证

        烧录验证  LED 500MS翻转一次

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: EZ-USB FX3是Cypress公司推出的高性能USB 3.0控制器,可广泛应用于视频采集、音频录制、医疗成像、工业自动化等领域。EZ-USB FX3中文手册是指其官方提供的EZ-USB FX3相关技术文档,其包含了产品的功能、硬件架构、软件设计方法、指令集以及应用案例等方面的详细描述。该手册不仅方便开发者理解和使用EZ-USB FX3,同时也提供了完整的技术支持文档供用户参考。 基本上,EZ-USB FX3中文手册分为以下几个部分:概述、产品描述、硬件设计、软件设计和附录。概述主要介绍了EZ-USB FX3 USB3.0控制器的一些特性及性能指标。产品描述则详细描述了EZ-USB FX3的架构、接口、功能以及本地和远程的软件支持。硬件设计则介绍了EZ-USB FX3的硬件元器件及其功能,以及如何设计电路板和外围电路。软件设计则讲解了如何使用EZ-USB FX3软件组件和驱动程序来编写相应的设备控制软件,并给出了常见的设计案例和提示。附录则包括了USB协议、数据包格式、数据传输模式和EZ-USB FX3的指令集。 总之,EZ-USB FX3中文手册是开发者进行EZ-USB FX3开发的重要参考资料,其丰富的技术文档和应用案例,不仅方便理解和掌握具体技术,也为EZ-USB FX3的使用和开发提供了强有力的技术支持。 ### 回答2: EZ-USB FX3是Cypress公司生产的一款USB3.0控制器芯片,它被广泛地应用于PC外围设备、工业控制、医疗设备、视频采集等领域。EZ-USB FX3中文手册是介绍这个芯片的技术手册,主要包括芯片的硬件结构、软件开发环境、通信协议、应用案例等方面的内容。通过阅读这个手册,人们可以了解到EZ-USB FX3芯片的主要性能和特点,以及如何使用这款芯片来开发USB3.0设备。同时,手册还提供了详细的软件开发说明和代码示例,方便开发人员快速上手开发工作,提高开发效率。此外,手册还介绍了芯片的系统应用案例,包括USB3.0摄像头、USB3.0数据采集卡、USB3.0外置硬盘等。这些案例可以为用户提供参考和借鉴,帮助用户快速了解如何使用EZ-USB FX3芯片来实现自己的USB3.0应用。总之,EZ-USB FX3中文手册是一本非常实用的技术手册,对于开发USB3.0设备的工程师和研究人员来说,是必不可少的参考资料。 ### 回答3: EZ-USB FX3是一种USB3.0外设控制器芯片,可用于设计和制造具有高速数据传输的USB设备。EZ-USB FX3中文手册详细介绍了这款芯片的基本原理、硬件设计、软件编程等内容,对于开发者来说是非常有价值的参考资料。 手册介绍了使用EZ-USB FX3开发USB设备所需的基本工具和建议,并详细讲述了芯片的硬件设计细节,例如如何选择封装和引脚,如何连接外部器件,以及如何配置与芯片相连接的主机接口等。手册还说明了如何使用EZ-USB FX3软件开发套件,以及如何编写C、C++和Python等编程语言的应用程序来控制芯片。 手册的中文版是为中国市场专门翻译的,对于不熟悉英文的开发者来说非常方便。手册的每章内容都非常详细,同时还配有示意图和代码示例,使得开发者更容易理解和掌握所有的技巧和技术。 总之,EZ-USB FX3中文手册是一本非常实用的参考资料,适用于所有需要设计和制造USB3.0外设的开发者。无论是对于初学者还是有经验的开发者,手册都可以提供全面准确的指导和帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值