您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 技术讨论区 -> BF518 下降沿触发变为了双边沿触发
本帖共有666个阅读者
发表帖子 发表投票 回复主题
BF518 下降沿触发变为了双边沿触发
jackliu8154(论坛新手)
jackliu8154
头衔:社区公民
帮派:无帮无派
帖数:17
金钱:255
积分:21
注册时间:2013/9/9
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
BF518 下降沿触发变为了双边沿触发
在设置了边沿触发条件之后,结果按下按键的时候,上升沿和下降沿都触发了中断,求解!
在开发板上,外加了一个电阻接地另一端接PF0,一个开关接3.3v 和PF0.
附图是仿真的数据,也正确,边沿触发,下降沿触发。



上传的图片
  2013112210352004.jpg [ 81.22 KB 718×373 ] (缩略时请点击查看原图)

 


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/11/22 10:35:25
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
看代码没发现什么问题,你试试这个代码是否还有那个问题:

#include <cdefBF518.h>
#include <ccblkfn.h>
#include <sys\exception.h>

EX_INTERRUPT_HANDLER(FlagA_ISR);

void Set_PLL(unsigned int pmsel,unsigned int pssel)
{
unsigned int new_PLL_CTL;
*pPLL_DIV = pssel;
asm("ssync;");
new_PLL_CTL = (pmsel & 0x3f) << 9;
*pSIC_IWR |= 0xffffffff;
if (new_PLL_CTL != *pPLL_CTL)
{
*pPLL_CTL = new_PLL_CTL;
asm("ssync;");
asm("idle;");
}
}

void Init_EBIU(void)
{
*pEBIU_AMBCTL0 = 0x7bb07bb0;
*pEBIU_AMBCTL1 = 0xffc07bb0;
*pEBIU_AMGCTL = 0x000f;
}

void Init_SDRAM(void)
{
*pEBIU_SDRRC = 0x00000817;
*pEBIU_SDBCTL = 0x00000025;
*pEBIU_SDGCTL = 0x0091998d;
ssync();
}

void InitPorts(void)
{
*pPORTF_FER &= ~(PF1|PF0);
*pPORTFIO_DIR &= ~(PF1|PF0);
*pPORTFIO_INEN |=  (PF1|PF0);
*pPORTFIO_EDGE |= (PF1|PF0) ;
*pPORTFIO_POLAR |= (PF1|PF0);
    *pPORTFIO_MASKA_SET |= (PF1|PF0);
}

void Init_Interrupts(void)
{
   int iar5 ;
int imask1;
iar5 = *pSIC_IAR5;
iar5 &= 0xff0fffff;
    iar5 |= 0x00600000;
    *pSIC_IAR5 = iar5;
    register_handler(ik_ivg13, FlagA_ISR);
    *pSIC_IMASK1 |= 0x00002000;
}

EX_INTERRUPT_HANDLER(FlagA_ISR)
{
if((*pPORTFIO&PF0) == PF0)
{
printf("interrupt is PF0!\n");
}
else if((*pPORTFIO&PF1) == PF1)
{
printf("interrupt is PF1!\n");
}
*pPORTFIO_CLEAR = PF1|PF0;
}

void main(void)
{
Set_PLL(16,4);
    Init_EBIU();
    Init_SDRAM();
    InitPorts();
    Init_Interrupts();
    while(1);

}


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/11/23 15:55:08
jackliu8154(论坛新手)
jackliu8154
头衔:社区公民
帮派:无帮无派
帖数:17
金钱:255
积分:21
注册时间:2013/9/9
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
andy,我试你的代码,还是上升沿,下降沿都触发。。。。郁闷。。我用的是BF51X V1.1的开发板,然后再PF0 port4-19脚上上拉一个10K电阻,然后再19脚和地之间并接一个105电容和一个开关,不论开关是开还是断开都会触发中断,我看了波形,非常好,没有毛刺。。。。求解!

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/12/31 11:22:45
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你把开关控制换成IO口控制。寄存器如果配置了下降沿触发,就一定是下降沿触发。机械开关容易产生抖动。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/12/31 12:54:41
jackliu8154(论坛新手)
jackliu8154
头衔:社区公民
帮派:无帮无派
帖数:17
金钱:255
积分:21
注册时间:2013/9/9
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
换成了IO口控制,把开关焊下来了,还是一样的效果。


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/12/31 14:07:32
jackliu8154(论坛新手)
jackliu8154
头衔:社区公民
帮派:无帮无派
帖数:17
金钱:255
积分:21
注册时间:2013/9/9
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
尝试了几个写法,更改寄存器好像结果也不好。

「该帖子被 jackliu8154 在 2013-12-31 14:34:52 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/12/31 14:26:14
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
测试了BF518和BF533的板子,确实不能配成单沿触发。上升和下降沿都能触发,感觉应该是芯片BUG。
你可以将代码改为查询方式,每次代码循环查询一次按键状态。或者开一个定时器,每次进中断查询一次按键状态。当按键触发后,查询按键是否抬起,当按键抬起后,再次触发,按键有效。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/1/3 12:18:12
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154163 Call, 1 Queries, Processed in 0.031250 second(s),