定义一个Struct AD的结构来存储传入的AD配置参数(通道号,方向,值等)、设备文件名称等信息,根据输入的电流电压选择参数,通过读取AD寄存器中的值获得AD设备返回的电流值和电压值,并通过观测值对返回值进行校正。
该模块实现了应用层对于AD设备操作的封装,能够实现AD设备的初始化、读取电流数值和读取电压数值等功能。
无
l 结构体设计
1. Struct AD的结构来存储传入的AD配置参数(设备名称,通道号,方向,电流或者电压值等)等信息
typedef struct AD{ dll_t node; devClass class; char name[32]; uint8 chan;// channel of the AD,0~4 used to the voltage,5~7 used to the current uint32 regval;//value read from AD DATA register float vol;//voltage:-40.0~+40.0,unit: V float current;//current:0~20, unit:mA }objAD; |
l 主要函数说明
函数原型 | objAD * AD_init( const char *name, uint8 chan ) |
功能描述 | 初始化AD设备 |
输入参数 | const char *name:AD设备名称,不超过32个字节; uint8 chan:通道号,范围为0~7
|
输出参数 | 无 |
全局变量值的变化 | 无 |
返回值 | NULL-失败; AD设备指针-成功。 |
函数原型 | STATUS AD_getVoltage(objAD * obj) |
功能描述 | 获取AD电压,对应通道号为0~4 |
输入参数 | objAD * obj:初始化分配的设备指针,设置其chan字段,指定通道号
|
输出参数 | objAD * obj:获取的电压放置在其的vol字段,寄存器值放置在regval字段 |
全局变量值的变化 | 无 |
返回值 | ERROR-失败; OK-成功。 |
函数原型 | STATUS AD_getCurrent(objAD * obj) |
功能描述 | 获取AD电流,对应通道号为5~7 |
输入参数 | objAD * obj:初始化分配的设备指针,设置其chan字段,指定通道号
|
输出参数 | objAD * obj:获取的电压放置在其的current字段,寄存器值放置在regval字段 |
全局变量值的变化 | 无 |
返回值 | ERROR-失败; OK-成功。 |
函数原型 | STATUS AD_close(objAD * obj) |
功能描述 | 关闭打开的所有AD设备通道,释放其资源 |
输入参数 | objAD * obj:初始化分配的设备指针
|
输出参数 | 无 |
全局变量值的变化 | 无 |
返回值 | ERROR-失败; OK-成功。 |
无
基于API实现能够测试AD控制器的配置和读写功能的测试程序
int adtest(int argc, char **argv) { STATUS ret = OK; int i = 0; int error = 0; objAD * pAD[AD_MAX_CHAN] = {NULL,}; int result = PASS; uint32 count = 0; int type = 0; int chan = 0;
const char * adname[]={"voltage0", "voltage1", "voltage2", "voltage3", "voltage4", "current0", "current1", "current2"}; for(i = 0; i < AD_MAX_CHAN; ++i) { pAD[i] = AD_init(adname[i], i); if(NULL == pAD[i]) { OUT_MSG("init ad %s error:%x",adname[i], gErrNo); } } OUT_MSG("**************test AD start**********************\n"); switch(type) { case 0: for(i = 0; i < count; ++i) { for(chan = 0 ; chan < 5; ++chan ) { if (OK == AD_getVoltage(pAD[chan])) { OUT_MSG("GET %s Voltage:%f V\n",pAD[chan]->name, pAD[chan]->vol); }else{ OUT_MSG("Failed to get %s voltage.\n", pAD[chan]->name); } } PAUSE(); } break; case 1: for(i = 0; i < count; ++i) { for(chan = 0 ; chan < 3; ++chan ) { if (OK == AD_getCurrent(pAD[chan+5])) { OUT_MSG("GET %s Current:%f mA\n",pAD[chan+5]->name, pAD[chan+5]->current); }else{ OUT_MSG("Failed to get %s current.\n", pAD[chan+5]->name); } } PAUSE(); }// break; default:
OUT_MSG("wrong type.\n"); exit(0); } /* release the resources */ for(i = 0; i < AD_MAX_CHAN; ++i) { AD_close(pAD[i]); } OUT_MSG("*********************test AD OK********************\n");
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