亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? adc.cpp

?? wince5.0環境 S3C2440平臺 ADC驅動程序
?? CPP
字號:
#include <windows.h>
#include <types.h>
#include <excpt.h>
#include <tchar.h>
#include <cardserv.h>
#include <cardapi.h>
#include <tuple.h>
#include <devload.h>
#include <diskio.h>
#include <nkintr.h>
#include <windev.h>
#include <Pkfuncs.h>
#include <bsp.h>
#include <s3c2440a.h>
#include <string.h>

#define PRIVATE			static
#define PUBLIC

HANDLE g_hevInterrupt;//中斷事件句柄
HANDLE g_htIST;
DWORD dwThreadID;

struct ADC_DEV{

	CRITICAL_SECTION	ADC_CS;			//臨界區
	char				channel;		//通道選擇
	char				prescale;		//預分頻
	DWORD				OpenCnt;		// @field Protects use of this port 
	
}adcdev;
struct ADC_DEV *pADC_Dev;

/* I2C 的物理中斷號及邏輯中斷號 */
UINT32 g_ADCIrq = IRQ_ADC;
UINT32 g_ADCSysIntr = 31;             //this value set in the file: "intr.c"  function: "OEMInterruptHandler"

/* ADC 寄存器對應的虛擬地址 */
PRIVATE volatile S3C2440A_ADC_REG * v_pADCPregs;

/* INT 寄存器對應的虛擬地址 */
PRIVATE volatile S3C2440A_INTR_REG * v_pINTPregs;


//////////////////////////////////////////////////////////////////////////////
PUBLIC BOOL WINAPI
DllEntry(HANDLE hInstDll, DWORD dwReason, LPVOID lpvReserved)
{	
	switch (dwReason)
	{
		case DLL_PROCESS_ATTACH:
			//RETAILMSG(1,(TEXT("ADC:DLL_PROCESS_ATTACH\t\n")));
			return TRUE;
	
		case DLL_PROCESS_DETACH:
			//RETAILMSG(1,(TEXT("ADC:DLL_PROCESS_DETACH\t\n")));
			break;
	}

    return TRUE;
}

DWORD WINAPI AdcEventHandler(LPVOID a)//
{
	
		//RETAILMSG(1,(TEXT("AdcEventHandler: Waiting For Interruption Event!\r\n")));
		WaitForSingleObject(g_hevInterrupt,INFINITE);
		//RETAILMSG(1,(TEXT("AdcEventHandler: Interruption has happend! Exit ADC Handler\r\n")));
		InterruptDone(g_ADCSysIntr);
		
		return 0;

}


PRIVATE BOOL ADC_InitializeAddresses(void)
{
	BOOL	RetValue = TRUE;

	RETAILMSG(1, (TEXT(">>> ADC_initalization address..set..\r\n")));
		
	//	ADC Register Allocation
	v_pADCPregs = (volatile S3C2440A_ADC_REG *)VirtualAlloc(0, sizeof(S3C2440A_ADC_REG), MEM_RESERVE, PAGE_NOACCESS);
	if (v_pADCPregs == NULL) 
	{
		ERRORMSG(1,(TEXT("For ADCPregs : VirtualAlloc failed!\r\n")));
		RetValue = FALSE;
	}
	else 
	{
		if (!VirtualCopy((PVOID)v_pADCPregs, (PVOID)(S3C2440A_BASE_REG_PA_ADC >> 8), sizeof(S3C2440A_ADC_REG), PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE)) 
		{
			ERRORMSG(1,(TEXT("For ADCPregs: VirtualCopy failed!\r\n")));
			RetValue = FALSE;
		}
	}
	
	if (!RetValue) 
	{
		RETAILMSG (1, (TEXT("::: ADC_InitializeAddresses - Fail!!\r\n") ));

		if (v_pADCPregs) 
			VirtualFree((PVOID) v_pADCPregs, 0, MEM_RELEASE);

		v_pADCPregs = NULL;
	}
	
	
	//	INT Register Allocation
	v_pINTPregs = (volatile S3C2440A_INTR_REG *)VirtualAlloc(0, sizeof(S3C2440A_INTR_REG), MEM_RESERVE, PAGE_NOACCESS);
    
	if (v_pINTPregs == NULL) 
	{
		ERRORMSG(1,(TEXT("For INTPregs : VirtualAlloc failed!\r\n")));
		RetValue = FALSE;
	}
	else 
	{                                                     
		if (!VirtualCopy((PVOID)v_pINTPregs, (PVOID)(S3C2440A_BASE_REG_PA_INTR >> 8), sizeof(S3C2440A_INTR_REG), PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE)) 
		{
			ERRORMSG(1,(TEXT("For INTPregs: VirtualCopy failed!\r\n")));
			RetValue = FALSE;
		}
	}
	if (!RetValue) 
	{
		RETAILMSG (1, (TEXT("::: ADC_InitializeAddresses - Fail!!\r\n") ));

		if (v_pINTPregs) 
			VirtualFree((PVOID) v_pINTPregs, 0, MEM_RELEASE);

		v_pINTPregs = NULL;
	}
	
	

	return(RetValue);
}

void ADC_Init (void)
{

	pADC_Dev=&adcdev;

	InitializeCriticalSection(&(pADC_Dev->ADC_CS));     //初始化一個臨界資源對象

	ADC_InitializeAddresses();

	// 從 OAL 請求一個 SYSINTR 值
/*    if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &g_ADCIrq, sizeof(UINT32), &g_ADCSysIntr, sizeof(UINT32), NULL))
    {
        RETAILMSG(1, (TEXT("ERROR: ADC: Failed to request sysintr value for ADC interrupt.\r\n")));
        return;
    }

    RETAILMSG(1,(TEXT("INFO: ADC: Mapped Irq 0x%d to SysIntr 0x%d.\r\n"), g_ADCIrq, g_ADCSysIntr));
*/
	////////////////Initialize Event/////////////////
	g_hevInterrupt = CreateEvent(NULL,FALSE,FALSE,NULL);	//create event

	if(g_hevInterrupt==NULL)
	{
		RETAILMSG(1,(TEXT("ERROR: ADC_Init: Event creation failed!\r\n")));
		return;
	}

	//注冊中斷
	if(!InterruptInitialize(g_ADCSysIntr,g_hevInterrupt,NULL,0))
	{
		RETAILMSG(1,(TEXT("ERROR: InterruptInitialize failed!\r\n")));
		return;
	}
			
}

/////////////////////////////////////////////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////////////////////////////////////////////
DWORD ADC_Open(HANDLE hDeviceContext,
			   DWORD AccessCode,
			   DWORD ShareMode)
{
	return(1);
}

BOOL ADC_Close(DWORD hOpenContext)
{
	return TRUE;
}


DWORD ADC_Deinit(DWORD dwDeviceContext)
{
	RETAILMSG(1, (TEXT(":::ADC: ADC Driver deinit.\r\n")));

	// 通知中斷服務線程退出
	PulseEvent(g_hevInterrupt);		
	Sleep(200);												/* 等待.... */

	// 釋放中斷資源
	InterruptDone(g_ADCSysIntr);
	InterruptDisable(g_ADCSysIntr);
	KernelIoControl(IOCTL_HAL_RELEASE_SYSINTR, &g_ADCSysIntr, sizeof(UINT32), NULL, 0, NULL);

	/* 釋放申請的虛擬內存 */
	if (v_pADCPregs)
		VirtualFree((PVOID)v_pADCPregs, 0, MEM_RELEASE);

	if (v_pINTPregs)
		VirtualFree((PVOID)v_pINTPregs, 0, MEM_RELEASE);
	
        return TRUE;
}


BOOL ADC_IOControl(DWORD hOpenContext,
					DWORD dwCode,
					PBYTE pBufIn,
					DWORD dwLenIn,
					PBYTE pBufOut,
					DWORD dwLenOut,
					PDWORD pdwActualOut)
{
	return(TRUE);
}


DWORD ADC_Read(DWORD hOpenContext,
			   LPVOID pBuffer,
			   DWORD Count)
{
	//int m_nISTPriority;
	DWORD ReturnValue;

	////////////////Initialize Thread/////////////////
	g_htIST= CreateThread(	NULL,
							0,
							 AdcEventHandler,
							NULL,
							CREATE_SUSPENDED,
							&dwThreadID
						 );
	
	//設置優先級
	if(!CeSetThreadPriority(g_htIST,151))
	{
		RETAILMSG(1,(TEXT("ADC_READ: Failed setting Thread Priority.\r\n")));
		return 0;
	}
	//恢復IST
	if(ResumeThread(g_htIST) == 0xFFFFFFFF)
	{
		RETAILMSG(1,(TEXT("ADC_READ: Resume Thread failure!.\r\n")));
		return 0;
	}

	///////////////Initialize Thread Over///////////////
	
	///////////////////Enable ADC//////////////////
	EnterCriticalSection(&(pADC_Dev->ADC_CS));

	///////////////////Enable INT//////////////////
	v_pINTPregs->INTMSK &= ~(1<<31);
	v_pINTPregs->INTSUBMSK &= ~(1<<10);

    ///////////////////A/D conversion starts////////////
	v_pADCPregs->ADCCON |= 1;

	LeaveCriticalSection(&(pADC_Dev->ADC_CS));

//	RETAILMSG(1,(TEXT("ADC_READ: ADCCON '%x'\r\n"),v_pADCPregs->ADCCON));
//	RETAILMSG(1,(TEXT("ADC_Write: INTMSK = '%x'\r\n"),v_pINTPregs->INTMSK));
//	RETAILMSG(1,(TEXT("ADC_Write: INTSUBMSK = '%x'\r\n"),v_pINTPregs->INTSUBMSK));

	///////////////////Wait for the ThreadObject////////////////

	ReturnValue=WaitForSingleObject(g_htIST ,200);	
	//////////////////Wait for the Thread Object Over////////////

	if(ReturnValue==WAIT_OBJECT_0)
	{
		///////////////////Write Buffer/////////////////////////
		
		EnterCriticalSection(&(pADC_Dev->ADC_CS));

		*((DWORD *)pBuffer)=v_pADCPregs->ADCDAT0;
		(*((DWORD *)pBuffer))&=0x03ff;

//		RETAILMSG(1,(TEXT("ADC_READ: Read Success! ADCDAT0 '%x'\r\n"),*((DWORD *)pBuffer)));
		LeaveCriticalSection(&(pADC_Dev->ADC_CS));

		//////////////////Write Buffer Over/////////////////////

		return 4;
	}
	else if(ReturnValue==WAIT_TIMEOUT)
	{
	
		RETAILMSG(1,(TEXT("ADC_READ: Read Timeout! \r\n")));
		
		TerminateThread(g_htIST,0);   //結束線程
		return 1;
	}
	else
	{
		RETAILMSG(1,(TEXT("ADC_READ: Do Not Know What Was Wrong!\r\n")));
		return 0;
	}
}


DWORD ADC_Write(DWORD hOpenContext,
				LPCVOID pSourceBytes,
				DWORD NumberOfBytes)
{
	DWORD *ADCControl;

	EnterCriticalSection(&(pADC_Dev->ADC_CS));    //申請進入臨界對象
	
	ADCControl=(DWORD *)pSourceBytes;

	v_pADCPregs->ADCCON &= 0x8000;
	v_pADCPregs->ADCCON |= 0x4000;                      //A/D轉換器預分頻器使能
	v_pADCPregs->ADCCON |=((*ADCControl)&0xff)<<6;      //A/D 轉換器預分頻器數值
    v_pADCPregs->ADCCON |=((*(++ADCControl))&7)<<3;     //模擬輸入通道選擇
	
	LeaveCriticalSection(&(pADC_Dev->ADC_CS));          //釋放臨界對象

	return 4;
}


DWORD ADC_Seek(DWORD hOpenContext,
			   long Amount,
			   DWORD Type)
{
	return FALSE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美羞羞免费网站| 成人深夜视频在线观看| 欧美精品久久一区二区三区| 亚洲欧美区自拍先锋| 一本在线高清不卡dvd| 亚洲一区二区三区四区五区黄| 欧美性xxxxxxxx| 日韩极品在线观看| 久久久亚洲综合| 99久久精品一区二区| 亚洲电影你懂得| 日韩午夜激情av| 大胆亚洲人体视频| 亚洲高清免费一级二级三级| 日韩欧美中文一区| 成人av电影在线| 亚洲一区二区美女| 久久久久88色偷偷免费| 99综合电影在线视频| 亚洲国产成人av网| 9191久久久久久久久久久| 国产一区二区三区在线观看免费| 国产精品成人在线观看| 欧美久久久久久蜜桃| 国产精品一二一区| 亚洲高清免费观看高清完整版在线观看| 欧美一级高清片在线观看| www.日韩av| 美女在线观看视频一区二区| 亚洲欧洲成人精品av97| 欧美一区二区三区四区久久| 99久久精品一区二区| 久久国产夜色精品鲁鲁99| 亚洲女子a中天字幕| 精品国产一区二区三区不卡| 日本福利一区二区| 国产精品一区三区| 五月天亚洲精品| 亚洲欧美综合另类在线卡通| 精品少妇一区二区三区日产乱码 | 日韩伦理免费电影| 欧美一区二区三区四区久久| 91美女蜜桃在线| 国产激情精品久久久第一区二区 | 日韩免费观看高清完整版| 一本色道久久综合狠狠躁的推荐| 极品少妇一区二区三区精品视频| 亚洲精品视频在线观看免费| 久久久久国产成人精品亚洲午夜| 欧美日韩激情一区二区三区| 色久优优欧美色久优优| 国产精品一区在线观看你懂的| 日本中文字幕不卡| 一区二区三区高清| 国产精品无人区| 精品国产91久久久久久久妲己 | 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲欧美日韩精品久久久久| 国产欧美一区二区精品性| 精品国产乱码久久久久久久久| 8v天堂国产在线一区二区| 欧美探花视频资源| 在线中文字幕一区二区| 99久久婷婷国产综合精品 | 精品一区二区免费| 男女男精品视频网| 日韩va欧美va亚洲va久久| 一区二区三区日韩精品| 中文字幕日韩欧美一区二区三区| 国产欧美精品一区二区色综合| 欧美精品一区视频| wwwwxxxxx欧美| 久久伊人蜜桃av一区二区| 26uuu亚洲综合色欧美| 精品久久久久久最新网址| 91精品国产一区二区三区香蕉| 欧美蜜桃一区二区三区| 欧美日韩国产色站一区二区三区| 在线欧美一区二区| 欧美性淫爽ww久久久久无| 欧美中文字幕一区| 欧美日韩高清一区二区三区| 欧美人与性动xxxx| 69av一区二区三区| 日韩免费视频一区二区| 欧美mv和日韩mv的网站| 久久久91精品国产一区二区精品| 欧美激情一区在线| 国产精品丝袜一区| 一区二区三区高清| 日本成人在线不卡视频| 免费成人深夜小野草| 久久97超碰国产精品超碰| 国产黄色成人av| www.激情成人| 欧美无人高清视频在线观看| 欧美一区二区高清| 国产女主播一区| 亚洲黄一区二区三区| 三级欧美在线一区| 国产福利一区在线| 91免费版在线| 91精品国产综合久久小美女| 精品国产乱码久久久久久久| 国产精品久久久一区麻豆最新章节| 日韩一区在线播放| 日日摸夜夜添夜夜添亚洲女人| 久久99精品国产麻豆婷婷洗澡| 岛国一区二区在线观看| 精品视频在线免费| 久久久影视传媒| 一区二区三区产品免费精品久久75| 日韩av不卡在线观看| 丰满白嫩尤物一区二区| 欧美三级三级三级| 国产色爱av资源综合区| 亚洲一区二区三区中文字幕| 激情综合亚洲精品| 91官网在线免费观看| 精品国产三级a在线观看| 亚洲欧美日韩国产一区二区三区| 六月丁香婷婷久久| 91蝌蚪porny| 久久一区二区视频| 丝袜美腿一区二区三区| 99综合影院在线| 精品噜噜噜噜久久久久久久久试看| 中文字幕在线观看不卡视频| 毛片不卡一区二区| 欧美性三三影院| 欧美激情一区二区在线| 日韩在线一区二区| 在线观看不卡视频| 国产精品国产馆在线真实露脸| 免费在线观看视频一区| 欧美在线一二三| 国产精品嫩草99a| 精品无码三级在线观看视频| 欧美日韩一区二区三区免费看| 欧美国产精品专区| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲一区二区三区在线播放 | 99精品热视频| 久久久噜噜噜久噜久久综合| 日韩精彩视频在线观看| 欧美在线视频日韩| 一区二区三区不卡视频| 岛国精品一区二区| 久久综合久久综合久久综合| 免费av成人在线| 欧美日韩mp4| 亚洲综合小说图片| 91福利资源站| 一区二区三区资源| 色婷婷亚洲精品| 中文字幕中文在线不卡住| 国产伦理精品不卡| 久久综合色之久久综合| 激情成人午夜视频| 久久―日本道色综合久久| 精品一区二区成人精品| 久久综合九色综合97婷婷| 精品无人区卡一卡二卡三乱码免费卡 | 日韩欧美精品三级| 美腿丝袜亚洲一区| 精品国偷自产国产一区| 国产麻豆成人传媒免费观看| 久久久久亚洲综合| 国产成人在线网站| 国产精品久久久久久久久动漫| 大胆亚洲人体视频| 亚洲欧美国产高清| 91久久线看在观草草青青| 一区二区三区视频在线观看 | 日韩一区二区在线播放| 久久66热re国产| 久久九九国产精品| 波波电影院一区二区三区| 亚洲欧美一区二区在线观看| 色婷婷综合中文久久一本| 尤物av一区二区| 欧美高清你懂得| 精品一区二区在线播放| 国产色91在线| 99久久精品免费| 亚洲精品美国一| 欧美日韩国产首页在线观看| 老司机一区二区| 国产精品麻豆欧美日韩ww| 91天堂素人约啪| 亚洲成人精品一区二区| 精品久久久久久久久久久久久久久久久 | 不卡一区在线观看| 亚洲四区在线观看| 欧美精品视频www在线观看| 日韩高清不卡一区二区三区| 久久久九九九九| 在线视频国产一区| 狠狠色丁香婷婷综合| 亚洲美女电影在线|