当前位置: 代码迷 >> WinCE >> TQ2440 WINCE6.0 ADC驱动ADC_Read与ADC_Write,该如何解决
  详细解决方案

TQ2440 WINCE6.0 ADC驱动ADC_Read与ADC_Write,该如何解决

热度:213   发布时间:2016-04-28 12:39:55.0
TQ2440 WINCE6.0 ADC驱动ADC_Read与ADC_Write
本帖最后由 langlangzhengtu2010 于 2011-09-05 20:31:49 编辑
如题,大大们,我从天嵌论坛找的ADC驱动只实现了ADC_Read的功能,而ADC_Write没有实现。
我觉得这两个程序应该差不多,但是不知该怎么写ADC_Write,请指教!谢谢!


DWORD ADC_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count)
{
int i;

Count=sizeof(nADC_Value);
dwADCCON_Save=v_pADCregs->ADCCON;

for(i=0;i<4;i++)
{
nADC_Value[i]=0;
if(!bADC_Enable[i]) continue;
nADC_Value[i] = ReadADC(i);
Sleep(10);
}

v_pADCregs->ADCCON = dwADCCON_Save;
Sleep(20);
memcpy(pBuffer,&nADC_Value[0],Count);  

RETAILMSG(1,(TEXT("ADC_Control: ADC_Read\r\n")));
return TRUE;
}


int ReadADC(int ch)
{
v_pADCregs->ADCCON = (1<<14)|(cbytPreScalerValue<<6)|(ch<<3);   //setup channel
v_pADCregs->ADCCON|=0x1; //start ADC
while(v_pADCregs->ADCCON & 0x1); //check if Enable_start is low
while(!(v_pADCregs->ADCCON & 0x8000)); //check if EC(End of Conversion) flag is high

RETAILMSG(1,(TEXT("NO: %d  Data: %d\r\n"),ch,(int)v_pADCregs->ADCDAT0 & 0x3ff));
return ( (int)v_pADCregs->ADCDAT0 & 0x3ff );  //此处返回读数据,改为写数据怎么做呢?
}

DWORD ADC_Write(DWORD hOpenContext, LPCVOID pSourceBytes, DWORD NumberOfBytes)
{
RETAILMSG(1,(TEXT("ADC_Control: ADC_Write\r\n")));
return 0;
}


AD驱动可以采集AIN0-AIN4的端口,DeviceIoControl中参数
dwIoControlCode    0位 表示是否采集AIN0,1采集,0不采集
                   1位 表示是否采集AIN1,1采集,0不采集
                                 。。。
                   3位 表示是否采集AIN3,1采集,0不采集

应用程序中读操作:
DeviceIoControl(m_hDriver,0xF, NULL,0,NULL,0,NULL,NULL);

ReadFile(m_hDriver,nCntValue,sizeof(nCntValue),&nBytesRead,NULL)   //温度数据读取到数组nCntValue[4]中

那么写操作也可以这样吧:
DeviceIoControl(m_hDriver,0xF, NULL,0,NULL,0,NULL,NULL);

WriteFile(m_hDriver,nCntValue,sizeof(nCntValue),&nBytesWrite,NULL)   //温度数据从数组nCntValue[4]中写入缓存区

我不知道以上分析对不对,而具体又该如何改,请大大们指点!谢谢!
------解决方案--------------------
ADC_Write没必要实现,因为你只需要转换好的值,直接读取就可以了,其他的使用DeviceIoControl来控制
------解决方案--------------------
引用:
引用:
ADC_Write没必要实现,因为你只需要转换好的值,直接读取就可以了,其他的使用DeviceIoControl来控制

可是现在有四个AD口可用,我想对任意口同时实现“读和写”的功能,不知道该怎么实现呢?
我找到两段程序:
源码1:
C/C++ code

DWORD ADC_Write(DWORD hOpenContext,
       ……

感觉还是不用写ADC_Write函数,很多源码多没有写
还是具体放在使用DeviceIoControl吧
  相关解决方案