我现在编写了一个4路AD信号采集的驱动,驱动具体代码如下:
DWORD ADC_Read(DWORD hOpenContext,LPVOID pBuffer,DWORD Count)
{
int Channel[]={0,1,2,3};
pADCreg->ADCCON &= 0x8000;//initiallize ADCCON Register
pADCreg->ADCCON |= (1 << 14);//use prescale
pADCreg->ADCCON |= (ADCPRS << 6);// set prescale
pADCreg->ADCTSC &= ~(1<<2); //set ADCTSC normal ADC mode
////////读取4个通道AD转换的值//////////////////////////
for(int i=0; i<4; i++)
{
pADCreg->ADCCON &= ~(7<<3); //clear channel number
pADCreg->ADCCON |= ( Channel[i]<<3 ); //Choose Channel
pADCreg->ADCCON |= 1;//Enable Convertion
while(pADCreg->ADCCON & 0x1); //check if Enable_start is low
while(!(0x8000&pADCreg->ADCCON)); // Check ECFLG
///////////////////Read Buffer/////////////////////////
*((DWORD *)pBuffer+i) = ((pADCreg->ADCDAT0) &= 0x03ff);//将数据传给Read Buffer
RETAILMSG(1,(TEXT("ADC_READ: Read Success! Channel_%x: '%x', ADCCON: '%x'\r\n"),i,
*((DWORD *)pBuffer+i),pADCreg->ADCCON));
}
//////////////////Read Buffer Over/////////////////////
return 4;
}
调试信息显示pBuffer到pBuffer+3中都是正确的转换数据,但是上层应用程序通过Readfile函数读取驱动程序中ADC_Read函数的传递值时,只能取到第一个值,pBuffer+1,pBuffer+2,pBuffer+3的值就取不到了,如何才能将后面三个值传递出去?
------最佳解决方案--------------------
uint m_DispAIN= 0;?
这里要用一个数组才行uint m_DispAIN[4];
后边readfile的时候用这个数组。
------其他解决方案--------------------
应该都是能正常的的,请检查参数传递是否错误
------其他解决方案--------------------
在上层调用驱动的ReadFile接口的时候,你要在上层定义一个数组来存放ReadFile读出来的数据才行
------其他解决方案--------------------
您说的参数传递错误指哪个?我的ReadFile程序如下,你是指下面程序中标红的参数么?
unsafe private void button5_Click(object sender, EventArgs e)
{
int actlen;
bool ret;
float V;
uint m_DispAIN= 0;
uint Temp_DispAIN0 = 0, Temp_DispAIN1 = 0, Temp_DispAIN2 =0, Temp_DispAIN3 = 0;
ret = ReadFile(ADC, &m_DispAIN, 16, &actlen, IntPtr.Zero);
if (ret != true)
MessageBox.Show("read adc channel failed!");