ARM和WinCE6.0下nRF24L01的驱动设计
要实现发送数据写入发送缓冲区并发送的功能。主要核心代码如下: (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()函数读取数据并显示。核心代码如下: 以上驱动及测试程序均是在VC2008环境中完成。在WinCE6.0系统中 运行测试程序还应该在注册表中导入如下注册信息: [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\NRF24L01] “Prefix”=“NRF” “Dll”=“NRFDriver.DLL” 以上内容中,驱动程序注册的设备名称为“NRF”,驱动程序名为“NRFDriver.dll”。 5 测试效果 5.1 接收测试 采用MSP430F149开发板和nRF24L01模块搭建发射端,然后利用该发射端每秒发送32个字节的数据,数据内容为1~32。ARM接收端接收到数据并将它显示到LCD上。 5.2 发送测试 用MSP430F149开发板和nRF24L01模块搭建接收端,然后利用MSP430F149的串行口将接收到的数据发送到计算机,通过串口调试助手就可以观察到ARM端发送来的数据。 结语 驱动程序的编写是嵌入式系统开发的重要核心步骤。文中详细阐述了nRF24L01驱动程序和测试程序的开发,通过测试该驱动程序能够较好地完成无线通信的功能,满足实际需求。
- 基于嵌入式WinCE 6.0 的脉冲/数据发生器软件设计(12-07)
- 单网络节点在WinCE系统下的程序设计(02-16)
- WinCE节能降耗新技巧:高效休眠唤醒(09-07)
- 基于PCI9054的接口卡设计(09-11)
- 电源设计小贴士 1:为您的电源选择正确的工作频率(12-25)
- 用于电压或电流调节的新调节器架构(07-19)