智能无线抄表系统中CC1101的WinCE驱动开发
2.4 SPI_IOControl()
几乎一个驱动程序的所有功能都可以在这个函数中实现。对于一类CE自身已经支持的设备,它们已经被定义了一套I/O操作,只需按照各类设备已经定义的内容去实现所有的I/O操作。当要实现一个自定义的设备时,就可以随心所欲定义自已的I/O操作。下面是一个读取寄存器值的操作函数。
![4.JPG](http://m.amcfsurvey.com/editerupload/fetch/20130823/162233_3_0.jpg)
驱动程序SPI_IOControl()里调用了读寄存器函数读取CC1101的FSCTRL1寄存器的值,所以只要应用程序里调用DevicelOControl(),就可以让串口输出读取FSCTRL1的值。应用程序里具体调用如下3个函数:
![5.JPG](http://m.amcfsurvey.com/editerupload/fetch/20130823/162233_3_1.jpg)
读出的数据就保存在cBuffer_in[]数组中了,用串口就可以将其中内容正确输出。
2.5 设备驱动程序的内核加戴和注册表设置
流驱动是由设备管理器来管理的。当系统启动时,设备管理器被加载到内核中,由它全程监控驱动程序的执行过程。设备管理器通过调用ActivateDeviceEx()函数来加载指定的驱动,而该函数的第一个参数是一个注册表路径,这就要求驱动程序被加载的一个必要条件是把自己的信息记录在注册表中。因此需在Platform.reg中添加如下内容:
![6.JPG](http://m.amcfsurvey.com/editerupload/fetch/20130823/162233_3_2.jpg)
另外,还要修改SPI_Driver.def文件,在里面列出所有SPI驱动接口函数,并在platform.bib中填加一行内容:
![7.JPG](http://m.amcfsurvey.com/editerupload/fetch/20130823/162233_3_3.jpg)
修改platform/BSP/drvers目录下的dirs文件,加上一行SPI_Driver。
以上步骤完成了WinCE5.0下设备驱动程序的设计,通过Platform Builder环境进行编译,生成特定的dll文件,然后将其重新打包,并编译进WinCE内核中重新生成NK.bin,这样就可以在应用程序中通过标准的文件I/O函数来调用这个驱动函数,从而完成应用层与物理设备的通信。
2.6 测试驱动程序
在此使用eMbedded Visual C++4.0编写测试应用程序,用WinCE驱动调试助手加串口输出信息进行调试。推荐使用博客园的WinCE驱动调试助手,这个工具允许在系统里动态地加载和卸载驱动程序,避免每次都要打包生成NK,再下载到板子上。以下是采用串口输出变量的方法:
![8.JPG](http://m.amcfsurvey.com/editerupload/fetch/20130823/162233_3_4.jpg)
以下为测试第2.4节读寄存器得到的结果:
![9.JPG](http://m.amcfsurvey.com/editerupload/fetch/20130823/162233_3_5.jpg)
因为InitCC1101()里给FSCTRL1配置的值是0x0A,由此可以看出已经正确读出寄存器值。同时也验证了其他寄存器所得到的数据完全正确。这足以说明SPI驱动程序的通信是成功的。
3. 结语
本文完成了WinCE 5.0下对SPI驱动程序的开发,提出了CC1101与S3C2410之伺的SPI通信方案。经过测试,该方案已在实际系统中得到了实现。系统充分利用SPI总线接口功能完善、时序简单等特点,提高了系统的可靠性。同时,CC1101与S3C2410处理器结合可广泛应用于嵌入式远程控制和数据无线传输。本文引用地址://m.amcfsurvey.com/article/162233.htm
评论