新闻中心

EEPW首页>嵌入式系统>设计应用> ARM和WinCE6.0下nRF24L01的驱动设计

ARM和WinCE6.0下nRF24L01的驱动设计

作者: 时间:2012-05-23 来源:网络 收藏

(5)NRF_IOControl()函数

NRF_IOControl()函数主要实现了对本机地址的配置、接收方地址的配置、发送模式和接收模式的配置等。

3.2重点

(1)如何实现特殊功能寄存器的虚拟地址映射

由于WinCE 6.0对虚拟地址的映射住安全性方面提高了要求,所以WinCE 6.0中地址映射不能再使用以前版本中常用的VirtualAlloc()和VirtualFree()函数来分配和释放虚拟地址,它们的使用会产生编译错误。解决方式是使用CEDDK库中的MmMapIoSpace()函数和MmUnmapIo Space()函数来实现虚拟地址的分配和释放。

(2)如何实现数据的接收

在数据接收中采用多线程编程,在设备初始化时调用CreateThread()函数创建一新线程对应线程函数DWORD AcceptThread()。

(3)AcceptThread()函数的实现

在该函数中主要进行中断配置、中断同步事件的创建、中断的撤除等。使用的API函数主要有:KernclIoControl()用来获取逻辑巾断号;InterruptInitialize()逻辑中断和同步事件关联;WaitForSingleObject()阻塞线程并等待中断同步事件发生,中断同步事件发生即接收完一次数据,则使接收完成同步事件有效,可通知应用程序数据已接收完成;(InterruptDone)函数中断结束,并撤除相应的中断标志位准备响应下次中断。

4测试程序

4.1 数据发送

数据发送步骤如下:

①调用CreateFile()函数打开设备,核心代码如下:

NRFdriver=CreateFilc(L“NRF1:”,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN EXISTING,0,NULL);

②通过DeviceIoControl()函数设置为发送模式并使用默认地址(默认地址在程序中配置完成),核心代码如下:

DevlccIoControl(NRFdriver.IS SEND STATUS,NULL,0,NULL,0.NULL,NULL);

③调用WriteFile函数完成发送,核心代码如下:

WriteFile(NRFdriver,(LPCVOID)p,strL,NULL,NULL);

4.2 数据接收

数据接收步骤如下:

①打开设备,方法同4.1节步骤①。

②通过DeviceIocontrol()函数设置为接收模式并使用默认地址,核心代码如下:

DeviceIoControl(NRFdrivcr,IS_ACCEPT_STATUS,NULL,0,NULL,0,NULL,NULL);

③创建接收线程及与驱动中同名的接收完成同步事件,在接收线程中调用WaitForSingleObject()函数等待有效。如有效,则调用ReadFi le()函数读取数据并显示。核心代码如下:

h.JPG



评论


相关推荐

技术专区

关闭