TiGPIO - 通用输入/输出

General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,能够提供额外的控制和监视功能,具体可参考https://baike.baidu.com/item/gpio或https://en.wikipedia.org/wiki/General-purpose_input/output。

TiJOS Framework提供TiGPIO来支持GPIO功能,其将GPIO按照port分组,共支持256组,组号范围0-255,即,port0-port255,其中每组内按照pin划分16条线,线号范围0-15,即,pin0-pin15,每条线都支持指定模式的单独设置。

Java包

tijos.framework.devicecenter

TiGPIO工作模式定义

工作模式 说明
INPUT_FLOATING 浮空输入模式,默认模式
INPUT_PULLUP 上拉输入模式
INPUT_PULLDOWN 下拉输入模式
OUTPUT_OD 开漏输出模式
OUTPUT_PP 推挽输出模式

TiGPIO事件模式定义

事件模式只有具备输入模式的pin能支持。

事件模式 说明
EVENT_NONE 无事件,默认模式
EVENT_RISINGEDGE 上升沿事件模式
EVENT_FALLINGEDGE 下降沿事件模式
EVENT_BOTHEDGE 双沿事件模式

TiGPIO方法定义

TiGPIO类中主要的方法:

说明 方法
静态方法,通过指定port和pin集合打开指定GPIO,返回TiGPIO对象 TiGPIO open(int portID, int... pinIDs)
关闭当前TiGPIO对象 void close()
设置当前TiGPIO对象指定pin的工作模式 void setWorkMode(int pinID, int mode)
设置当前TiGPIO对象指定pin的事件参数,捕获周期单位:us void setEventParameters(int pinID, int evt, int captureFilter)
读当前TiGPIO对象port数据,16位数据 readPort()
写当前TiGPIO对象port数据,16位数据 writePort(int value)
读当前TiGPIO对象指定pin电平 readPin(int pinID)
写当前TiGPIO对象指定pin电平 writePin(int pinID, int levelValue)

TiGPIO类中他方法的技术说明请参考TiJOS JDK framework说明文档。

TiGPIO对象创建与销毁

TiGPIO对象的创建需要调用open静态方法,传入指定port和pin集合参数,返回创建的接口对象。

TiGPIO对象的销毁需要调用close方法。

...
int gpioPort0 = 0; //定义接口,port0
int gpioPin0 = 0;  //定义pin集合
int gpioPin1 = 1;
TiGPIO gpio0 = TiGPIO.open(gpioPort0, gpioPin0, gpioPin1); //打开port0,返回TiGPIO接口对象
...
...
...
gpio0.close(); //销毁当前对象

TiGPIO模式设置

TiGPIO模式通过setWorkMode方法设置,设置参数为推挽输出模式和上拉输入模式。

...
gpio0.setWorkMode(gpioPin0, TiGPIO.OUTPUT_PP); //推挽输出
gpio0.setWorkMode(gpioPin1, TiGPIO.INPUT_PULLUP); //上拉输入
...

注意:输入输出以及上下拉模式受平台特性限制,设置时须了解硬件平台特性。

TiGPIO事件设置

TiGPIO事件通过setEventParameters方法设置,设置参数为事件类型和最小捕获周期。

最小捕获周期:指定周期内只能捕获一次事件,如:捕获周期为10us,在这个时间内发生了5次事件,则只能捕获第一次,其他事件自动丢弃。

事件的分发:TiJOS事件通过事件中心eventcenter统一管理和分发,TiGPIO设置了事件之后需要在事件中心注册GPIO类型事件监听回调。

...
gpio0.setEventParameters(gpioPin1, TiGPIO.EVENT_FALLINGEDGE, 0);
...
TiEventCenter.getEventCenter().addListener(new TiGPIOEvent()); //向事件中心添加GPIO事件监听
...
public class TiGPIOEvent implements ITiEventListener {
    @Override
    public TiEventType getType() {
        return TiEventType.GPIO;
    }

    @Override
    public void onEvent(ITiEvent evt) {
        TiGPIOEvent event =  (TiGPIOEvent)evt;
         System.out.println("pin:"event.getPin()+" event:"+event.getEvent()); //打印发生事件的                                                                        //pin和event
        }
    }
    ...
    ...
}

事件中心的详细使用方法请参考tijos.framework.eventcenter说明。

注意:事件类型受平台特性限制,设置时须了解硬件平台特性。

TiGPIO输入输出

TiGPIO通过readPort、writePort和readPin、writePin完成输入输出操作。

...
int value = gpio0.readPort(); //读接口数值,每个接口为16位
int level = gpio0.readPin(gpioPin1); //读取pin1电平,1:高电平   0:低电平
...
gpio0.writePort(0x01); //向接口写数值0x01
gpio0.writePort(0x00); //向接口写数值0x00
...
gpio0.writePin(gpioPin0, 1); //向pin0写高电平
gpio0.writePin(gpioPin0, 0); //向pin0写低电平
...

具体可参考TiJOS Framework说明文档。