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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gpio.c

?? MagicARM2410的BSP包,增加了AD,CAN,PCCARD驅(qū)動(dòng),串口驅(qū)動(dòng)3個(gè)
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/****************************************Copyright (c)**************************************************
**                               Guangzhou ZHIYUAN electronics Co.,LTD.
**                                     
**                                 http://www.zyinside.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name: 				gpio.c
** Last modified Date: 		2006-10-09
** Last Version:			V1.0		
** Description: 			S3C2410 GPIO 驅(qū)動(dòng)
**                          
**------------------------------------------------------------------------------------------------------
** Created By: 				MingYuan Zheng 鄭明遠(yuǎn)
** Created date: 			2006-10-09
** Version: 				V1.0
** Descriptions:			The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
********************************************************************************************************/

#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 <s3c2410x.h>
#include "gpio.h"


#define PRIVATE			static
#define PUBLIC


/* GPIO 寄存器對(duì)應(yīng)的虛擬地址 */
PRIVATE volatile S3C2410X_IOPORT_REG * v_pIOPregs;

PRIVATE g_OpenCount = 0;			/* 驅(qū)動(dòng)打開(kāi)計(jì)數(shù)器 */

#define  ADDRESS_INTERVAL_GPIO		0x04
#define  GPx_GPA					0


/*******************************************************************************************
函數(shù)名稱: PIO_InitializeAddresses
描    述: 取得相關(guān)寄存器的虛擬地址
輸入?yún)?shù): 無(wú)
輸出參數(shù): 無(wú)
返    回: > 0 分配到的虛擬地址;  FALSE: 失敗 
*******************************************************************************************/
PRIVATE BOOL PIO_InitializeAddresses(void)
{
	BOOL	RetValue = TRUE;

	//	IO Register Allocation
	v_pIOPregs = (volatile S3C2410X_IOPORT_REG *)VirtualAlloc(0, sizeof(S3C2410X_IOPORT_REG), MEM_RESERVE, PAGE_NOACCESS);
	if (v_pIOPregs == NULL) 
	{
		ERRORMSG(1,(TEXT("For IOPregs : VirtualAlloc failed!\r\n")));
		RetValue = FALSE;
	}
	else 
	{
		if (!VirtualCopy((PVOID)v_pIOPregs, (PVOID)(S3C2410X_BASE_REG_PA_IOPORT >> 8), sizeof(S3C2410X_IOPORT_REG), PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE)) 
		{
			ERRORMSG(1,(TEXT("For IOPregs: VirtualCopy failed!\r\n")));
			RetValue = FALSE;
		}
	}
	
	if (!RetValue) 
	{
		RETAILMSG (1, (TEXT("::: PIO_InitializeAddresses - Fail!!\r\n") ));

		if (v_pIOPregs) 
		{
			VirtualFree((PVOID) v_pIOPregs, 0, MEM_RELEASE);
		}

		v_pIOPregs = NULL;

		RetValue = FALSE;
		return RetValue;
	}

	return(RetValue);
}


/*******************************************************************************************
函數(shù)名稱: PIO_Init
描    述: 驅(qū)動(dòng)程序初始化函數(shù)
輸入?yún)?shù): DWORD dwContext: 設(shè)備管理器傳遞給本驅(qū)動(dòng)的參數(shù), 通常為流接口驅(qū)動(dòng)在注冊(cè)表內(nèi)的位置 	
輸出參數(shù): 無(wú)
返    回: 驅(qū)動(dòng)程序句柄
*******************************************************************************************/
PUBLIC DWORD PIO_Init(DWORD dwContext)
{
	PIO_InitializeAddresses();
	g_OpenCount = 0;

	return (DWORD)1;
}


/*******************************************************************************************
函數(shù)名稱: DllEntry
描    述: 驅(qū)動(dòng)程序動(dòng)態(tài)庫(kù)入口
輸入?yún)?shù): 	
輸出參數(shù):
返    回: 
*******************************************************************************************/
PUBLIC BOOL WINAPI
DllEntry(HANDLE hInstDll, DWORD dwReason, LPVOID lpvReserved)
{
    switch ( dwReason ) 
	{
		case DLL_PROCESS_ATTACH:
			RETAILMSG(1, (TEXT("PIO: DLL_PROCESS_ATTACH\r\n")));
			DisableThreadLibraryCalls((HMODULE) hInstDll);
			break;

		case DLL_PROCESS_DETACH:
			RETAILMSG(1, (TEXT("PIO: DLL_PROCESS_DETACH\r\n")));
			break;
    }
    return (TRUE);
}


/*******************************************************************************************
函數(shù)名稱: PIO_Close
描    述: 驅(qū)動(dòng)程序關(guān)閉函數(shù)
輸入?yún)?shù): DWORD Handle:驅(qū)動(dòng)程序引用事例句柄
輸出參數(shù): 無(wú)
返    回: FALSE: 失敗    TRUE: 成功 
*******************************************************************************************/
BOOL PIO_Close(DWORD Handle)
{
	g_OpenCount = 0;

    return TRUE;
}


/*******************************************************************************************
函數(shù)名稱: PIO_Deinit
描    述: 驅(qū)動(dòng)程序卸載函數(shù)
輸入?yún)?shù): DWORD dwContext: 驅(qū)動(dòng)程序句柄
輸出參數(shù): 無(wú)
返    回: FALSE: 失敗    TRUE: 成功
*******************************************************************************************/
BOOL PIO_Deinit(DWORD dwContext)
{
	g_OpenCount = 0;

	if (v_pIOPregs)
		VirtualFree((PVOID) v_pIOPregs, 0, MEM_RELEASE);	/* 釋放申請(qǐng)的虛擬空間 */

    return TRUE;
}


/*******************************************************************************************
函數(shù)名稱: PIO_Open
描    述: 打開(kāi)驅(qū)動(dòng)程序
輸入?yún)?shù): DWORD dwData     : 設(shè)備驅(qū)動(dòng)程序句柄
          DWORD dwAccess   : 訪問(wèn)請(qǐng)求代碼,是讀和寫的組合
          DWORD dwShareMode: 共享模式  
輸出參數(shù):
返    回: 驅(qū)動(dòng)程序引用事例句柄
*******************************************************************************************/
DWORD PIO_Open(DWORD dwData, DWORD dwAccess, DWORD dwShareMode)
{
	if (g_OpenCount > 0)
		return 0;

	g_OpenCount++;

    return g_OpenCount;							/* 返回一個(gè)不為零的數(shù) */
}



// 定義 S3C2410 GPA ~ GPH 引腳個(gè)數(shù) 
						//  A   B    C   D   E  F  G   H
const BYTE PinNumTbl[8] = {23, 11, 16, 16, 16, 8, 16, 11};


/*******************************************************************************************
函數(shù)名稱: GPIO_SetPinOut
描    述: 設(shè)置某個(gè)引腳為輸出引腳
輸入?yún)?shù): DWORD dwIoControlCode : I/O control code, 指出操作的GPIO組, 如GPA, GPB
          BYTE PinNum			: 引腳編號(hào), 如 GPB1, 則值為 1
輸出參數(shù):
返    回: TRUE: 操作成功    FALSE: 操作失敗
*******************************************************************************************/
BOOL GPIO_SetPinOut(DWORD dwIoControlCode, BYTE PinNum)
{
	DWORD GPx;
	volatile DWORD *pRegCON;						// GPxCON's address

	GPx = dwIoControlCode & IOCTL_GPX_MASK;
	if (PinNum >= PinNumTbl[GPx])  return FALSE;

	pRegCON = (DWORD *)v_pIOPregs + GPx * ADDRESS_INTERVAL_GPIO;

	if (GPx != GPx_GPA)
	{
		*pRegCON &= ~(0x03 << (PinNum * 2));
		*pRegCON |=  (0x01 << (PinNum * 2));
	}
	else
		*pRegCON &= ~(0x01 << PinNum);

	return TRUE;
}


/*******************************************************************************************
函數(shù)名稱: GPIO_SetMultiPinOut
描    述: 設(shè)置多個(gè)引腳為輸出引腳
輸入?yún)?shù): DWORD dwIoControlCode : I/O control code, 指出操作的GPIO組, 如GPA, GPB
          BYTE PinNum			: 引腳編號(hào)掩碼, 如操作 GPB1,GPB3, 則值為: (0x01 << 1) + (0x01 << 3)
輸出參數(shù):
返    回: TRUE: 操作成功    FALSE: 操作失敗
*******************************************************************************************/
BOOL GPIO_SetMultiPinOut(DWORD dwIoControlCode, DWORD PinMask)
{
	DWORD GPx, i;
	volatile DWORD *pRegCON;			// GPXCON's address

	GPx = dwIoControlCode & IOCTL_GPX_MASK;
	pRegCON = (DWORD *)v_pIOPregs + GPx * ADDRESS_INTERVAL_GPIO;
	
	for (i = 0; i < PinNumTbl[GPx]; i++)
	{
		if (PinMask & (0x01 << i))
		{
			if (GPx != GPx_GPA)
			{
				*pRegCON &= ~(0x03 << (i * 2));
				*pRegCON |=  (0x01 << (i * 2));
			}
			else
				*pRegCON &= ~(0x01 << i);
		}
	}

	return TRUE;
}


/*******************************************************************************************
函數(shù)名稱: GPIO_SetPinIn
描    述: 設(shè)置某個(gè)引腳為輸入引腳
輸入?yún)?shù): DWORD dwIoControlCode : I/O control code, 指出操作的GPIO組, 如GPA, GPB
          BYTE PinNum			: 引腳編號(hào), 如 GPB1, 則值為 1
輸出參數(shù):
返    回: TRUE: 操作成功    FALSE: 操作失敗
*******************************************************************************************/
BOOL GPIO_SetPinIn(DWORD dwIoControlCode, BYTE PinNum)
{
	DWORD GPx;
	volatile DWORD *pRegCON;				    // GPXCON's address

	GPx = dwIoControlCode & IOCTL_GPX_MASK;

	if (GPx == GPx_GPA)	 return FALSE;			// GPA  output only
	if (PinNum >= PinNumTbl[GPx])  return FALSE;

	pRegCON = (DWORD *)v_pIOPregs + GPx * ADDRESS_INTERVAL_GPIO;
	PinNum = PinNum * 2;
	*pRegCON &= ~(0x03 << PinNum);

	return TRUE;
}


/*******************************************************************************************
函數(shù)名稱: GPIO_SetMultiPinIn
描    述: 設(shè)置多個(gè)引腳為輸入引腳
輸入?yún)?shù): DWORD dwIoControlCode : I/O control code, 指出操作的GPIO組, 如GPA, GPB
          BYTE PinNum			: 引腳編號(hào)掩碼, 如操作 GPB1,GPB3, 則值為: (0x01 << 1) + (0x01 << 3)
輸出參數(shù):
返    回: TRUE: 操作成功    FALSE: 操作失敗
*******************************************************************************************/
BOOL GPIO_SetMultiPinIn(DWORD dwIoControlCode, DWORD PinMask)
{
	DWORD GPx, i;
	volatile DWORD *pRegCON;					// GPXCON's address

	GPx = dwIoControlCode & IOCTL_GPX_MASK;
	if (GPx == GPx_GPA)	 return FALSE;			// GPA  output only

	pRegCON = (DWORD *)v_pIOPregs + GPx * ADDRESS_INTERVAL_GPIO;
	
	for (i = 0; i < PinNumTbl[GPx]; i++)
	{
		if (PinMask & (0x01 << i))
			*pRegCON &= ~(0x03 << (i * 2));
	}

	return TRUE;
}


/*******************************************************************************************
函數(shù)名稱: GPIO_SetPin
描    述: 設(shè)置某個(gè)引腳輸出高電平
輸入?yún)?shù): DWORD dwIoControlCode : I/O control code, 指出操作的GPIO組, 如GPA, GPB
          BYTE PinNum			: 引腳編號(hào), 如 GPB1, 則值為 1
輸出參數(shù):
返    回: TRUE: 操作成功    FALSE: 操作失敗
*******************************************************************************************/
BOOL GPIO_SetPin(DWORD dwIoControlCode, BYTE PinNum)
{
	DWORD GPx;
	volatile DWORD *pRegDAT;			// GPxDAT's address

	GPx = dwIoControlCode & IOCTL_GPX_MASK;
	if (PinNum >= PinNumTbl[GPx])  return FALSE;
	
	pRegDAT = ((DWORD *)v_pIOPregs + GPx * ADDRESS_INTERVAL_GPIO + 1);
	*pRegDAT |=  (0x01 << PinNum);

	return TRUE;
}


/*******************************************************************************************
函數(shù)名稱: GPIO_SetAllPin
描    述: 設(shè)置多個(gè)引腳輸出高電平
輸入?yún)?shù): DWORD dwIoControlCode : I/O control code, 指出操作的GPIO組, 如GPA, GPB
          BYTE PinNum			: 引腳編號(hào)掩碼, 如操作 GPB1,GPB3, 則值為: (0x01 << 1) + (0x01 << 3)
輸出參數(shù):
返    回: TRUE: 操作成功    FALSE: 操作失敗
*******************************************************************************************/
BOOL GPIO_SetAllPin(DWORD dwIoControlCode, DWORD PinMask)
{
	DWORD GPx, i;
	volatile DWORD *pRegDAT;			// GPxDAT's address

	GPx = dwIoControlCode & IOCTL_GPX_MASK;
	pRegDAT = ((DWORD *)v_pIOPregs + GPx * ADDRESS_INTERVAL_GPIO + 1);

	for (i = 0; i < PinNumTbl[GPx]; i++)
	{
		if (PinMask & (0x01 << i))
			*pRegDAT |= (0x01 << i);
	}

	return TRUE;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚一区二区| 亚洲午夜精品网| 久久久久久毛片| 欧美变态tickling挠脚心| 91精品国产综合久久久蜜臀粉嫩| 欧美精品日韩综合在线| 欧美美女黄视频| 日韩免费观看高清完整版在线观看| 日韩午夜av电影| 久久亚洲影视婷婷| 中文字幕av一区二区三区免费看| 中文字幕不卡在线观看| 亚洲乱码国产乱码精品精小说| 亚洲中国最大av网站| 天堂在线一区二区| 极品少妇一区二区三区精品视频| 国产高清亚洲一区| av在线播放不卡| 欧洲另类一二三四区| 欧美日本一区二区三区四区| 欧美一区二区视频观看视频| 久久婷婷国产综合国色天香| 中文字幕在线免费不卡| 亚洲国产一二三| 美女性感视频久久| 粉嫩高潮美女一区二区三区| 91美女片黄在线观看91美女| 欧美丰满美乳xxx高潮www| 欧美sm美女调教| 国产精品久久久久天堂| 一区二区三区中文字幕电影 | 视频在线在亚洲| 久久99热国产| av成人动漫在线观看| 欧美日韩在线播放三区| 精品国产制服丝袜高跟| 亚洲日本在线天堂| 蜜臀精品久久久久久蜜臀 | 日本精品一区二区三区四区的功能| 欧美精品xxxxbbbb| 2024国产精品| 亚洲综合视频网| 国产专区综合网| 色av综合在线| 精品粉嫩aⅴ一区二区三区四区| 国产精品大尺度| 日韩电影免费在线看| www.一区二区| 欧美一区二区三区婷婷月色| 国产精品的网站| 激情六月婷婷综合| 欧美一a一片一级一片| 国产亚洲成年网址在线观看| 亚洲成av人影院| 成人激情黄色小说| 欧美一级精品在线| 亚洲综合激情另类小说区| 国产美女娇喘av呻吟久久| 欧美日韩精品福利| **性色生活片久久毛片| 老司机午夜精品99久久| 欧美午夜寂寞影院| 国产精品毛片a∨一区二区三区| 日本欧美加勒比视频| 一本一道久久a久久精品| 久久五月婷婷丁香社区| 视频一区国产视频| 91久久国产综合久久| 中文字幕电影一区| 精品一区二区三区免费| 欧美高清激情brazzers| 最新国产精品久久精品| 久久99精品国产麻豆婷婷 | 亚洲精品成人在线| 国产黄色成人av| 精品粉嫩aⅴ一区二区三区四区| 亚洲午夜免费视频| 97aⅴ精品视频一二三区| 国产视频一区二区三区在线观看| 日日夜夜免费精品视频| 欧美三级电影精品| 亚洲卡通动漫在线| 成人综合婷婷国产精品久久| 久久久影视传媒| 久久国产精品99精品国产| 这里只有精品视频在线观看| 亚洲自拍欧美精品| 在线观看免费成人| 一区二区日韩av| 91国产免费看| 一区二区欧美精品| 在线视频亚洲一区| 一区二区三区不卡视频在线观看| av电影在线观看一区| 国产精品视频免费看| 国产99一区视频免费 | 蜜臀av性久久久久av蜜臀妖精| 欧美日韩一区高清| 亚洲成人一区二区| 欧美日韩三级一区| 丝袜美腿亚洲色图| 欧美肥胖老妇做爰| 久久精品国产免费| 欧美成人r级一区二区三区| 美女诱惑一区二区| 精品国产1区二区| 国产91精品一区二区麻豆网站| 国产亲近乱来精品视频| 成人aa视频在线观看| 国产精品久久久久四虎| 色中色一区二区| 天堂一区二区在线免费观看| 欧美一区二区三区思思人| 蜜臀久久99精品久久久久宅男| 日韩精品一区二区三区视频| 韩国欧美国产一区| 国产精品午夜久久| 色www精品视频在线观看| 亚洲高清不卡在线| 日韩午夜激情视频| 国产99久久久久久免费看农村| 亚洲视频在线观看一区| 欧洲国内综合视频| 毛片不卡一区二区| 国产精品美女久久久久高潮| 在线一区二区三区四区五区| 偷拍日韩校园综合在线| 精品电影一区二区| 99国产精品久久久久久久久久久| 一卡二卡欧美日韩| 精品久久久久久久久久久久久久久 | √…a在线天堂一区| 欧美日韩欧美一区二区| 久久 天天综合| 中文字幕五月欧美| 717成人午夜免费福利电影| 黄网站免费久久| 亚洲丝袜制服诱惑| 欧美一级高清片在线观看| 从欧美一区二区三区| 亚洲高清免费视频| 国产欧美日韩视频一区二区| 欧美最新大片在线看| 久久成人免费日本黄色| 成人欧美一区二区三区小说| 欧美一级片免费看| 成人精品小蝌蚪| 日韩高清在线不卡| 国产精品美女久久久久aⅴ| 欧美精品在线观看播放| 国产91精品精华液一区二区三区 | 国产成人精品免费网站| 亚洲成人在线观看视频| 国产色一区二区| 欧美私模裸体表演在线观看| 国产精品一区2区| 亚洲成人动漫在线观看| 国产欧美一区二区精品仙草咪| 欧美视频你懂的| 粉嫩高潮美女一区二区三区| 秋霞午夜av一区二区三区| 中文字幕一区二区三区不卡在线 | 国产亚洲欧美色| 欧美日韩亚洲综合在线| 成人国产一区二区三区精品| 久久99国产精品久久99| 亚洲一区二区五区| 中文字幕第一区二区| 精品国产网站在线观看| 欧美日韩精品欧美日韩精品一综合| 成人aa视频在线观看| 国模套图日韩精品一区二区| 婷婷综合另类小说色区| 1024国产精品| 国产精品欧美综合在线| 欧美大度的电影原声| 欧美日韩国产综合一区二区三区| 成人精品一区二区三区四区 | 99热在这里有精品免费| 久久疯狂做爰流白浆xx| 偷拍与自拍一区| 亚洲国产中文字幕| 亚洲久草在线视频| 亚洲色欲色欲www| 中国色在线观看另类| 国产欧美一区二区精品婷婷| 精品欧美一区二区三区精品久久| 欧美另类高清zo欧美| 欧美日韩一级视频| 欧美丝袜自拍制服另类| 91亚洲精华国产精华精华液| 国产91丝袜在线观看| 国产成人亚洲综合a∨婷婷| 国模无码大尺度一区二区三区| 免费在线观看成人| 奇米综合一区二区三区精品视频| 亚洲成人黄色小说| 日韩激情视频网站| 免费在线看一区| 久久99在线观看|