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

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

?? gpio.c

?? MagicARM2410的BSP包,增加了AD,CAN,PCCARD驅動,串口驅動3個
?? C
?? 第 1 頁 / 共 2 頁
字號:


/*******************************************************************************************
函數名稱: GPIO_ClrPin
描    述: 設置某個引腳輸出低電平
輸入參數: DWORD dwIoControlCode : I/O control code, 指出操作的GPIO組, 如GPA, GPB
          BYTE PinNum			: 引腳編號, 如 GPB1, 則值為 1
輸出參數:
返    回: TRUE: 操作成功    FALSE: 操作失敗
*******************************************************************************************/
BOOL GPIO_ClrPin(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);				// 1 is a DWORD pointer
	*pRegDAT &= ~(0x01 << PinNum);

	return TRUE;
}


/*******************************************************************************************
函數名稱: GPIO_ClrAllPin
描    述: 設置多個引腳輸出低電平
輸入參數: DWORD dwIoControlCode : I/O control code, 指出操作的GPIO組, 如GPA, GPB
          BYTE PinNum			: 引腳編號掩碼, 如操作 GPB1,GPB3, 則值為: (0x01 << 1) + (0x01 << 3)
輸出參數:
返    回: TRUE: 操作成功    FALSE: 操作失敗
*******************************************************************************************/
BOOL GPIO_ClrAllPin(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;
}


/*******************************************************************************************
函數名稱: GPIO_ReadPin
描    述: 讀取某個引腳的電平狀態
輸入參數: DWORD dwIoControlCode : I/O control code, 指出操作的GPIO組, 如GPA, GPB
          BYTE PinNum			: 引腳編號, 如 GPB1, 則值為 1
輸出參數: YTE *pValue			: 1: 引腳電平為高;  0: 引腳電平為低
返    回: TRUE: 操作成功    FALSE: 操作失敗
*******************************************************************************************/
BOOL GPIO_ReadPin(DWORD dwIoControlCode, BYTE PinNum, BYTE *pValue)
{
	DWORD GPx;
	volatile DWORD *pRegDAT;						// GPxDAT's address

	if (pValue == NULL)  return FALSE;

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

	pRegDAT = ((DWORD *)v_pIOPregs + GPx * ADDRESS_INTERVAL_GPIO + 1);				// 1 is a DWORD pointer
	if (*pRegDAT & (0x01 << PinNum))
		*pValue = 1;
	else
		*pValue = 0;

	return TRUE;
}


/*******************************************************************************************
函數名稱: GPIO_ReadAllPin
描    述: 讀出一組引腳的狀態
輸入參數: DWORD dwIoControlCode : I/O control code, 指出操作的GPIO組, 如GPA, GPB
          DWORD nOutBufSize		: pOutBuf 大小, 取值為1, 因為 GPA 不可讀, 其它組最多超不過16個引腳
輸出參數: ushort *pOutBuf		: 整組引腳電平狀態
返    回: TRUE: 操作成功    FALSE: 操作失敗
*******************************************************************************************/
BOOL GPIO_ReadAllPin(DWORD dwIoControlCode, ushort *pOutBuf, DWORD nOutBufSize)
{
	DWORD GPx;
	volatile DWORD *pRegDAT;						// GPxDAT's address
	
	GPx = dwIoControlCode & IOCTL_GPX_MASK;

	if (nOutBufSize < 1) return FALSE;
	if (GPx == GPx_GPA)	 return FALSE;				// GPA  output only
	
	pRegDAT = (DWORD *)v_pIOPregs + GPx * ADDRESS_INTERVAL_GPIO + 1;

	*pOutBuf = (ushort)*pRegDAT;
	
	return TRUE;
}



/*******************************************************************************************
函數名稱: GPIO_ConfigPullUp
描    述: 設置某個引腳是否內部上拉
輸入參數: DWORD dwIoControlCode : I/O control code, 指出操作的GPIO組, 如GPA, GPB
          BYTE PinNum			: 引腳編號, 如 GPB1, 則值為 1
          BOOL bPullup			: 是否上拉, TRUE: 上拉; FALSE: 不上拉.
輸出參數:
返    回: TRUE: 操作成功    FALSE: 操作失敗
*******************************************************************************************/
BOOL GPIO_ConfigPullUp(DWORD dwIoControlCode, BYTE PinNum, BOOL bPullup)
{
	DWORD GPx;
	volatile DWORD *pRegUp;							// GPxUP's address

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

	pRegUp = ((DWORD *)v_pIOPregs + GPx * ADDRESS_INTERVAL_GPIO + 2);		// 2 is a DWORD pointer
	if (bPullup)
		*pRegUp &= ~(0x01 << PinNum);				// Pull up is enable
	else
		*pRegUp |= (0x01 << PinNum);				// Pull up is disable

	return TRUE;
}


/*******************************************************************************************
函數名稱: GPIO_ConfigMultiPinPullup
描    述: 設置多個引腳是否內部上拉
輸入參數: DWORD dwIoControlCode : I/O control code, 指出操作的GPIO組, 如GPA, GPB
          BYTE PinNum			: 引腳編號掩碼, 如操作 GPB1,GPB3, 則值為: (0x01 << 1) + (0x01 << 3)
          BOOL bPullup			: 是否上拉, TRUE: 上拉; FALSE: 不上拉.
輸出參數:
返    回: TRUE: 操作成功    FALSE: 操作失敗
*******************************************************************************************/
BOOL GPIO_ConfigMultiPinPullup(DWORD dwIoControlCode, DWORD PinMask, BOOL bPullup)
{
	DWORD GPx;
	volatile DWORD *pRegUp;							// GPxUP's address
	
	GPx = dwIoControlCode & IOCTL_GPX_MASK;
	if (GPx == GPx_GPA)	 return FALSE;				// GPA  output only
	
	pRegUp = ((DWORD *)v_pIOPregs + GPx * ADDRESS_INTERVAL_GPIO + 2);		// 2 is a DWORD pointer
	if (bPullup)
		*pRegUp &= ~(PinMask);						// Pull up is enable
	else
		*pRegUp |= (PinMask);						// Pull up is disable
	
	return TRUE;
}


/*******************************************************************************************
函數名稱: PIO_IOControl
描    述: 驅動程序 I/O 請求
輸入參數: DWORD dwIoControlCode:  見本文件的頭文件
輸出參數:
返    回: TRUE: 操作成功    FALSE: 操作失敗
*******************************************************************************************/
BOOL
PIO_IOControl(
    DWORD Handle,
    DWORD dwIoControlCode,
    PBYTE pInBuf,
    DWORD nInBufSize,
    PBYTE pOutBuf,
    DWORD nOutBufSize,
    PDWORD pBytesReturned
    )
{
	BOOL bErr = FALSE;	

	switch(dwIoControlCode & IOCTL_GPIO_FUN_MASK)
	{	
		/*
		*   設置引腳為輸出
		*/
		case IOCTL_GPIO_SET_PIN_OUT:
			if (nInBufSize > 0)
				bErr = GPIO_SetPinOut(dwIoControlCode, *pInBuf);	
		break;			

		case IOCTL_GPIO_SET_MULTI_PIN_OUT:                    /* pInBuf 必須為4字節 */
			if (nInBufSize > 0)
         		bErr = GPIO_SetMultiPinOut(dwIoControlCode, *(DWORD *)pInBuf);	
            //RETAILMSG(TRUE, (TEXT("*(DWORD *)pInBuf is 0x%x).\r\n"), *(DWORD *)pInBuf)); 
		break;


		/*
		*   設置引腳為輸入
		*/
		case IOCTL_GPIO_SET_PIN_IN:
			if (nInBufSize > 0)
				bErr = GPIO_SetPinIn(dwIoControlCode, *pInBuf);
		break;

		case IOCTL_GPIO_SET_MULTI_PIN_IN:                     /* pInBuf 必須為4字節 */
			if (nInBufSize > 0)
				bErr = GPIO_SetMultiPinIn(dwIoControlCode, *(DWORD *)pInBuf);
			//RETAILMSG(TRUE, (TEXT("*(DWORD *)pInBuf is 0x%x).\r\n"), *(DWORD *)pInBuf)); 	
		break;


		/* 
		*   設置引腳輸出高電平
		*/
		case IOCTL_GPIO_SET_PIN:
			if (nInBufSize > 0)
				bErr = GPIO_SetPin(dwIoControlCode, *pInBuf);
		break;

		case IOCTL_GPIO_SET_MULTI_PIN:                          /* pInBuf 必須為4字節 */
			if (nInBufSize >= 0)
				bErr = GPIO_SetAllPin(dwIoControlCode, *(DWORD *)pInBuf);
			//RETAILMSG(TRUE, (TEXT("*(DWORD *)pInBuf is 0x%x).\r\n"), *(DWORD *)pInBuf)); 
		break;


		/*
		*   設置引腳輸出低電平
		*/
		case IOCTL_GPIO_CLR_PIN:
			if (nInBufSize > 0)
				bErr = GPIO_ClrPin(dwIoControlCode, *pInBuf);
		break;

		case IOCTL_GPIO_CLR_MULTI_PIN:                          /* pInBuf 必須為4字節 */
			if (nInBufSize > 0)          
				bErr = GPIO_ClrAllPin(dwIoControlCode, *(DWORD *)pInBuf);
		    //RETAILMSG(TRUE, (TEXT("*(DWORD *)pInBuf is 0x%x).\r\n"), *(DWORD *)pInBuf)); 
		break;


		/*
		*   讀取引腳電平狀態
		*/
		case IOCTL_GPIO_READ_PIN:
			if ((nOutBufSize > 0) && (nInBufSize > 0)) 
			{
				bErr = GPIO_ReadPin(dwIoControlCode, *pInBuf, pOutBuf);
				*pBytesReturned = 1;
			}
		break;

		case IOCTL_GPIO_READ_ALL_PIN:                         /* pOutBuf 必須為2字節 */
			if (nOutBufSize > 0)   
			{
				bErr = GPIO_ReadAllPin(dwIoControlCode, (ushort *)pOutBuf, 1);
				*pBytesReturned = 1;
			}
		break;


		/*  
		*	使能引腳內部上拉
		*/
		case IOCTL_GPIO_EN_PULLUP:							  /* *pInBuf 為1字節 */
			if (nInBufSize > 0) 
				bErr = GPIO_ConfigPullUp(dwIoControlCode, *pInBuf, TRUE);
		break;

		case IOCTL_GPIO_EN_MULTI_PIN_PULLUP:				  /* pInBuf 必須為4字節 */
			if (nInBufSize > 0)  
				bErr = GPIO_ConfigMultiPinPullup(dwIoControlCode, *(DWORD *)pInBuf, TRUE);
		break;


		/*   
		*	禁止引腳內部上拉
		*/
		case IOCTL_GPIO_DIS_PULLUP:
			if (nInBufSize > 0) 		  					  /* *pInBuf 為1字節 */
				bErr = GPIO_ConfigPullUp(dwIoControlCode, *pInBuf, FALSE);
		break;

		case IOCTL_GPIO_DIS_MULTI_PIN_PULLUP:				  /* pInBuf 必須為4字節 */
			if (nInBufSize > 0)  
				bErr = GPIO_ConfigMultiPinPullup(dwIoControlCode, *(DWORD *)pInBuf, FALSE);
		break;

		default:
		break;
	}

    return bErr;
}   // PIO_IOControl



/*******************************************************************************************
函數名稱: PIO_Read
描    述: 讀取按鍵狀態
輸入參數: DWORD Handle    : 驅動程序引用事例句柄
          LPVOID pBuffer  : 接收緩沖區
          DWORD dwNumBytes: 要讀的字節數
輸出參數: 無
返    回: 實際讀到字節數
*******************************************************************************************/
DWORD PIO_Read(DWORD Handle, LPVOID pBuffer, DWORD dwNumBytes)
{
	return 0;
}



/*******************************************************************************************
函數名稱: PIO_Write
描    述: 寫函數,本驅動不支持
輸入參數: 
輸出參數:
返    回:
*******************************************************************************************/
DWORD PIO_Write(DWORD Handle, LPCVOID pBuffer, DWORD dwNumBytes)
{
	return 0;
}


/*******************************************************************************************
函數名稱: PIO_Seek
描    述: 對設備的數據指針進行操作,本驅動不支持該函數
輸入參數: 
輸出參數:
返    回:
*******************************************************************************************/
DWORD PIO_Seek(DWORD Handle, long lDistance, DWORD dwMoveMethod)
{
	return 0;
}


/*******************************************************************************************
函數名稱: PIO_PowerUp
描    述: 電源上電驅動處理函數
輸入參數: 
輸出參數:
返    回: 無
*******************************************************************************************/
void PIO_PowerUp(void)
{
	return;
}


/*******************************************************************************************
函數名稱: PIO_PowerDown
描    述: 電源下電驅動處理函數
輸入參數: 
輸出參數:
返    回: 無
*******************************************************************************************/
void PIO_PowerDown(void)
{
	return;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一二三四社区欧美黄| 中文字幕一区二区三| 成人亚洲一区二区一| 亚洲精品成人a在线观看| 欧美大度的电影原声| 97精品电影院| 国产成人综合网站| 日韩专区中文字幕一区二区| 国产欧美日韩不卡| 欧美精品丝袜久久久中文字幕| 极品少妇一区二区| 婷婷一区二区三区| 亚洲主播在线观看| 亚洲精品国产视频| 成人欧美一区二区三区白人| 国产亚洲精品bt天堂精选| 欧美精品日韩一区| 欧美日韩亚洲综合一区二区三区| 国产成人免费视频网站| 国产综合久久久久影院| 美女高潮久久久| 精品一区二区三区av| 麻豆91在线播放| 久久国产麻豆精品| 九色porny丨国产精品| 韩国女主播成人在线| 国产一区二区不卡在线| 国产91精品露脸国语对白| 国产成人精品三级| 成人午夜视频网站| 色婷婷av久久久久久久| 欧美久久免费观看| 91精选在线观看| 久久精品在这里| 亚洲少妇中出一区| 午夜成人在线视频| 国产一区二区剧情av在线| 成人av网站免费观看| 在线精品视频一区二区三四| 制服丝袜亚洲精品中文字幕| 精品蜜桃在线看| 国产精品美女久久久久久久网站| 亚洲另类色综合网站| 日本欧洲一区二区| 91尤物视频在线观看| 欧美精品粉嫩高潮一区二区| 久久精品夜色噜噜亚洲a∨| 亚洲欧美电影一区二区| 久久精品免费观看| 91浏览器在线视频| 久久综合丝袜日本网| 一区二区激情视频| 国产成人在线视频网址| 欧美美女一区二区在线观看| 亚洲国产精品精华液2区45| 亚洲第一激情av| 99精品视频一区二区三区| 日韩亚洲欧美成人一区| 亚洲精品大片www| 暴力调教一区二区三区| 亚洲精品一区二区三区香蕉| 亚洲一区在线免费观看| 91在线丨porny丨国产| www国产亚洲精品久久麻豆| 亚洲香肠在线观看| 97se亚洲国产综合在线| 日韩精品亚洲一区| 91在线看国产| 国产精品福利一区二区三区| 精品一区免费av| 日韩欧美亚洲国产另类| 美日韩一区二区| 91精品国产色综合久久久蜜香臀| 亚洲免费大片在线观看| 一本色道久久加勒比精品| 亚洲欧美日韩国产中文在线| 99国产精品国产精品毛片| 国产精品美女久久久久久久久| 成人免费看视频| 亚洲视频在线一区观看| 在线一区二区三区四区五区| 亚洲无线码一区二区三区| 在线视频欧美精品| 美国欧美日韩国产在线播放| 精品国产一区二区三区忘忧草| 九九国产精品视频| 国产精品沙发午睡系列990531| 91在线视频18| 欧美a级一区二区| 欧美国产97人人爽人人喊| jlzzjlzz亚洲日本少妇| 蜜桃av噜噜一区二区三区小说| 久久久久88色偷偷免费| 亚洲bt欧美bt精品777| 国产福利一区二区三区视频在线 | 亚洲综合一区二区三区| 一区二区三区视频在线看| 在线观看日韩电影| 另类成人小视频在线| 国产精品伦理一区二区| 欧美日韩卡一卡二| 国产成人av一区二区三区在线 | 欧美一区二区三区婷婷月色| 丝瓜av网站精品一区二区| 精品国产伦一区二区三区观看体验| 国产综合久久久久久鬼色| 国产精品狼人久久影院观看方式| 色综合视频在线观看| 国产宾馆实践打屁股91| 日本不卡在线视频| 亚洲欧美色综合| 久久新电视剧免费观看| 欧美精品日韩一本| 欧美在线色视频| 成人国产亚洲欧美成人综合网| 视频一区二区欧美| 亚洲伦理在线免费看| 久久久国产精华| 欧美tk—视频vk| 欧美日韩国产一二三| 在线精品国精品国产尤物884a| 国产99久久久国产精品免费看| 免费人成在线不卡| 日韩电影在线观看网站| 亚洲自拍偷拍图区| 亚洲高清免费一级二级三级| 亚洲韩国精品一区| 亚洲成人久久影院| 日本亚洲三级在线| 日本成人在线一区| 久久99久久久久| 日韩中文字幕不卡| 捆绑调教美女网站视频一区| 免费观看91视频大全| 韩国av一区二区三区四区| 韩国精品主播一区二区在线观看 | 精品视频在线免费| 欧美日韩黄色影视| 4438亚洲最大| 日本一区二区三区dvd视频在线| 中文字幕免费不卡在线| 亚洲六月丁香色婷婷综合久久| 亚洲一区二区高清| 国产一区二区在线观看免费| 国产69精品久久久久毛片| 91香蕉视频在线| 制服视频三区第一页精品| 精品国产a毛片| 亚洲欧美视频在线观看视频| 日日夜夜免费精品| 国产91精品露脸国语对白| 欧美亚洲丝袜传媒另类| 久久久国产精品麻豆| 天涯成人国产亚洲精品一区av| 国产不卡高清在线观看视频| 欧美日韩一区视频| 欧美激情在线一区二区三区| 亚洲国产日韩a在线播放性色| 黑人精品欧美一区二区蜜桃| 色欧美片视频在线观看在线视频| 91精品综合久久久久久| 亚洲欧美日韩国产综合在线| 狠狠色综合播放一区二区| 欧美三片在线视频观看| 日本一区免费视频| 韩国中文字幕2020精品| 51精品久久久久久久蜜臀| 亚洲综合成人在线视频| 9人人澡人人爽人人精品| 国产日本亚洲高清| 国产呦萝稀缺另类资源| 欧美一区二区在线看| 婷婷综合久久一区二区三区| 在线视频你懂得一区二区三区| 亚洲日本中文字幕区| 成人av小说网| 亚洲免费观看高清| 欧美视频在线观看一区| 亚洲一二三四区不卡| 欧美色视频在线| 亚洲444eee在线观看| 欧美日韩mp4| 日韩中文字幕麻豆| 精品国产一区二区亚洲人成毛片| 九九热在线视频观看这里只有精品| 日韩欧美精品在线| 国产精品主播直播| 国产日本亚洲高清| 色欧美乱欧美15图片| 亚洲国产一二三| 欧美一区二区久久| 国产激情精品久久久第一区二区 | 久久久亚洲综合| 成人综合在线网站| 亚洲自拍偷拍网站| 久久综合狠狠综合久久激情| 成人a免费在线看| 视频一区二区国产| 国产精品区一区二区三区| 色综合久久久久综合体|