资源简介
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 USB device 驱动
- S3C2440底板电路图及PCB板图。
- s3c2440裸机按键控制小灯
- s3c2440 bsp for vxworks
- s3c2440裸机DS18B20程序
- Keil Mdk5.15下移植ucosii到mini2440s3c2440
- SJF2440源码 源代码 官方发布VC++完整
- S3C2440资料3时钟控制器,电源
- S3C2440详细代码.rar
- S3C2440三星官方电路设计
- s3c2440原理图
- yap 一个基于s3c2440的操作系统
- IAR5.4环境下调试ARM S3C2440的完整工程
- S3C2440全面实用原理图
- S3C2440下作的字库程序
- ARM9(S3C2440PCB)
- VxWorks BSP for s3c2440
- S3C2440触摸屏驱动详解
- STM32F103 WS2812真彩LED灯驱动例程
- ARM9_S3C2440最小系统.doc
- 基于S3C2440和嵌入式Linux的扩展串口设
- S3C2440开发资料全
- S3C2440 Lcd代码(ARM9)
- s3c2440的头文件
- keil环境下s3c2440软件仿真调试
- 亲身实践s3c2440 gcc版本的USB HID和U盘裸
- S3C2440开发板上实现按键点亮LED驱动开
- S3C2440.jflash
- S3C2440裸机读写SD卡可调试可运行
- 基于S3C2440的OV7670摄像头的裸机程序
评论
共有 条评论