|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
做无刷电机控制时,我曾试图把霍尔器件电平检测用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;
……
}
|
|