您当前的位置:首页 > 公司动态

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

时间:2015-08-11  来源:扁平线圈电感厂家  点击:

SPI_Write_Bur(WRITE REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH); //写本地默认地址

SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH); //写接收端默认地址

SPI_RW_Reg(WRITE_REG+EN_AA,0x01);

SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);

SPI_RW_Reg(WRITE_REG+RF_CH,0);//设置信道工作为2.4 GHz,收发必须一致

SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOADWIDTH);//设置接收数据长度

SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);//设置发射速率为1 MHz,发射功率为最大值0 dB

(3)NRF_Read()函数

NRE_Read()函数实现了对接收缓冲区的读取并传送至应用程序。由于nRF24L01一次最多能接收32个字节的信息,所以该函数一次最多能传送32字节的信息。主要核心代码如下:

f.JPG

(4)NRF_Write()函数

NRE_Write()函数主要实现发送数据写入发送缓冲区并发送的功能。主要核心代码如下:

g.JPG

g1.jpg

(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

以上驱动及测试程序均是在VC2008环境中完成。在WinCE6.0系统中运行测试程序还应该在注册表中导入如下注册信息:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\NRF24L01]

“Prefix”=“NRF”

“Dll”=“NRFDriver.DLL”

以上内容中,驱动程序注册的设备名称为“NRF”,驱动程序名为“NRFDriver.dll”。

大电流电感

车充电感选择和安规车充输入 9-30V输出12V3.5A,使用四开关buck-boost做,频率暂定400K.1.电感应该选用多大的磁环?2.做全球认证是否要装保险丝?TI有现成方案和在线仿真工具,不妨去看看。
过安规认证

求教1000W工频变压器设计想设计个110V交流输入,220V交流输出,1000W的电源,设计思路是想把110V通过PFC升至380V直流,然后在通过纯正弦波芯片专成交流,这里要一个工频变压器,也就是380VDC转换为220VAC

LNK605遇到的麻烦问题 LNK605电路图是照规格书来的,但是每次工作一会就重启保护了,后面还是可以工作但都是工作不到几秒又自动保护了。。。。不知道是不是开路短路保护,有一块板子FB引脚出来的电阻

注塑加工厂


上一篇力控在煤矿锅炉房监控子系统中的应用

下一篇苹果iPhone 4S的拆解


  
  温馨提示
网站首页 | 产品展示 | 科技前沿 | 行业资讯
本公司专业研发、设计、生产、销售贴片电感、插件电感、功率电感、大电流电感、扁平线圈电感、一体成型电感。
专业电感生产制造商,品质优异、交期快。
在线客服
热线电话