MTK 轨迹球(JOG_BALL)
声明:本资料来自公司同事整理
1.轨迹球(JOG_BALL)
1.1.JOG_BALL原理
如下图所示,轨迹球里面有4个霍尔传感器+4个小的径向充磁的小磁铁。当从上到下推球或者从左到右推动球时,如果球接触到齿条,并带动齿条旋转一个小角度,此时齿条上的磁环也跟着旋转同样的角度,此时磁铁会转动另一个极性(南极北极的切换或者北极南极的切换),这样磁通量会发生变化,由磁信号转化的一个电脉冲信号将被释放出,电平变化会触发相应的霍尔元件对应的中断,上层会根据报上的中断来执行上下左右等操作。
1.2 JOG_BALL代码流程和细节
如下图示是霍尔对应的PCB和原理图
从上面可以看到每个JOG_BALL有四个霍尔,而且初始化时候是上拉的,否则不能工作。
1.2.1初始化函数在keymain.c中Kbd_Init()函数:
Void Kbd_Init(void)
{
………
// power on
GPIO_ModeSetup(gpio_jog_ball_enable_pin, 0);
GPIO_InitIO(1, gpio_jog_ball_enable_pin);
GPIO_WriteIO(0, gpio_jog_ball_enable_pin);
// set jog ball eint
if (JOG_BALL_EINT1_NO < EINT_CHANNEL_NOT_EXIST)
{
GPIO_ModeSetup(JOG_BALL_EINT1_NO+41, 1);
EINT_Registration(JOG_BALL_EINT1_NO, KAL_FALSE, JOG_BALL_EINT_1_Polarity, JOG_BALL_EINT_1_HISR, KAL_TRUE);
}
{……}
…………
}
在初始化函数中使能开启JOG_BALL 2.8V电压,给中断管脚赋了初值并注册了四个中断。
1.2.2响应中断的函数void JOG_BALL_EINT_1_HISR(void)
void JOG_BALL_EINT_2HISR(void)
void JOG_BALL_EINT_3HISR(void)
void JOG_BALL_EINT_4HISR(void)
以void JOG_BALL_EINT_1_HISR(void)
{
………
if (JOG_BALL_EINT_1_Polarity == 1)
{
if (JOG_BALL_EINT_1_tick == JOG_BALL_EINT_tick_launch)
………
kbd_push_onekey_to_kbdbuffer(kbd_onekey_press,DEVICE_KEY_UP);
kbd_push_onekey_to_kbdbuffer(kbd_onekey_release,DEVICE_KEY_UP);
#ifndef L4_NOT_PRESENT
DRV_BuildPrimitive(Kp_ilm,
MOD_DRVKBD,
MOD_UEM,
MSG_ID_DRVUEM_KEYPAD_IND,
NULL);
msg_send_ext_queue(Kp_ilm);
#endif /*L4_NOT_PRESENT*/
}
JOG_BALL_EINT_1_Polarity = !JOG_BALL_EINT_1_Polarity;
EINT_Set_Polarity(JOG_BALL_EINT1_NO, JOG_BALL_EINT_1_Polarity);
}
函数为例,在中断响应函数中设置了JOG_BALL_EINT_1_tick中断响应计数器,当达到门限JOG_BALL_EINT_tick_launch才会确实发出消息给上层执行操作,这样是为了消抖,避免误操作和干扰。在函数结尾将触发电平又恢复成低电平。
1.2.3上层接受消息处理函数:在函数mmi_task()中,根据上面中断函数中kbd_push_onekey_to_kbdbuffer(kbd_onekey_press,DEVICE_KEY_UP);
kbd_push_onekey_to_kbdbuffer(kbd_onekey_release,DEVICE_KEY_UP);
压栈的按键和事件类型依次遍历处理。
小贴士:
电平触发,就是只有高电平(或者低电平)的时候才能触发的动作,
边沿触发,就是有高电平向低电平转换,或者翻过来转换,这个转换过程触发一个动作。
上升沿,就是低电平向高电平转换的瞬间(过程),比如
MTK 轨迹球(JOG_BALL)相关推荐
- opengl开启垂直同步_你的下一部鼠标,何必是鼠标?来试试肯辛通垂直无线轨迹球?...
标题无耻的抄袭了苹果的广告语,不过也算是对我这篇文章很好地概括了.我之前体验过的鼠标产品说成百上千有点夸张,小几十个应该也有了,从办公的到游戏的,从有线的到无线的,从功能丰富的到造型奇特的,而这次体验 ...
- linux使用X11捕捉鼠标,如何在Linux下合法地以编程方式捕获第二个鼠标或轨迹球,X?...
我正在设计和实现一个实验性的GUI应用程序 . 我希望允许我的用户在人体工程学上同时使用双手与应用程序进行交互 . 例如,想象一下GIMP和左手(其他)手中的第二个鼠标(轨迹球):您可以用左手导航,平 ...
- OpenGL中的轨迹球问题
OpenGL鼠标轨迹球(Trackball)原理 什么是鼠标轨迹球 类似AutoCAD里的"动态观察",三维模型都是要投影到二维的屏幕上才能显示给用户,而用户如果想观察一下三维模型 ...
- python鼠标移动轨迹_鼠标的另一种选择,肯辛通轨迹球能否改变固有的使用习惯?...
[引言] 鼠标,作为电脑甚至是现在Pad的外接输入设备,其地位从1964年雏形诞生的那一刻起便从未被撼动,哪怕是thinkpad的小红点以及外接触摸板的出现.鼠标最早只是一个装有两个滚轮(是圆盘型滚轮 ...
- OpenGL MFC单文档 实现轨迹球
OpenGL MFC单文档 实现轨迹球 前言:我是一个怀揣着伟大梦想的普通男生!结果就是,一有时间就幻想着自己的伟大梦想,忘了自己下一步该迈出左脚还是右脚.这不,只顾做梦了,时光可不管我,独自一个人走 ...
- OpenGL(sharpGL)支持任意相机可平移缩放的轨迹球原理描述及源码
本文提供一个本人编写的轨迹球类(ArcBall.cs),它可以直接应用到任何 camera 下,还可以同时实现缩放和平移. 工程源代码在文末. 1.轨迹球原理: 上面是我黑来的两张图,拿来说明轨迹球的 ...
- 轨迹球经历 2017-6
参考: http://search.smzdm.com/?c=post&s=%E8%BD%A8%E8%BF%B9%E7%90%83 http://post.smzdm.com/p/469201 ...
- opengl学习笔记Ⅴ——磨人的轨迹球真可爱
这回我们继续优化交互.使用轨迹球来使得模型转得更加人性化. 轨迹球可以理解为模型外部套一个球体,在我们鼠标拖动旋转模型时,能够准确地模拟出球体被拖动的感觉. 首先,我在这里放弃了透视投影,考虑透视投影 ...
- 【OpenGL(SharpGL)】支持任意相机可平移缩放的轨迹球实现
[OpenGL(SharpGL)]支持任意相机可平移缩放的轨迹球实现 阅读目录(Content) 2016-07-08 2016-02-10 1. 轨迹球原理 2. 轨迹球实现1) 计算投影点2) 计 ...
最新文章
- 多线程共享全局变量以及锁机制
- 测试人员必学的软件快速测试方法(三)
- OpenCV+python图像处理基础操作
- Java EE 7中的资源和依赖注入
- extjs jquery使用场合
- 【Linux】处理数据文件
- 如何提高码农产量,基于ASP.NET MVC的敏捷开发框架之移动端开发随笔二
- 期待已久的Java 9 今日正式发布,新特性解读
- 中国土壤厚度空间分布数据
- Word插入高分辨率图片无法显示
- scratch编程巡线小虫
- Ubuntu和windows之间复制粘贴,遇到无法安装Vmware-tools
- numpy 查找 返回索引_numpy中实现ndarray数组返回符合特定条件的索引方法
- bootstrap国内cdn库
- 四色建模法 模型分析和设计
- MacOS安装的VMware Fusion设置端口映射
- 推荐8部好看的抗日电视剧
- 如何让Surface RT支持网站的flash
- 使用 xbrowser 连接 redhatas5 linux 服务器,出现黑屏。故障分析及处理!
- Miracle密码算法开源库(一)源码分析 :mraes.c