欢迎来到天天文库
浏览记录
ID:7772124
大小:31.00 KB
页数:7页
时间:2018-02-25
《gsensor驱动调用框架流程》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、一、首先建立这样一个全局的观念: Android中sensor在Android系统架构中的位置及其工作。方框图如下:从以上方框图中,可以看出Android中sensor在系统分为四层:驱动层(SensorDriver)、硬件抽象层(Native)、中间层(Framework)、应用层(Java)。硬件抽象层与中间层可以合并一起作为Framework层。针对我们xx这里一个具体的Gsensor,下面将以具体的源码形式来讲解以上的这个系统框图。 二、驱动层(SensorDriverLayer)芯片
2、ADXL345为GSensor,至于硬件的具体工作原理,须分析ADXL345的DataSheet。驱动源码位于:xxcustomcommonkernelaccelerometeradxl345目录。由于ADXL345是以I2C形式接口挂接到Linux系统,因此同时需要分析Linux的I2C子系统架构(略)。其源码位于:1、 xxplatformxxkerneldriversi2c2、 kerneldriversi2c查看ADXL345.c文件,分析针对于其硬件工作原理的几个
3、函数。硬件初始化: [cpp]viewplaincopy1.static int adxl345_init_client(struct i2c_client *client, int reset_cali) 2. 3.{ 4. 5. struct adxl345_i2c_data *obj = i2c_get_clientdata(client); 6. 7. int res = 0; 8. 9. 1. 2. adxl345_gpio_config();//
4、配置GPIO口,这里由于不使用中断,所以将中断引脚配置成输入输出口。 3. 4. 5. 6. res = ADXL345_CheckDeviceID(client); //检测设备ID,通过读ADXL345的DEVID寄存器 7. 8. if(res != ADXL345_SUCCESS) 9. 10. { 11. 12. return res; 13. 14. } 15. 16. 17. 18. res
5、= ADXL345_SetPowerMode(client, false);//设置电源模式,ADXL345有几种电源模式,这里设置false值指不让芯片处于messure模式 19. 20. if(res != ADXL345_SUCCESS) 21. 22. { 23. 24. return res; 25. 26. } 27. 28. 29. 30. 31. 32. res = ADXL345_SetBWRate(c
6、lient, ADXL345_BW_100HZ);//设置带宽,100Hz 33. 34. if(res != ADXL345_SUCCESS ) //0x2C->BW=100Hz 35. 36. { 37. 38. return res; 39. 40. } 41. 42. 43. 44. //设置数据格式,具体见datasheet 45. 46. res = ADXL345_SetDataFormat(client, A
7、DXL345_FULL_RES
8、ADXL345_RANGE_2G); 47. 1. if(res != ADXL345_SUCCESS) //0x2C->BW=100Hz 2. 3. { 4. 5. return res; 6. 7. } 8. 9. 10. 11. gsensor_gain.x = gsensor_gain.y = gsensor_gain.z = obj->reso->sensitivity; 12. 13.
9、 14. 15. //设置中断寄存器,关闭中断 16. 17. res = ADXL345_SetIntEnable(client, 0x00);//disable INT 18. 19. if(res != ADXL345_SUCCESS) 20. 21. { 22. 23. return res; 24. 25. } 26. 27. 28. 29. if(0 != reset_
此文档下载收益归作者所有