天嵌 ARM开发社区

 找回密码
 注册
查看: 3077|回复: 5

DS18B20驱动文法打开,麻烦各位大侠指点,先谢过啦

[复制链接]
AK_47_1 发表于 2013-8-27 17:34:21 | 显示全部楼层 |阅读模式
本帖最后由 AK_47_1 于 2013-8-28 11:53 编辑

DS18b20的驱动程序用CreateFile()函数无法的开,请各位大侠指点

HANDLE hGio = CreateFile(L"GIO1:", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
   
if (hGio == INVALID_HANDLE_VALUE)
     {
   MessageBox(_T("Can not open GIO!"), _T("GIO"), MB_OK);
         return 0;
}

驱动程序如下:
#include <windows.h>
#include <ceddk.h>
#include <tchar.h>
#include <nkintr.h>
#include <pm.h>
#include <s3c2440a.h>
#include <s3c2440a_ioport.h>
#include <s3c2440a_base_regs.h>
#include <s3c2440a_clkpwr.h>
#include "pmplatform.h"
#include "Pkfuncs.h"
#include "BSP.h"
#include "ioctl_cfg.h"
//裸机头文件
//#include "option.h"
//#include "profile.h"
//#include "GPIODriver.h"
#define U32 unsigned int
#define U16 unsigned short
#define U8  unsigned char
//#define   DQ_IN     v_pIOPregs->GPGCON &= 0xFFFFFFFC
//#define   DQ_OUT    v_pIOPregs->GPGCON = (v_pIOPregs->GPGCON & 0xFFFFFFFC)|0x01
//#define   DQ_DOWN   v_pIOPregs->GPGUP |= (1 << 0)
//#define   DQ_UP     v_pIOPregs->GPGUP &= ~(1 << 0)
//#define   DQ_H      v_pIOPregs->GPGDAT |= (1 << 0)
//#define   DQ_L      v_pIOPregs->GPGDAT &= ~(1 << 0)
//#define   DQ_STAT   v_pIOPregs->GPGDAT &= 0x1
//定义DS18B20ROM指令
#define    DS18B20_ReadROM        0x33    //读ROM
#define    DS18B20_MatchROM       0x55    //匹配ROM
#define    DS18B20_SkipROM        0xCC    //跳过ROM
#define    DS18B20_SearchROM      0xF0    //搜索ROM
#define    DS18B20_AlarmROM       0xEC    //报警搜索
//定义DS18B20存储器操作命令
#define    DS18B20_WriteSCR       0x4E    //写暂存存储器
#define    DS18B20_ReadSCR        0xBE    //读暂存存储器
#define    DS18B20_CopySCR        0x48    //复制暂存存储器
#define    DS18B20_ConvertTemp    0x44    //温度变换
#define    DS18B20_RecallEP       0xB8    //重新调出
#define    DS18B20_ReadPower      0xB4    //读电源
volatile S3C2440A_IOPORT_REG *v_pIOPregs;
BOOL mInitialized;
bool InitializeAddresses(VOID);      // Virtual allocation
void usDelay(int time);
BOOL DS18B20_Init(void);
U8 DS18B20_ReadBit(void);
U8 DS18B20_ReadByte(void);
void DS18B20_WriteByte(U8 dat);
U16 DS18B20_Temperature(void);
bool InitializeAddresses(VOID)
{
bool RetValue = TRUE;
/* IO Register Allocation */
v_pIOPregs = (volatile S3C2440A_IOPORT_REG *)VirtualAlloc(0, sizeof(S3C2440A_IOPORT_REG), MEM_RESERVE, PAGE_NOACCESS);
if (v_pIOPregs == NULL)
{
  ERRORMSG(1,(TEXT("For IOPregs : VirtualAlloc faiGPIO!\r\n")));
  RetValue = FALSE;
}
else
{
  if (!VirtualCopy((PVOID)v_pIOPregs, (PVOID)(S3C2440A_BASE_REG_PA_IOPORT >> 8), sizeof(S3C2440A_IOPORT_REG), PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE))
  {
   ERRORMSG(1,(TEXT("For IOPregs: VirtualCopy faiGPIO!\r\n")));
   RetValue = FALSE;
  }
}
if (!RetValue)
{
  if (v_pIOPregs)
  {
   VirtualFree((PVOID) v_pIOPregs, 0, MEM_RELEASE);
  }
  v_pIOPregs = NULL;
}
return(RetValue);
}

(数据采集部分)。。。。。

BOOL WINAPI  
DllEntry(HANDLE hinstDLL,
   DWORD dwReason,
   LPVOID /* lpvReserved */)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
  DEBUGREGISTER((HINSTANCE)hinstDLL);
  return TRUE;
case DLL_THREAD_ATTACH:
  break;
case DLL_THREAD_DETACH:
  break;
case DLL_PROCESS_DETACH:
  break;
#ifdef UNDER_CE
case DLL_PROCESS_EXITING:
  break;
case DLL_SYSTEM_STARTED:
  break;
#endif
}
return TRUE;
}

BOOL GIO_Deinit(DWORD hDeviceContext)
{
BOOL bRet = TRUE;
RETAILMSG(1,(TEXT("GPIO_Control: GIO_Deinit\r\n")));
VirtualFree((PVOID)v_pIOPregs, 0, MEM_RELEASE);
return TRUE;
}

DWORD GIO_Init(DWORD dwContext)
{
RETAILMSG(1,(TEXT("GPIO Initialize ...")));
        
        InitializeAddresses();
if (!InitializeAddresses())
  return FALSE;
// v_pIOPregs->GPBCON  = (v_pIOPregs->GPBCON  &~(3 << 10)) | (1<< 10); // GPG0 == OUTPUT.
// v_pIOPregs->GPBCON  = (v_pIOPregs->GPBCON  &~(3 << 12)) | (1<< 12); // GPB6 == OUTPUT.
// v_pIOPregs->GPBCON  = (v_pIOPregs->GPBCON  &~(3 << 14)) | (1<< 14); // GPB7 == OUTPUT.
// v_pIOPregs->GPBCON  = (v_pIOPregs->GPBCON  &~(3 << 16)) | (1<< 16); // GPB8 == OUTPUT.

mInitialized = TRUE;
RETAILMSG(1,(TEXT("OK !!!\r\n")));
return TRUE;
}
BOOL GIO_IOControl(DWORD hOpenContext,
       DWORD dwCode,
       PBYTE pBufIn,
       DWORD dwLenIn,
       PBYTE pBufOut,
       DWORD dwLenOut,
       PDWORD pdwActualOut)
{
//switch(dwCode)
//{
    //    case 0x01:
    //          DS18B20_Temperature(pBufOut);
    //          break;
    //
    //     case 0x02:
    //          break;
// case IO_CTL_GPIO_1_ON:
//  v_pIOPregs->GPBDAT=v_pIOPregs->GPBDAT&~(0x1<<5);
//  break;
// case IO_CTL_GPIO_2_ON:
//  v_pIOPregs->GPBDAT=v_pIOPregs->GPBDAT&~(0x1<<6);
//  break;
// case IO_CTL_GPIO_3_ON:
//  v_pIOPregs->GPBDAT=v_pIOPregs->GPBDAT&~(0x1<<7);
//  break;
// case IO_CTL_GPIO_4_ON:
//  v_pIOPregs->GPBDAT=v_pIOPregs->GPBDAT&~(0x1<<8);
//  break;
// case IO_CTL_GPIO_ALL_ON:
//  v_pIOPregs->GPBDAT=v_pIOPregs->GPBDAT&~(0xF<<5);
//  break;
// case IO_CTL_GPIO_1_OFF:
//  v_pIOPregs->GPBDAT=v_pIOPregs->GPBDAT|(0x1<<5);
//  break;
// case IO_CTL_GPIO_2_OFF:
//  v_pIOPregs->GPBDAT=v_pIOPregs->GPBDAT|(0x1<<6);
//  break;
// case IO_CTL_GPIO_3_OFF:
//  v_pIOPregs->GPBDAT=v_pIOPregs->GPBDAT|(0x1<<7);
//  break;
// case IO_CTL_GPIO_4_OFF:
//  v_pIOPregs->GPBDAT=v_pIOPregs->GPBDAT|(0x1<<8);
//  break;
// case IO_CTL_GPIO_ALL_OFF:
//  v_pIOPregs->GPBDAT=v_pIOPregs->GPBDAT|(0xF<<5);
//  break;
//default:
// break;
//}
   
RETAILMSG(0,(TEXT("GPIO_Control:Ioctl code = 0x%x\r\n"), dwCode));
return TRUE;
}
DWORD GIO_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode)
{
// v_pIOPregs->GPBDAT=v_pIOPregs->GPBDAT|(0xF<<5);
    RETAILMSG(1,(TEXT("GPIO_Control: GPIO_Open\r\n")));
    DS18B20_Init();
    if(DS18B20_Init())
    {
      RETAILMSG(1,(TEXT("STRINGS:GIO_Open uable to open device!\n")));     
      return -1;
    }
    else
    {
     RETAILMSG(1,(TEXT("STRINGS:GIO_Open open device!\n")));
    }
return TRUE;
}
BOOL GIO_Close(DWORD hOpenContext)
{
// v_pIOPregs->GPBDAT=v_pIOPregs->GPBDAT&(0xF<<5);
RETAILMSG(1,(TEXT("GPIO_Control: GPIO_Close\r\n")));
return TRUE;
}
void GIO_PowerDown(DWORD hDeviceContext)
{
RETAILMSG(1,(TEXT("GPIO_Control: GPIO_PowerDown\r\n")));
}
void GIO_PowerUp(DWORD hDeviceContext)
{
RETAILMSG(1,(TEXT("GPIO_Control: GPIO_PowerUp\r\n")));
}
DWORD GIO_Read(DWORD hOpenContext, unsigned char* pBuffer, DWORD Count)
{
RETAILMSG(1,(TEXT("GPIO_Control: GPIO_Read\r\n")));
unsigned int i;
for(i=0;i<Count;i++)
{
   *(unsigned char *)pBuffer=DS18B20_ReadByte();
   pBuffer+=1;
}
return i;
}
DWORD GIO_Seek(DWORD hOpenContext, long Amount, DWORD Type)
{
RETAILMSG(1,(TEXT("GPIO_Control: GPIO_Seek\r\n")));
return 0;
}
DWORD GIO_Write(DWORD hOpenContext, LPCVOID pSourceBytes, DWORD NumberOfBytes)
{
RETAILMSG(1,(TEXT("GPIO_Control: GPIO_Write\r\n")));
        unsigned char data=*(unsigned char *)pSourceBytes;
   DS18B20_WriteByte(data);
return 0;
}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| AK_47_1 发表于 2013-8-27 17:35:28 | 显示全部楼层
测温程序在裸机上测试功能正常,再次表示感谢
TQ-lkp 发表于 2013-8-28 10:28:25 | 显示全部楼层
搞定了,啥问题?另外请将帖子修改为“已解决”
 楼主| AK_47_1 发表于 2013-8-28 11:48:10 | 显示全部楼层
本帖最后由 AK_47_1 于 2013-8-28 11:54 编辑
TQ-lkp 发表于 2013-8-28 10:28
搞定了,啥问题?另外请将帖子修改为“已解决”

没有解决,只是测温程序在裸机上测试可以,但是驱动用CreateFile无法打开,麻烦大侠帮忙指点一下,谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| AK_47_1 发表于 2013-8-30 09:43:12 | 显示全部楼层
麻烦大侠们帮忙看看程序吧,帮忙找一下问题,谢谢
阿苏约尔 发表于 2014-5-5 21:33:52 | 显示全部楼层
楼主解决问题没啊,我现在急需要DS18B20的驱动程序,不知楼主上面的驱动在哪有问题啊,求帮助。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-4-26 01:44 , Processed in 1.031250 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表