定义一个Struct GPIO的结构来存储传入的GPIO配置参数(通道号,方向,值等)、设备文件名称等信息,采用libc库标准文件操作实现GPIO设备的初始化、配置以及读写操作。
该模块实现了应用层对于GPIO设备操作的封装,能够实现对于GPIO的初始化、参数配置,读和写等功能。
无
l 结构体设计
1. Struct GPIO的结构来存储传入的GPIO配置参数(通道号,方向,值等)、设备文件名称等信息
typedef struct gpio_comm{ uint16 chan;//logic channel:0~GPIO_MAX_LOGIC_NUM-1 uint16 userChan;//user defined channel:0~GPIO_MAX_USER_NUM-1 int8 direction;//0:out,1:in int8 value; }gpio_comm; typedef struct GPIO{ dll_t node; devClass class; #define GPIO_NAME_LEN (32) char name[GPIO_NAME_LEN];//unused uint32 base;//the mapped basic GPIO address gpio_comm comm; uint32 flag; #define GPIO_FLAG_EXPORTED (0x00000001) }objGPIO; |
l 主要函数说明
函数原型 | objGPIO * gpio_init( gpio_comm pVal[], int32 len ) |
功能描述 | 初始化GPIO模块 |
输入参数 | gpio_comm pVal[]:GPIO的索引,方向,值; int32 len:GPIO的数量 |
输出参数 | 无 |
全局变量值的变化 | 无 |
返回值 | NULL-失败; GPIO对象指针-成功 |
函数原型 | STATUS gpio_cfg(objGPIO * obj) |
功能描述 | 配置GPIO通道,方向,值 |
输入参数 | objGPIO * obj: GPIO对象指针 |
输出参数 | 无 |
全局变量值的变化 | 无 |
返回值 | OK-成功 ERROR-失败 |
函数原型 | STATUS gpio_get(objGPIO * obj) |
功能描述 | 读取GPIO数据 |
输入参数 | objGPIO * obj: GPIO对象指针 |
输出参数 | 无 |
全局变量值的变化 | 无 |
返回值 | OK-成功 ERROR-失败 |
函数原型 | STATUS gpio_put(objGPIO * obj) |
功能描述 | 写入数据到循环缓冲内 |
输入参数 | objGPIO * obj: GPIO对象指针 |
输出参数 | 无 |
全局变量值的变化 | 无 |
返回值 | OK-成功 ERROR-失败 |
无
基于API实现能够测试GPIO配置和读写功能的测试程序
int gpiotest(int argc, char **argv) { STATUS ret = OK; int i = 0; int error = 0; int result = PASS; uint32 count = 0; int testval[]= {1,0}; objGPIO * pGpio = NULL; int chan = 0;
pGpio = gpio_init(); if(NULL == gpGpio) { ret |= ERR_INIT_GPIO; OUT_MSG("init gpio error\n"); goto QUIT; } /* gpio output test */ OUT_MSG("***********************test GPIO start***************************\n"); for(i=0; i < count; ++i) { for(chan = 1; chan < GPIO_MAX_USER_NUM; ++chan) { delay(); if ( ((chan >= 33) && (chan <= 41)) || ((chan >= 44) && (chan <= 55)) || ((chan >= 78) && (chan < GPIO_MAX_USER_NUM )) ) {/* out */ pGpio[chan].comm.value = testval[i]; if (OK == gpio_put(&pGpio[chan])) { OUT_MSG("set GPIO%d %d ,",chan,pGpio[chan].comm.value); }else{ OUT_MSG("set GPIO%d failed,",chan); } } if ( (chan > 55) && (chan < 78) ) {/* set 0 to light control LED */ pGpio[chan].comm.value = 1- testval[i]; if (OK == gpio_put(&pGpio[chan])) { OUT_MSG("set GPIO%d %d ,",chan,pGpio[chan].comm.value); }else{
OUT_MSG("set GPIO%d failed,",chan); } } pGpio[chan].comm.value = 1- testval[i]; if (OK == gpio_get(&pGpio[chan])) { OUT_MSG("get GPIO%d:%d .\n",chan,pGpio[chan].comm.value); }else{ OUT_MSG("get GPIO%d failed.\n",chan); } } PAUSE(); } OUT_MSG("-----------test input voltage change--------------\n"); PAUSE(); for(i = 0; i < count; ++i) { for(chan = 1; chan <= 11; ++chan) { pGpio[chan].comm.value = 0; if (OK == gpio_get(pGpio[chan])) { OUT_MSG("get GPIO%d:%d .\n",chan,pGpio[chan].comm.value); }else{
OUT_MSG("get GPIO%d failed.\n",chan); } } for(chan =14; chan <= 32; ++chan) { pGpio[chan].comm.value = 0; if (OK == gpio_get(&pGpio[chan])) { OUT_MSG("get GPIO%d:%d .\n",chan,pGpio[chan].comm.value); }else{
OUT_MSG("get GPIO%d failed.\n",chan); } } for(chan =42; chan <= 43; ++chan) { pGpio[chan].comm.value = 0; if (OK == gpio_get(&gpGpio[chan])) { OUT_MSG("get GPIO%d:%d .\n",chan,pGpio[chan].comm.value); }else{
OUT_MSG("get GPIO%d failed.\n",chan); } }
PAUSE(); } OUT_MSG("*******************test GPIO OK*********************\n"); QUIT: return ret; } |
无
好评率:100%
好评数量:0个
工作速度:5分
工作质量:5分
工作态度:5分
暂无评价
CPU/GPU ¥12000.00
CPU/GPU ¥25000.00
CPU/GPU ¥10000.00
CPU/GPU ¥30000.00
CPU/GPU ¥10000.00
CPU/GPU ¥15000.00
CPU/GPU ¥10000.00
CPU/GPU ¥10000.00
其他 ¥5000.00
其他 ¥5000.00
其他 ¥10000.00
其他 ¥10000.00
其他 ¥10000.00
其他 ¥10000.00
其他 ¥10000.00
其他 ¥10000.00
FPGA电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
CPU/GPU ¥10000.00
FPGA电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
FPGA电路 ¥10000.00
DSP电路 ¥10000.00
CPU/GPU ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
CPU/GPU ¥10000.00
FPGA电路 ¥10000.00
FPGA电路 ¥10000.00
模拟电路 ¥10000.00
模拟电路 ¥5000.00
模拟电路 ¥5000.00
模拟电路 ¥5000.00
模拟电路 ¥10000.00
模拟电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
FPGA电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
CPU/GPU ¥20000.00
CPU/GPU ¥20000.00
CPU/GPU ¥20000.00
CPU/GPU ¥20000.00
CPU/GPU ¥15000.00
CPU/GPU ¥20000.00
CPU/GPU ¥18000.00
CPU/GPU ¥20000.00
其他 ¥10000.00
其他 ¥6000.00
其他 ¥2000.00
其他 ¥3000.00
其他 ¥12000.00
其他 ¥8000.00
FPGA电路 ¥5000.00
MCU电路 ¥4800.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
MCU电路 ¥50000.00
MCU电路 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥500000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00