钛极OS之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 | 推挽输出模式 |
IO_FLOATING_OD | 开漏输出复合浮空输入模式 |
TiGPIO事件模式定义
事件模式只有具备输入模式的pin能支持。
方法 | 说明 |
TiGPIO open(int portID, int... pinIDs) | 静态方法,通过指定port和pin集合打开指定GPIO,返回TiGPIO对象 |
void close( ) | 关闭当前TiGPIO对象 |
void setWorkMode(int pinID, int mode) | 设置当前TiGPIO对象指定pin的工作模式 |
void setEventParameters(int pinID, int evt, int captureFilter) | 设置当前TiGPIO对象指定pin的事件参数,捕获周期单位:us |
readPort( ) | 读当前TiGPIO对象port数据,16位数据 |
writePort(int value) | 写当前TiGPIO对象port数据,16位数据 |
readPin(int pinID) | 读当前TiGPIO对象指定pin电平 |
writePin(int pinID, int levelValue) | 写当前TiGPIO对象指定pin电平 |
TiGPIO类中他方法的技术说明请参考TiJOS JDK framework说明文档。
TiGPIO对象创建与销毁
TiGPIO对象的创建需要调用open静态方法,传入指定port和pin集合参数,返回创建的接口对象。
TiGPIO对象的销毁需要调用close方法。
- <font size="3">...
- int gpioPort0 = 0; //定义接口,port0
- int gpioPin0 = 0; //定义pin集合
- int gpioPin1 = 1;
- TiGPIO gpio0 = TiGPIO.open(gpioPort0, gpioPin0, gpioPin1); //打开port0,返回TiGPIO接口对象
- ...
- ...
- ...
- gpio0.close(); //销毁当前对象</font>
复制代码
TiGPIO模式设置
TiGPIO模式通过setWorkMode方法设置,设置参数为推挽输出模式和上拉输入模式。
- <font size="3">...
- gpio0.setWorkMode(gpioPin0, TiGPIO.OUTPUT_PP); //推挽输出
- gpio0.setWorkMode(gpioPin1, TiGPIO.INPUT_PULLUP); //上拉输入
- ...</font>
复制代码
注意:输入输出以及上下拉模式受平台特性限制,设置时须了解硬件平台特性。
TiGPIO事件设置
TiGPIO事件通过setEventParameters方法设置,设置参数为事件类型和最小捕获周期。
最小捕获周期:指定周期内只能捕获一次事件,如:捕获周期为10us,在这个时间内发生了5次事件,则只能捕获第一次,其他事件自动丢弃。
事件的分发:TiJOS事件通过事件中心eventcenter统一管理和分发,TiGPIO设置了事件之后需要在事件中心注册GPIO类型事件监听回调。
- <font size="3">...
- gpio0.setEventParameters(gpioPin1, TiGPIO.EVENT_FALLINGEDGE, 0);
- ...
- TiEventCenter.getEventCenter().addListener(new TiGPIOEvent()); //向事件中心添加GPIO事件监听
- ...</font>
复制代码
- <font size="3">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()); //打印发生事件的 </font>
复制代码
事件中心的详细使用方法请参考tijos.framework.eventcenter说明。
注意:事件类型受平台特性限制,设置时须了解硬件平台特性。
TiGPIO输入输出
TiGPIO通过readPort、writePort和readPin、writePin完成输入输出操作。
- <font size="3">...
- 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写低电平
- ...</font>
复制代码
更多详细介绍请见钛云物联官网:www.tijos.net