资源简介
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\_ob
文件 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
- 上一篇:HFSS Vivaldi天线模型
- 下一篇:Word 多文件搜索器1.0
相关资源
- S3C2440中文手册pdf(去密码)
- S3C2440核心板PCB完整工程,带原理图
- AD设计的 ARM9 S3C2440核心板原理图和P
- 基于S3C2440的keil For ARM程序
- S3C2440平台操作系统内核设计与实现
- keil MDK s3c2440 按键 中断 led 蜂鸣器
- 三星S3C2440参考设计!
- u-boot-2012.10移植全记录基于s3c2440
- s3c2440芯片手册
- S3C2440芯片手册英文版
- 基于s3c2440的智能家居控制系统
- ARM9 Mini2440核心板原理图和PCB已经封装
- S3C2440A 中文手册
- S3c2440全套中文手册
- S3C2440A中文完整版
- s3c2440全套中文手册(无水印版).pd
- S3C2440全套中文手册.pdf
- 用s3c2440开发板和r301指纹模块做指纹识
- vxworks在S3C2440上的移植
- 基于S3C2440的USB HOST裸机驱动,支持U盘
- s3c2440 USB device 驱动
- S3C2440底板电路图及PCB板图。
- s3c2440裸机按键控制小灯
- s3c2440 bsp for vxworks
- s3c2440裸机DS18B20程序
- Keil Mdk5.15下移植ucosii到mini2440s3c2440
- SJF2440源码 源代码 官方发布VC++完整
- S3C2440资料3时钟控制器,电源
- S3C2440详细代码.rar
- S3C2440三星官方电路设计
评论
共有 条评论