主题 : 6410 win CE6.0下面驱动问题求救? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 55307
精华: 0
发帖: 12
金钱: 65 两
威望: 13 点
综合积分: 24 分
注册时间: 2011-09-15
最后登录: 2017-09-13
楼主  发表于: 2012-11-01 12:07

 6410 win CE6.0下面驱动问题求救?

在S3C6410,win CE 6.0下面写了个外挂AD的驱动,用流式驱动架构写的,AD与CPU的接口为SPI接口,因此在流式驱动中调用了SPI的驱动,代码如下:
  extern "C"
DWORD ADD_Init()
{
  DWORD dwErr,ret;  

U8 temp;
  RETAILMSG(1, (TEXT("LMP90080 Init--\r\n")));
hSPI = CreateFile( L"SPI0:",
  GENERIC_READ|GENERIC_WRITE,
  FILE_SHARE_READ|FILE_SHARE_WRITE,
  NULL, OPEN_EXISTING, 0, 0);
  if ( INVALID_HANDLE_VALUE == hSPI )
{
  dwErr = GetLastError();
  RETAILMSG(1, (TEXT("Error %d opening device '%s' \r\n"), dwErr, L"SPI0:" ));
  }
config.dwMode = 1;
config.bUseFullDuflex = TRUE;
config.bUseRxDMA = TRUE;
config.bUseRxIntr = FALSE;
config.bUseTxDMA = TRUE;
config.bUseTxIntr = FALSE;
config.dwPrescaler = 5;
config.dwTxBurstDataLen = 16;
config.dwRxBurstDataLen = 16;
config.dwTimeOutVal = 10;
ret = DeviceIoControl(hSPI,SPI_IOCTL_SET_CONFIG,&config,sizeof(config),NULL,0,NULL,NULL);
if (ret == false)
RETAILMSG(1, (TEXT("SPI_IOCTL_SET_CONFIG failed!\r\n")));
    
ret = DeviceIoControl(hSPI,SPI_IOCTL_START,NULL,0,NULL,0,NULL,NULL);
if (ret == false)
dwErr = GetLastError();
RETAILMSG(1,(TEXT("SPI_IOCTL_START failed! Error code:%d\r\n"),dwErr));
WriteBToAddr(0x12,0x20);//选择内部时钟  
  //temp=ReadBFromAddr(0x12);
  //WriteBToAddr(0x01,0x08);//路由DRDYB到D6  
  // WriteBToAddr(0x0e,0x03);//设置d0 d1 为输出
  // WriteBToAddr(0x0f,0x03);//设置GPIO全部输出高电平,继电器常开不闭合
  WriteBToAddr(0x10,0x02);//后台校准控制,BGCALCN=0x2
  //WriteBToAddr(0x11,0x83);//路由DRDYB到D6  
  WriteBToAddr(0x21,0x71);//CH0,GAIN_SEL=0x0,BUF_EN=1  
  WriteBToAddr(0x20,0x07);//初始化通道0--v1 VINN=VIN7,VINP=VIN0,VREF_SEL=0
  WriteBToAddr(0x1f,0x0);//初始化通道0
Delay(2);
temp=(ReadBFromAddr(0x1e)&0xFF);
while(0xff==temp);
  result=ReadBFromAddr(0x1b)&0xFFFF;
RETAILMSG(1,(TEXT("LMP90080 Conversion result is:%lu\r\n"),result));
//WriteBToAddr(0x21,0x70);//配置通道特性  
  //WriteBToAddr(0x22,0x0f);//初始化通道1--v2
  //WriteBToAddr(0x23,0x70);//数据率214.65 增益1  
  //WriteBToAddr(0x24,0x17);//初始化通道2--vot
  //WriteBToAddr(0x25,0x70);//使用缓冲  
  return TRUE;
}
  
  现在的问题是执行第一条DeviceIocontrol语句是成功的,而执行到第二条DeviceIocontrol语句时就会出现错误,串口信息如下:
    
  SPI_IOControl: CeOpenCallerBuffer failed for input buffer.
  SPI_IOCTL_START failed! Error code:31
    
  我把第一条DeviceIOcontrol语句注释掉之后,问题依旧。请做过的朋友帮忙分析下原因。。。