我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 2858|回复: 2

键盘中断KBI的一点发现

[复制链接]

该用户从未签到

1万

主题

1424

回帖

3万

积分

管理员

积分
32023

社区居民最爱沙发原创达人社区明星终身成就奖优秀斑竹奖宣传大使奖特殊贡献奖

QQ
发表于 2012-4-30 22:44:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
做无刷电机控制时,我曾试图把霍尔器件电平检测用KBI实现,但3相霍尔传感器都接着的时候进不了中断,拔掉1~2相就能进中断。当时是用Processor Export的Bean做的,因急于把电机弄转也没细研究改用查询方式了。后来因性能等因素,又要使用KBI。下面总结几点容易被忽视的问题:
    [li]KBI各引脚是经过逻辑处理后进入KBI中断系统的,而不像IRQ中断那样独立的,使能中断前要保证所有用到的IO口为非中断电平(边沿模式是沿前的电平)。Processor Export的Bean无法实现这一点(起码不太好实现),后来直接用代码实现了。[/li][li]KBI工作于边沿触发模式时,对应IO口的内部上拉电阻PTxPE不想作用,而是由键盘中断边沿选择寄存器KBIxES控制的。霍尔传感器是开漏的,要接外部上拉电阻,否则无法得到高电平。[/li][li]KBI只能设置成在一个确定的沿(要么上升沿,要么下降沿)产生中断,若想让其在2个沿都产生中断,需要在中断服务程序中重新设置。方法是:每次进中断后KBI引脚电平发生变化,要重新对边沿选择寄存器KBIxES赋值。 [/li]

下面给出初始化和中断程序代码:
void KBI_Init()
{
  KBI1SC = 6;
  KBI1PE = (1<<7)|(1<<6)|(1<<5);
  KBI1ES = ~PTBD;
}
interrupt VectorNumber_Vkeyboard1 KBI_ISR(void)
{
  KBI1ES = ~PTBD;
  KBI1SC_KBACK = 1;
  ……
}
6248819729430.png
回复

使用道具 举报

  • TA的每日心情
    开心
    前天 10:55
  • 签到天数: 177 天

    [LV.7]常住居民III

    11

    主题

    8037

    回帖

    5694

    积分

    二级逆天

    积分
    5694

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    发表于 2024-5-23 16:06:59 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情

    2024-7-30 16:28
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    0

    主题

    128

    回帖

    129

    积分

    二级逆天

    积分
    129

    终身成就奖

    发表于 2024-6-7 16:51:15 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    每日签到,有金币领取。


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    ( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

    平平安安
    TOP
    快速回复 返回顶部 返回列表