|
本帖最后由 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;
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|