91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

s3c2440下LED燈驅動的源代碼,詳細的中文注釋,適合初學者學習

資源截圖

代碼片段和文件信息

#include??
#include?se_regs.h>
#include?


#define?DEBUG 1 ? /*定義一個宏變量,用于串口輸出信息用,定義為0時,不輸出*/

volatile?S3C2440A_IOPORT_REG?*p2440a_ioport_reg?=?NULL; /*IO寄存器對應的虛擬地址指針*/
void?LED_ThreadFun(); /*聲明一個線程函數*/
HANDLE?LED_Event; /*?事件句柄?*/
HANDLE?LED_Thread; /*?線程句柄?*/

//驅動入口函數
bool?WINAPI?DLLEntry(?HANDLE?hInstDll
??????????????????????DWORD?dwReason
??????????????????????LPVOID?lpvReserved)
{???
switch(dwReason)
{
case?DLL_PROCESS_ATTACH:
RETAILMSG(DEBUG?(TEXT(“LEDDrv:??DLL_PROCESS_ATTCH?\r\n“)?)?);? // 提示動態庫加載
DisableThreadLibraryCalls((HMODULE)hInstDll);
break;
case?DLL_PROCESS_DETACH:
RETAILMSG(DEBUG?(TEXT(“LEDDrv:??DLL_PROCESS_DETACH?\r\n“)?)?);? // 提示動態庫卸載
break;
}
????return?TRUE;?????? ??
}

//LEDDrv初始化函數
DWORD?LED_Init(LPCTSTR?pContextLPVOID?lpvBusContext)
{
RETAILMSG(DEBUG?(TEXT(“LEDDrv:?LED_Init?\r\n“)?)?);
//?為IO寄存器申請一段虛擬內存空間
p2440a_ioport_reg?=?(volatile?S3C2440A_IOPORT_REG*)VirtualAlloc(0?sizeof(S3C2440A_IOPORT_REG)?MEM_RESERVE?PAGE_NOACCESS);
if?(!p2440a_ioport_reg)
??{
??RETAILMSG(DEBUG?(TEXT(“LEDDrv:?VirtualAlloc?failed!\r\n“)));
??return(FALSE);
??}
??else
?? RETAILMSG(DEBUG?(TEXT(“LEDDrv:?VirtualAlloc?OK\r\n“)));
??
??//將虛擬空間映射到寄存器的物理地址空間,映射后可通過寄存器指針p2440a_ioport_reg來訪問寄存器
if?(!VirtualCopy((PVOID)p2440a_ioport_reg?(PVOID)(S3C2440A_base_REG_PA_IOPORT?>>?8)?sizeof(S3C2440A_IOPORT_REG)?PAGE_PHYSICAL?|?PAGE_READWRITE?|?PAGE_NOCACHE))
??{
??RETAILMSG(DEBUG?(TEXT(“LEDDrv:?VirtualCopy?failed!\r\n“)));
??return(FALSE);
??}
??else
?? RETAILMSG(DEBUG?(TEXT(“LEDDrv:??VirtualCopy?OK\r\n“)));
??
??//對IO進行初始化
??p2440a_ioport_reg->GPGCON?&=0xfff00000; //清空GPG0、GPG1、GPG2、GPG8的控制寄存器
??
??p2440a_ioport_reg->GPGCON?|=0x55555; //設置GPG0、GPG1、GPG2、GPG8為輸出狀態
??
??p2440a_ioport_reg->GPBDAT?&=0xfef8; //設置GPG0、GPG1、GPG2、GPG8輸出低電平
??
??p2440a_ioport_reg->GPBUP?|=0xff; //設置GPG0、GPG1、GPG2、GPG8上拉無效
??? ??
//創建事件
LED_Event=CreateEvent(NULLfalsefalseNULL);
if(!LED_Event)
{
RETAILMSG(DEBUG(TEXT(“LEDDrv:?CreateEvent?faile\r\n“)));
return?false;
}
else
RETAILMSG(DEBUG(TEXT(“LEDDrv:?CreateEvent?OK\r\n“)));

//創建線程LED_Thread
LED_Thread=CreateThread((LPSECURITY_ATTRIBUTES)NULL
0
(LPTHREAD_START_ROUTINE)LED_ThreadFun
0
0
NULL
);
//如果創建線程失敗
if(!LED_Thread)
{
RETAILMSG(DEBUG(TEXT(“LEDDrv:?CreateThread?faile?\r\n“)));
return?false;
}
else
RETAILMSG(DEBUG(TEXT(“LEDDrv:?CreateThread?OK\r\n“)));
return?1;
}

BOOL??LED_Deinit(DWORD?hDeviceContext)
{
RETAILMSG(DEBUG(TEXT(“LEDDrv:?LED_Deinit\r\n“))); ????
return?true;
}

DWORD?LED_Open(DWORD?hDeviceContextD

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件????????650??2004-07-01?12:00??LEDDrv\makefile

?????文件????????114??2008-06-15?13:08??LEDDrv\LEDDrv.def

?????文件???????8847??2008-06-18?01:49??LEDDrv\Build.log

?????文件????????765??2008-06-15?18:36??LEDDrv\sources.bak

?????文件????????765??2008-06-17?23:44??LEDDrv\sources

?????文件???????4804??2008-06-18?01:48??LEDDrv\LEDDrv.cpp.bak

?????文件???????4808??2008-06-18?01:58??LEDDrv\LEDDrv.cpp

?????文件?????????66??2008-06-18?01:49??LEDDrv\obj\ARMV4I\retail\_objects.mac

?????文件??????18229??2008-06-18?01:49??LEDDrv\obj\ARMV4I\retail\LEDDrv.obj

?????目錄??????????0??2008-07-14?23:12??LEDDrv\obj\ARMV4I\retail

?????目錄??????????0??2008-07-14?23:12??LEDDrv\obj\ARMV4I

?????目錄??????????0??2008-07-14?23:12??LEDDrv\obj

?????目錄??????????0??2008-07-14?23:12??LEDDrv

-----------?---------??----------?-----??----

????????????????39048????????????????????13


評論

共有 條評論