MTK G-sensor

       声明:资料来自公司同事整理

G-sensor

G-sensor是加速度传感器,可以通过其来获得分别来自三个不同轴向上的加速度用以通知上层应用做出相应处理。

 

由于地球的引力作用,gsensor平放时,Z轴方向能感应到1g的重力加速度,如果移动或倾斜,此时垂直的重力加速度会分解到XYZ轴上。所以旋转手机时,XYZ轴的值不断变化,可以理解为手机处在一个坐标系中,我们判断手机是否旋转就是判断X,Y,Z当前的值。

 

下图为基本原理图:

 

MTK G-sensor_第1张图片

飞思卡尔mma7455 管脚配置图:

       

     I2C总线连接适配电路图:

   MTK G-sensor_第2张图片

 

 

 

G-sensor的应用

如甩动换歌,换墙纸,TV调台,实现根据手机放置状态自动切换横竖屏,如翻转静音等应用功能。

在系统中G-sensor的两种使用方式

<1> 中断方式:在此方式中首先会对G-sensor器件设定一个阈(yu)值,器件感知加速度当值大于设定的阈值时器件触发CPU中断,系统得到一次甩动事件,系统将该事件处理为一个消息并将其发送给应用层,应用层得到消息判断任务状态如果有MP3,TV等任务运行及对该任务进行切歌换台等操作,如果无任务则切换墙纸。

<2> 查询方式:当进入某个需要使用到G-sensor的应用时,应用先打开一个定时器每当定时器超时溢出时便查询一次G-sensor当前状态值,用以判断当前手机状态。如果三个轴向上的值超过一定范围即认为手机静置状态改变调用相应处理函数执行操作。该种方式主要应用于视频播放即菜单显示的横竖屏切换。

    相关代码

   Custom_equipment.h

Custom_equipment.c

    由于使用不同的芯片所以在代码中作了兼容匹配。对应每一个芯片都有一套

    [chipname]_init                初始化函数

    [chipname]_enablelatch,         中断使能函数

[chipname]_clearlatch,          清中断函数

[chipname]_read_x_value,        x轴值

   [chipname]_read_y_value,        y轴值

   [chipname]_read_z_value,        z轴值

   [chipname]_entersleep           进入睡眠

函数,函数的函数指针在名为GSensor_Funcs的结构体中。在函数gsensor_read_and_check_id 函数中通过读取芯片id然后将对应结构体赋给结构体指针gsensor_func在通过该指针调用对应函数,从而实现了芯片的自动匹配。read_position_status_handler函数为最终的G-sersor的最终处理函数。当该函数被调用后如果有符合要求的事件产生则该函数会向上发出一条消息供给应用层处理。在此函数中有一个名为g_gsensor_settings[]的数组,该数组记录的是需要使用G-sensor的应用程序的开关。传感器三个轴向上的加速度值存储在另外一个名为curr_gsensor_info[3]的数组之中。

 

 

 

你可能感兴趣的:(c,存储,手机,任务,MTK)