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

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

键盘中断KBI的一点发现

[复制链接]

该用户从未签到

1万

主题

1292

回帖

936

积分

管理员

积分
936

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

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的每日心情
    开心
    前天 08:03
  • 签到天数: 114 天

    [LV.6]常住居民II

    9

    主题

    7703

    回帖

    5352

    积分

    二级逆天

    积分
    5352

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

    发表于 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立场,如侵犯了您的权利请发帖投诉

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