FT4222H学习笔记9 - GPIO

FT4222H只有CNFMODE0(4路IO口)或CNFMODE1(2路IO口)时才能使用GPIO,第2(CNFMODE0)或第4(CNFMODE1)个接口才是GPIO的接口。另外,GPIO2默认是USB Suspend输出口。

另外,注意GPIO用的是第二个接口(FT4222_B):

FT4222H.FT_OpenEx(init,

     FT4222H.FT_OPEN_BY_DESCRIPTION,

     ref ft4222Device[cbDevice.SelectedIndex + 1].ftHandle);

 

【初始化函数】

[DllImport("LibFT4222.dll", CallingConvention = CallingConvention.Cdecl)]

public static extern eFT4222Status FT4222_GPIO_Init(

     IntPtr ftHandle, eGPIODir[] gpioDir);

参数gpioDir是对应GPIO的方向。

public enum eGPIODir

{

     GPIO_OUTPUT = 0,

     GPIO_INPUT,

};

例如4个IO分别为输出,输入,输入,输入,其初始化代码如下:

FT4222H.eGPIODir[] gpioDir = new FT4222H.eGPIODir[4];

gpioDir[0] = FT4222H.eGPIODir.GPIO_OUTPUT;

gpioDir[1] = FT4222H.eGPIODir.GPIO_INPUT;

gpioDir[2] = FT4222H.eGPIODir.GPIO_INPUT;

gpioDir[3] = FT4222H.eGPIODir.GPIO_INPUT;

ftStatus = FT4222H.FT4222_GPIO_Init(ftGpioHandle, gpioDir);

 

【修改GPIO2为GPIO模式】

[DllImport("LibFT4222.dll", CallingConvention = CallingConvention.Cdecl)]

public static extern eFT4222Status FT4222_SetSuspendOut(

     IntPtr ftHandle, bool enable);

参数enable表示是否使能GPIO2为USB Suspend输出脚,这里要设置为false。

FT4222H.FT4222_SetSuspendOut(gpioHandle, false);

 

【IO输出】

[DllImport("LibFT4222.dll", CallingConvention = CallingConvention.Cdecl)]

public static extern eFT4222Status FT4222_GPIO_Write(

     IntPtr ftHandle, eGPIOPort portNum, bool bValue);

参数portNum是IO口,

public enum eGPIOPort

{

     GPIO_PORT0 = 0,

     GPIO_PORT1,

     GPIO_PORT2,

     GPIO_PORT3

};

参数bValue是输出电平,false是低电平,true是高电平。

 

【IO输入】

[DllImport("LibFT4222.dll", CallingConvention = CallingConvention.Cdecl)]

public static extern eFT4222Status FT4222_GPIO_Read(

     IntPtr ftHandle, eGPIOPort portNum, ref bool value);

参数与IO输出相同。

 

【IO的触发模式】

触发功能可以帮助开发者监控IO的变化情况。满足触发条件的值会保存在队列中。例如,如果设置GPIO0的触发条件是GPIO_TRIGGER_RISING,如果GPIO0从0变为1,事件GPIO_TRIGGER_RISING就会被记录在队列中,然后开发人员可以通过FT4222_GPIO_GetTriggerStatus和FT4222_GPIO_ReadTriggerQueue查询队列状态。

如果需要监控多个变化情况,可以设置多个条件,例如GPIO_TRIGGER_RISING | GPIO_TRIGGER_FALLING。

public enum eGPIOTrigger

{

     GPIO_TRIGGER_RISING        = 0x01,

     GPIO_TRIGGER_FALLING        = 0x02,

     GPIO_TRIGGER_LEVEL_HIGH     = 0x04,

     GPIO_TRIGGER_LEVEL_LOW      = 0X08

}

[DllImport("LibFT4222.dll", CallingConvention = CallingConvention.Cdecl)]

public static extern eFT4222Status FT4222_GPIO_SetInputTrigger(

     IntPtr ftHandle, eGPIOPort portNum, eGPIOTrigger trigger);

[DllImport("LibFT4222.dll", CallingConvention = CallingConvention.Cdecl)]

public static extern eFT4222Status FT4222_GPIO_GetTriggerStatus(

     IntPtr ftHandle, eGPIOPort portNum, ref UInt16 queueSize);

[DllImport("LibFT4222.dll", CallingConvention = CallingConvention.Cdecl)]

public static extern eFT4222Status FT4222_GPIO_ReadTriggerQueue(

     IntPtr ftHandle, eGPIOPort portNum, eGPIOTrigger[] events,

     UInt16 readSize, ref UInt16 sizeofRead);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值