GPIO(General-purpose input/output)即通用输入输出,根据名字就能够了解到在实际应用中可以有很多种用途,最常见的便是用来控制LED灯的亮灭,或用来侦测输入信号的高低变化。英创工控主板都给用户提供了丰富的GPIO资源,ESMARC系列的板卡拥有32位GPIO,为了方便用户能够更方便的进行开发,英创公司进一步在软件上也增加了一些实用的功能。在GPIO用作控制LED灯的时候,用户可以直接使用Linux的LED子系统来对指定的GPIO口进行设置和操作,比如LED的亮灭或者设置触发方式等。如果是将GPIO设置为输入状态侦测输入信号的高低变化,一旦电平发生变化,内核就会通知应用程序,这时使用select函数就可以接收到内核发出的消息,不用再通过while或者for函数不断的轮询,实际的功能已经在ESMARC系列的ESM6800主板上通过测试和验证了。下面就针对两个功能来介绍一下具体的使用方法。
用户使用GPIO控制LED灯,可以直接调用英创公司提供的API函数,将GPIO置为输出然后置高或者置低。不过Linux系统将控制LED灯的这部分功能整合起来,设计成了一个标准的LED子系统,对LED子系统的操作在shell环境中就能完成。英创公司也将这部分功能的支持加入到了板卡中,如果熟悉使用LED子系统来控制的用户,就可以选用这种方式。通过加载一个内核模块led-emtronix.ko来启用LED子系统,加载的时候通过参数gpios来设置需要使用LED子系统操作的GPIO,gpios参数为一个32位的整数,代表32位GPIO,1表示enable而0表示disable。所以当我们选用GPIO0~GPIO3时,加载内核模块的命令如下:insmode led-emtronix.ko gpios=0x0f,加载完成后,用户