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

📄 dig.cpp

📁 pxa270设备上的
💻 CPP
字号:
// DIG.cpp : 定义 DLL 应用程序的入口点。


#include "stdafx.h"
#include <windows.h>
#include <ceddk.h>
#include <bulverde.h>

XLLP_OST_T   *g_pOSTRegs  = NULL;
XLLP_GPIO_T  *g_pGPIORegs  = NULL;
XLLP_UINT32_T g_aData[2]  = {1, 90};	//GPIO90
XLLP_UINT32_T g_aClock[2] = {1, 91};	//GPIO91
void OutputByte(BYTE data);
void XllpGpioSetDirectionOut 
     (P_XLLP_GPIO_T pGPIO, XLLP_UINT32_T aGpioPinArray[]);
void XllpGpioSetOutputState1 
     (P_XLLP_GPIO_T pGPIO, XLLP_UINT32_T aGpioPinArray[]);
void XllpGpioSetOutput0 
     (P_XLLP_GPIO_T pGPIO, XLLP_UINT32_T aGpioPinArray[]);


BOOL APIENTRY DllMain( HANDLE hInstDll, 
                       DWORD  dwReason, 
                       LPVOID lpReserved
					 )
{
	switch(dwReason)
	{
	case DLL_PROCESS_ATTACH:
		break;
	case DLL_THREAD_ATTACH:
		break;
	case DLL_PROCESS_DETACH:
		break;
	case DLL_THREAD_DETACH:
		break;
	}
    return TRUE;
}
DWORD DIG_Init(DWORD dwContext)
{							
	RETAILMSG(1, (TEXT("Led: LED_Init\r\n")));
	PHYSICAL_ADDRESS PA;
	
	if (g_pGPIORegs == NULL)
	{
		PA.QuadPart = 0x40E00000;
		g_pGPIORegs = (XLLP_GPIO_T *) MmMapIoSpace(PA, sizeof(XLLP_GPIO_T), FALSE);
	}

	if (g_pOSTRegs == NULL)
	{
		PA.QuadPart = 0x40A00000;
		g_pOSTRegs = (XLLP_OST_T *) MmMapIoSpace(PA, sizeof(XLLP_OST_T), FALSE);
	}

		XllpGpioSetDirectionOut(g_pGPIORegs, g_aData);
		XllpGpioSetDirectionOut(g_pGPIORegs, g_aClock);
		XllpGpioSetOutput0(g_pGPIORegs, g_aData);
		XllpGpioSetOutput0(g_pGPIORegs, g_aClock);
		OutputByte(0); OutputByte(0);
		OutputByte(0); OutputByte(0);
		return TRUE;

}

BOOL DIG_Deinit(DWORD hDeviceContext)
{
	RETAILMSG(1,(TEXT("LED_Deinit\r\n")));
	if(g_pGPIORegs)
	{
		MmUnmapIoSpace((PVOID)g_pGPIORegs,sizeof(XLLP_GPIO_T));
		g_pGPIORegs = NULL;
	}
	if(g_pOSTRegs)
	{
		MmUnmapIoSpace((PVOID)g_pOSTRegs,sizeof(XLLP_OST_T));
		g_pOSTRegs = NULL;
	}
	return TRUE;
}
BOOL DIG_Open(DWORD hDeviceContext,DWORD AccessCode,DWORD ShareMode)
{
	return TRUE;
}

BOOL DIG_Close(DWORD hOpenContext)
{
	return TRUE;
}

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

void DIG_PowerDown(DWORD hDeviceContext)
{
}

void DIG_PowerUp(DWORD hDeviceContext)
{
}

DWORD DIG_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count)
{
	return 0;
}

DWORD DIG_Seek(DWORD hOpenContext, long Amount, DWORD Type)
{
	return 0;
}

DWORD DIG_Write(DWORD hOpenContext, LPCVOID pBuffer, DWORD NumberOfBytes)
{
	DWORD i;
	BYTE *ptr = (BYTE*)pBuffer;
	for(i=0; i<NumberOfBytes; i++)
		OutputByte(*ptr++);
	return i;
}

void OutputByte(BYTE data)
{
	UINT mask;
	for(mask=1; mask&0xff; mask<<=1)
	{
		if(data & mask)
		{
			XllpGpioSetOutputState1(g_pGPIORegs, g_aData); //OUTHBIT()
			XllpGpioSetOutputState1(g_pGPIORegs, g_aClock);
			XllpGpioSetOutput0(g_pGPIORegs, g_aClock);
		}
		else
		{
			XllpGpioSetOutput0(g_pGPIORegs, g_aData); //OUTLBIT()
			XllpGpioSetOutputState1(g_pGPIORegs, g_aClock);
			XllpGpioSetOutput0(g_pGPIORegs, g_aClock); 
		}
	}
}
void XllpGpioSetDirectionOut 
     (P_XLLP_GPIO_T pGPIO, XLLP_UINT32_T aGpioPinArray[])
    {
	XLLP_UINT32_T aGpioPinMask;
	XLLP_UINT32_T aMask2;

	aMask2=0;
	aGpioPinMask = 0x1u << (aGpioPinArray[1] & 0x1F);
	aMask2 |= aGpioPinMask;
	pGPIO->GPDR2=((pGPIO->GPDR2)| aMask2);

    }
void XllpGpioSetOutputState1 
     (P_XLLP_GPIO_T pGPIO, XLLP_UINT32_T aGpioPinArray[])
	{
	XLLP_UINT32_T aGpioPinMask;
	XLLP_UINT32_T aMask2;

	aMask2=0;
	aGpioPinMask = 0x1u << (aGpioPinArray[1] & 0x1F);	
	aMask2 |= aGpioPinMask;
	pGPIO->GPSR2=aMask2;

	}

void XllpGpioSetOutput0 
     (P_XLLP_GPIO_T pGPIO, XLLP_UINT32_T aGpioPinArray[])
	{
	XLLP_UINT32_T aGpioPinMask;
	XLLP_UINT32_T  aMask2;

	aMask2=0;
	aGpioPinMask = 0x1u << (aGpioPinArray[1] & 0x1F);
	aMask2 |= aGpioPinMask;
	pGPIO->GPCR2=aMask2;
	}

⌨️ 快捷键说明

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