搜索
bottom↓
回复: 29

KE02 KBI0中断(已解决)

[复制链接]

出0入0汤圆

发表于 2014-4-24 14:34:01 | 显示全部楼层 |阅读模式
本帖最后由 FSL_TICS_Robin 于 2014-5-5 10:50 编辑

由于KE02没有IO中断功能,使用KBI0检测外部中断,KBI0_P2和KBI0_P3配置为下降沿中断,在测试过程中发现,在同时配置这两个pin之后,只有KBI0_P2能够正常中断,KBI0_P3不响应;对KBI0_P2和KBI0_P3单独测试时,都能够正常响应。

KBI_ConfigType  sKBIConfig = {0};
sKBIConfig.sBits.bMode   = KBI_MODE_EDGE_ONLY;
   
sKBIConfig.sPin[2].bEdge = KBI_FALLING_EDGE_LOW_LEVEL;
sKBIConfig.sPin[3].bEdge = KBI_FALLING_EDGE_LOW_LEVEL;

sKBIConfig.sBits.bIntEn  = 1;
   
sKBIConfig.sPin[2].bEn   = 1;
sKBIConfig.sPin[3].bEn   = 1;

KBI_Init(KBI0, &sKBIConfig);

上面是配置程序,在主函数里面只有这一段,其他都被屏蔽了。

void KBI0_Isr(void)       
{

    KBI0->SC |= KBI_SC_KBACK_MASK;
    LED0_Toggle();

}

是什么原因导致两个pin不能同时配置为响应中断?

出0入0汤圆

发表于 2014-4-24 15:05:11 | 显示全部楼层
楼主你好
飞思卡尔官网提供的KEXX_DRIVERS_V1.2.1_DEVD中有KE02 KBI例程可供你参考。

请问你用的是哪种编译环境?

出0入0汤圆

 楼主| 发表于 2014-4-24 15:15:23 | 显示全部楼层
FSL_TICS_Robin 发表于 2014-4-24 15:05
楼主你好
飞思卡尔官网提供的KEXX_DRIVERS_V1.2.1_DEVD中有KE02 KBI例程可供你参考。

用的IAR 6.7,我看过demo,附件是demo,我就是参考这个写的

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2014-4-24 17:59:29 | 显示全部楼层
本帖最后由 FSL_TICS_Robin 于 2014-4-24 18:19 编辑

我在FRDM-KE02Z开发板上测试了一下官网那个KBI demo,能够进入中断的。
不过官网那个例程是2个KBI模块,而你是需要一个KBI模块的2路触发中断。
建议debug调试时看下寄存器,明天我再帮你看看。

出0入0汤圆

 楼主| 发表于 2014-4-25 08:41:05 | 显示全部楼层
FSL_TICS_Robin 发表于 2014-4-24 17:59
我在FRDM-KE02Z开发板上测试了一下官网那个KBI demo,能够进入中断的。
不过官网那个例程是2个KBI模块,而 ...

我在上面表述的很清楚了,单独一个模块开一路是没有问题的,但是一个模块开两路就不行了,比如同时开KBI0_P2,KBI0_P3,只有KBI0_P2能响应中断,而KBI0_P3不响应,单独测试KBI0_P3又是正常的。

出0入0汤圆

发表于 2014-4-25 09:19:01 | 显示全部楼层
ln08136207 发表于 2014-4-25 08:41
我在上面表述的很清楚了,单独一个模块开一路是没有问题的,但是一个模块开两路就不行了,比如同时开KBI0 ...

我这儿用的是IAR6.6+FRDM-KE02Z开发板,只将源程序修改了KBI初始化这一部分:
    sKBIConfig.sBits.bMode   = KBI_MODE_EDGE_ONLY;
    sKBIConfig.sPin[2].bEdge = KBI_FALLING_EDGE_LOW_LEVEL;
    sKBIConfig.sPin[3].bEdge = KBI_FALLING_EDGE_LOW_LEVEL;
    sKBIConfig.sBits.bIntEn  = 1;
    sKBIConfig.sPin[2].bEn   = 1;
    sKBIConfig.sPin[3].bEn   = 1;
   
    KBI_Init(KBI0, &sKBIConfig);
    KBI_SetCallback(KBI0, &KBI0_Task);

调试时分别用低电平去触发KBI0P2和KBI0P3,都是可以进入KBI0_Isr中断的。

难道你是同时将这两个引脚拉低吗?

出0入0汤圆

 楼主| 发表于 2014-4-25 09:52:40 | 显示全部楼层
FSL_TICS_Robin 发表于 2014-4-25 09:19
我这儿用的是IAR6.6+FRDM-KE02Z开发板,只将源程序修改了KBI初始化这一部分:
    sKBIConfig.sBits.bMod ...

没有同时拉低,而且配置的是下降沿中断,我用一个编码器给出两路信号,不会同时产生下降沿,我用的是32-LQFP封装的片子。而且,如果我按照你的程序,不操作KBI_ConfigType  sKBIConfig = {0};即使是只开一路也不工作。
图片中显示仿真过程,仅仅是在定义KBI_ConfigType  sKBIConfig;这句之后,sKBIConfig这个结构体开辟一块区域之后,里面的值不都是0,(请看红色圆圈内)。因此我在开始加了KBI_ConfigType  sKBIConfig = {0};这句。
第二张图片是初始化KBI0结束后的寄存器值。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2014-4-25 11:01:33 | 显示全部楼层
我这儿debug时pConfig的值和你不一样呢,KBI寄存器也是:


本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2014-4-25 11:42:08 | 显示全部楼层
FSL_TICS_Robin 发表于 2014-4-25 11:01
我这儿debug时pConfig的值和你不一样呢,KBI寄存器也是:

你好,我也比较关心MKE02的KBI是否可以每个中断源独立运行。

出0入0汤圆

发表于 2014-4-25 12:46:52 | 显示全部楼层
wanstrive 发表于 2014-4-25 11:42
你好,我也比较关心MKE02的KBI是否可以每个中断源独立运行。

KE02有2个KBI模块,每个KBI模块有一个中断源,每个KBI模块又有很多通道。
但缺点是同一个KBI模块的几个通道都只会进入这一个中断源,而且也没有标志区分是哪个通道导致的。

如果你那有KE02的硬件,可以参考2楼的例子。

出0入0汤圆

 楼主| 发表于 2014-4-25 12:53:15 | 显示全部楼层
FSL_TICS_Robin 发表于 2014-4-25 11:01
我这儿debug时pConfig的值和你不一样呢,KBI寄存器也是:

你的程序中并没有配置KBI0_P7,但是你的寄存器KBI0_PE却是0x8c,同样,没有配置KBI0_P4,但是从你的仿真数据来看,会发现sKBIConfig.sPin[4].bEdge却是0x01;

这些问题都是次要的,通过KBI_ConfigType  sKBIConfig = {0};操作可以解决。
仿真波形见图。还是不能两路响应中断。

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2014-4-25 16:24:16 | 显示全部楼层
FSL_TICS_Robin 发表于 2014-4-25 12:46
KE02有2个KBI模块,每个KBI模块有一个中断源,每个KBI模块又有很多通道。
但缺点是同一个KBI模块的几个通 ...

你好,附件是我的PROJECT,请帮忙仿真看一下问题在哪里。我用的是IAR6.7编译环境。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2014-4-25 16:42:01 | 显示全部楼层
ln08136207 发表于 2014-4-25 12:53
你的程序中并没有配置KBI0_P7,但是你的寄存器KBI0_PE却是0x8c,同样,没有配置KBI0_P4,但是从你的仿真数 ...


就如你说的,开头定义KBI_ConfigType  sKBIConfig = {0};最好清零。
从11楼截图看,你的KBI0寄存器设置正常:
KBI0_SC = 0x0A//已经发生中断,见参考手册33.5.4 KBI initialization
KBI0_PE = 0x0C
KBI0_ES = 0x00


我的中断函数因为就没改,沿用例程中的所以KBI_Init(KBI0, &sKBIConfig);之后还调用了KBI_SetCallback(KBI0, &KBI0_Task);

出0入114汤圆

发表于 2014-4-25 17:08:41 | 显示全部楼层
在中断里 判断引脚电平,来判断那个引脚发生了中断,比较垃圾的 做法

出0入0汤圆

 楼主| 发表于 2014-4-28 08:54:02 | 显示全部楼层
cloudxxcloud 发表于 2014-4-25 17:08
在中断里 判断引脚电平,来判断那个引脚发生了中断,比较垃圾的 做法

没办法,内部资源受限。

出0入0汤圆

发表于 2014-4-28 10:56:45 | 显示全部楼层
ln08136207 发表于 2014-4-24 15:15
用的IAR 6.7,我看过demo,附件是demo,我就是参考这个写的

我的IAR6.6+JLink调试你这程序,KBI0_P2\KBI0_P3上的低电平都是可以触发中断函数的。
硬件是FRDM-KE02Z开发板,所以KBI0_P2\KBI0_P3对应引脚在48、47位置。
除了icf文件修改到本地位置,其他什么都没有修改。

要不你提交一个技术服务请求(你和接SR的工程师邮件通信,我们继续在论坛里讨论)
按照 飞思卡尔产品论坛快速购买通道及SR提交流程
如果你尚未注册飞思卡尔账号,先点击注册按钮:右边图标完成注册
然后点击申请SR按钮:提交一个服务请求,写明自己的问题,附件自己的工程。

出0入0汤圆

 楼主| 发表于 2014-4-28 11:22:03 | 显示全部楼层
FSL_TICS_Robin 发表于 2014-4-28 10:56
我的IAR6.6+JLink调试你这程序,KBI0_P2\KBI0_P3上的低电平都是可以触发中断函数的。
硬件是FRDM-KE02Z开 ...

我上周也使用了FRDM-KE02Z开发板测试,确认硬件连接没有错误。在仿真时,仍然只有一路能进入中断。两路分别测试时,又都是可以进入的。

还有就是,这个配置是下降沿中断,而不是低电平中断。

出0入0汤圆

发表于 2014-4-28 11:46:31 | 显示全部楼层
ln08136207 发表于 2014-4-28 11:22
我上周也使用了FRDM-KE02Z开发板测试,确认硬件连接没有错误。在仿真时,仍然只有一路能进入中断。两路分 ...

FRDM-KE02Z开发板上由于这两引脚被MMA8451Q使用(带上拉电阻),而未被引出到排针处。
所以我是直接碰触47、48引脚测试的。

出0入0汤圆

 楼主| 发表于 2014-5-5 12:55:09 | 显示全部楼层
FSL_TICS_Robin 发表于 2014-4-28 11:46
FRDM-KE02Z开发板上由于这两引脚被MMA8451Q使用(带上拉电阻),而未被引出到排针处。
所以我是直接碰触4 ...

测试了,无论是demo板还是自己画的板子,都只能响应一路。

放弃这一功能,结贴。

出0入0汤圆

发表于 2014-5-5 14:57:51 | 显示全部楼层
本帖最后由 FSL_TICS_ZJJ 于 2014-5-5 15:03 编辑
ln08136207 发表于 2014-5-5 12:55
测试了,无论是demo板还是自己画的板子,都只能响应一路。

放弃这一功能,结贴。 ...


楼主用freedom板子试试这个工程:


这边在KBI中断中,设断点,两个引脚(47,48)点低电平都可以进入中断的。

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2014-5-5 16:36:57 | 显示全部楼层
本帖最后由 ln08136207 于 2014-5-5 16:38 编辑
FSL_TICS_ZJJ 发表于 2014-5-5 14:57
楼主用freedom板子试试这个工程:


谢谢你的回复,这个demo我测试了一下,和我之前的一样,只有一路响应.

我的测试环境是这样的:
                               1.FEDM_KE02Z demo板
                               2.IAR6.7编译环境。
                               3.硬件连接是直接接在47,48脚(R42,R45)
用有感无刷电机给出交替的(用手转动电机)上升/下降沿(霍尔信号),用示波器观察,结果发现仍只有一路响应。

出0入0汤圆

发表于 2014-5-5 16:58:36 | 显示全部楼层
ln08136207 发表于 2014-5-5 16:36
谢谢你的回复,这个demo我测试了一下,和我之前的一样,只有一路响应.

我的测试环境是这样的:

楼主你好,问一下你是怎么测试这两个引脚(47,48)行不行的呢?
你现在不用无刷电机,直接用一个接地的线去碰这两个引脚,同时在kbi.c文件中的KBI0_Isr函数里设置断点。
触碰如下:

然后

就进中断了,不管我点R42还是R45都会进哦。
你是这每次跑起来,这两个只有一个能进吗?
那么是哪个固定引脚不能进呢?
如果是那样的话,你把另外一个能进的屏蔽掉,之前不能进中断的还能进吗?
我怀疑你不能进的那个引脚有问题了,如果确认是那个引脚的问题,可以换一个同样是KBI0的引脚试试。
这个肯定是可以的,因为我这边都测试了,不可能就你不行。
所以,楼主还请耐心下,我们会陪你一起找问题。

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2014-5-5 17:11:48 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-5-5 16:58
楼主你好,问一下你是怎么测试这两个引脚(47,48)行不行的呢?
你现在不用无刷电机,直接用一个接地的线 ...

谢谢你的支援。

1.每次只有一路可以响应。
2.没有哪个是固定不响应的,但是每次仿真是固定的。
3.如果屏蔽一个,即每次只开一路,都能够响应。
4.引脚是没有问题的,我用自己画的板子,用不同的芯片,仿真结果一样。
5.根据你的测试图片,我跟你的测试方法不一样。我是同时连接两条线。但是同一时间只有一路会出现下降沿。

出0入0汤圆

发表于 2014-5-5 17:17:09 | 显示全部楼层
ln08136207 发表于 2014-5-5 17:11
谢谢你的支援。

1.每次只有一路可以响应。

要不你改用我们这种测试方法试试呗?(先撇开芯片外部问题)

出0入0汤圆

 楼主| 发表于 2014-5-6 08:46:34 | 显示全部楼层
FSL_TICS_Robin 发表于 2014-5-5 17:17
要不你改用我们这种测试方法试试呗?(先撇开芯片外部问题)

按照你们的测试方法,每次只连接1个引脚是正常的。
但是,如果两路都连上,只有一路能够响应。
外部输入的信号应该是没问题的,因为单独测试一路的话,都是正常的。

出0入0汤圆

发表于 2014-5-6 10:20:48 | 显示全部楼层
ln08136207 发表于 2014-5-6 08:46
按照你们的测试方法,每次只连接1个引脚是正常的。
但是,如果两路都连上,只有一路能够响应。
外部输入 ...

楼主,您看这样行不行。
您把两个都接的时候的示波器波形给我们,也就是两路的示波器波形。
然后你编码器转转,两路分时都搞个低电平中断,在图中指出,哪个中断了,哪个不中断。
一定要示波器波形哦。这样我们好模拟你的波形来测试一下。

出0入0汤圆

发表于 2014-5-6 10:22:49 | 显示全部楼层
我们需要看看,你另外一个不响应的时候的波形是什么样的,电压是多少等等。
这样我们这边好模拟哦。
请尽快回复我们!

出0入0汤圆

 楼主| 发表于 2014-5-6 11:25:28 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-5-6 10:22
我们需要看看,你另外一个不响应的时候的波形是什么样的,电压是多少等等。
这样我们这边好模拟哦。
请尽快 ...

第一副图片是两路外部信号。
第二张是第47脚产生下降沿
第三张是第48脚产生下降沿
第四张是第47脚产生下降沿时,程序仿真进入中断。
而在第48脚产生下降沿时,程序没进入中断。

要注意的是,每次仿真,两个脚只有一路进入中断,但不固定。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2014-5-6 15:37:33 | 显示全部楼层
本帖最后由 FSL_TICS_ZJJ 于 2014-5-6 15:39 编辑

楼主你好,我这边模拟你的波形后,实验证明两个通道的下降沿都是可以进中断的。
为了便于测试(不用点电阻),我将之前的KBI引脚换到了边上的排针上,并且,又开启了两个GPIO口模拟你的波形,然后和KBI引脚对接。
现在配置情况如下:
测试平台:FRDM_KE02。
KBI测试引脚为:PTA0,PTB0
模拟波形的GPIO为:PTB3,PTB5.
然后,将PTB3和PTA0对接,PTB5和PTB0对接。
如下图:

测试,不设断点的时候,两个GPIO的引脚波形如下:

然后,示波器时间轴就保持如上显示,一格50ms,
在KBI中断中设置断点,然后跑起来,进入断点,波形如下:

可见蓝颜色的下降沿导致进入断点。
再次跑起来,又进入了断点,波形如下:

可见是黄颜色的波形导致的进入KBI中断。
其中黄色是对应KBI,PTA0,
蓝色对应的是KBI,PTB0。
综上,我们这边就是模拟和你类似的波形,也是能够都进入中断的。
不信,你可以自己拿我的程序再测试一遍,源代码如下:

我看你给我的波形,有个波的上升下降尖峰特别大,而另一个波西没有过冲的尖峰,你可以把你的尖峰滤掉试试。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2014-5-6 15:41:48 | 显示全部楼层
呵呵 我前段时间也调过,用到几个KBI引脚 但是只能在中断里判断具体是哪个引脚引起的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 17:07

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表