⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led.c

📁 这是嵌入式平台下winCE下的一段指示灯显示的代码
💻 C
字号:
#include <windows.h>
#include <nkintr.h>
#include <devload.h>

#include "xsc1.h"
#include "gpio.h"


#define IOCTL_LED_ON	0
#define IOCTL_LED_OFF	1

volatile GPIO_REGS *v_pGPIOReg = NULL;
BOOL bOpened = FALSE;

PVOID VirtualAllocCopy(unsigned size,char *str,PVOID pVirtualAddress);


DWORD LED_Init(DWORD Identifier)
{
	if (v_pGPIOReg == NULL) 
			v_pGPIOReg = (volatile GPIO_REGS *)VirtualAllocCopy(0x400,
							(char *)TEXT("LED: GPIO_BASE_U_VIRTUAL"),
							(PVOID)GPIO_BASE_U_VIRTUAL);
	if (v_pGPIOReg == NULL)
		return FALSE;
	v_pGPIOReg->GPDR_x |= GPIO_21;
	v_pGPIOReg->GAFR1_x &= 0xFF3FFFFF;
	v_pGPIOReg->GPSR_x |= GPIO_21;
	return TRUE;
}

BOOL LED_Deinit(DWORD hDeviceContext)
{
	if (v_pGPIOReg)
	{
		VirtualFree((void *)v_pGPIOReg, 0x400, MEM_RELEASE);
		v_pGPIOReg = NULL;
	}
	return TRUE;
}

DWORD LED_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode)
{
	if (bOpened)
		return FALSE;
	else
	{
		bOpened = TRUE;
		return TRUE;
	}
}

BOOL LED_Close(DWORD hOpenContext)
{
	if (bOpened)
	{
		bOpened = FALSE;
		return TRUE;
	}
	else
		return FALSE;
}

BOOL LED_IOControl(
		DWORD hOpenContext,
		DWORD dwCode, PBYTE pBufIn,
		DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut,
		PDWORD pdwActualOut)
{
	switch (dwCode)
	{
		case IOCTL_LED_ON:
			v_pGPIOReg->GPCR_x |= GPIO_21;
			return TRUE;
		case IOCTL_LED_OFF:
			v_pGPIOReg->GPSR_x |= GPIO_21;
			return TRUE;
		default:
			return FALSE;
	}
}

DWORD LED_Read(DWORD hOpenContext, PBYTE pBuffer, DWORD Count) {return 0;}
DWORD LED_Write(DWORD hOpenContext, PBYTE pBuffer, DWORD Count) {return 0;}
DWORD LED_Seek(DWORD hOpenContext, LONG Position, DWORD Type) {return (ULONG)-1;}
BOOL LED_PowerDown(DWORD hDeviceContext) {return TRUE;}
BOOL LED_PowerUp(DWORD hDeviceContext) {return TRUE;}

BOOL DllEntry(HINSTANCE hinstDll, DWORD dwReason, LPVOID lpReserved)
{
	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -