打印
[DSP编程]

5509外部中断的问题

[复制链接]
1578|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangch_sh|  楼主 | 2014-2-26 13:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//External INT0(EXINT)中断处理函数
interrupt void int1(void)
{
    int i,j;
    printf("EXINT ouccers\n");
for(i=0; i<0xFF; i++)
{
  for(j=0; j<0xF; j++)
  {
   ;
  }
}
}
我做5509外部中断的实验,用一个按键触发中断,中断产生后,打印出EXINT ouccers
可是由于按键抖动,会打印多次,我想加一个延时。
用for(i=0;i<0xff;i++)
{
}
延时太短了,不管用。
我有嵌套了一级,可是就跑飞了。程序里就这一个中断。这是怎么回事?请指教,谢谢!

相关帖子

沙发
52414133| | 2014-2-26 14:16 | 只看该作者
用while做循环,按键松手检测就OK了

使用特权

评论回复
板凳
zhangmangui| | 2014-2-26 15:54 | 只看该作者
打印多次应该是触发了多次中断   中断难道是电平触发?不是边沿触发?
像这种与延时没关系   除非你在中断服务函数入口关掉中断  最后打开中断
加了一级for循环程序跑飞就不理解了

使用特权

评论回复
地板
wangch_sh|  楼主 | 2014-2-27 14:27 | 只看该作者
是边沿触发,可是按键抖动会出现好几个沿啊!

使用特权

评论回复
5
zhangmangui| | 2014-2-27 16:18 | 只看该作者
wangch_sh 发表于 2014-2-27 14:27
是边沿触发,可是按键抖动会出现好几个沿啊!

那你就进入中断后关闭中断   执行完再次打开中断看看

使用特权

评论回复
6
zhangmangui| | 2014-2-27 16:23 | 只看该作者
wangch_sh 发表于 2014-2-27 14:27
是边沿触发,可是按键抖动会出现好几个沿啊!

刚帮你确认了一下   是边沿触发  我这边使用中了硬件防抖按一次就触发一次

使用特权

评论回复
7
wangch_sh|  楼主 | 2014-2-27 18:38 | 只看该作者
谢谢版主,解决了。增大heap,stack就可以了。

使用特权

评论回复
8
yangmm11| | 2014-11-10 18:21 | 只看该作者
wangch_sh 发表于 2014-2-27 18:38
谢谢版主,解决了。增大heap,stack就可以了。

我想问一下这个程序中,外部中断是按下EXINT键,那这个按键和INT0中断有什么联系呢?电路图中INT0按钮与EXINT键也没有连接。。。 5509开发板原理图(1).pdf (61.26 KB)
下面是程序:
/* This is an example for EMIF of C5509                                                                                  */
/*----------------------------------------------------------------------------*/
#include <csl.h>
#include <csl_irq.h>

#include <csl_pll.h>
#include <csl_emif.h>
#include <csl_chip.h>
#include <stdio.h>

CSLBool b;

Uint16 eventId0;
int old_intm;

interrupt void int1(void);

//---------Function prototypes---------

/* Reference start of interrupt vector table   */

/* This symbol is defined in file, vectors_IP.s55 */

extern void VECSTART(void);


/*锁相环的设置*/
PLL_Config  myConfig      = {
  0,    //IAI: the PLL locks using the same process that was underway
                //before the idle mode was entered
  1,    //IOB: If the PLL indicates a break in the phase lock,
                //it switches to its bypass mode and restarts the PLL phase-locking
                //sequence
  12,    //PLL multiply value; multiply 12 times
  1             //Divide by 2 PLL divide value; it can be either PLL divide value
                //(when PLL is enabled), or Bypass-mode divide value
                //(PLL in bypass mode, if PLL multiply value is set to 1)
};


/***************5509A中断设置,使能INT1中断***********************/
/*参考资料: TMS320C55x Chip Support Library API Reference Guide (Rev. J)
             TMS320VC5509A Data Sheet
                         HX-5509A 开发板使用手册                            */
void INTconfig()
{
    /* Temporarily disable all maskable interrupts */

    IRQ_setVecs((Uint32)(&VECSTART));

        /* Temporarily disable all maskable interrupts */

    old_intm = IRQ_globalDisable();

        /* Get Event Id associated with External INT0(8019), for use with */
        eventId0 = IRQ_EVT_INT0;

        /* Clear any pending INT0 interrupts */

        IRQ_clear(eventId0);

        /* Place interrupt service routine address at */

    /* associated vector location */

    IRQ_plug(eventId0,&int1);

        /* Enable INT0(8019) interrupt */

    IRQ_enable(eventId0);

        /* Enable all maskable interrupts */

    IRQ_globalEnable();   
}

main()
{
        /*初始化CSL库*/       
    CSL_init();

    /*EMIF为全EMIF接口*/
    CHIP_RSET(XBSR,0x0a01);

    /*设置系统的运行速度为144MHz*/
    PLL_config(&myConfig);  

        //设置并使能5509A芯片的INT0中断(EXINT中断)
        INTconfig();

        while(1);
}

//External INT0(EXINT)中断处理函数
interrupt void int1()
{
    printf("EXINT ouccers\n");
}



使用特权

评论回复
9
yangmm11| | 2014-11-10 18:22 | 只看该作者
yangmm11 发表于 2014-11-10 18:21
我想问一下这个程序中,外部中断是按下EXINT键,那这个按键和INT0中断有什么联系呢?电路图中INT0按钮与E ...

还有就是中断向量表中的b是什么意思?

*

* Copyright (C) 2003 Texas Instruments Incorporated

* All Rights Reserved

*

*

*---------vectors_dma2.s55---------

*

* Assembly file to set up interrupt vector table

*



        .sect ".vectors"



*------------------------------------------------------------------------------

* Global symbols defined here and exported out of this file

*------------------------------------------------------------------------------



        .global _VECSTART



*------------------------------------------------------------------------------

* Global symbols referenced in this file but defined somewhere else.

* Remember that your interrupt service routines need to be referenced here.

*------------------------------------------------------------------------------

        .ref _c_int00



      .def nmi, int0, int1, int2, int3, int4, int5, int6

      .def int7, int8, int9, int10, int11, int12, int13

      .def int14, int15, int16, int17, int18, int19, int20

      .def int21, int22, int23, int24, int25, int26, int27

      .def int28, int29



_VECSTART:

        .ivec _c_int00,c54x_stk

nmi     .ivec no_isr

        nop_16

int0    .ivec no_isr

        nop_16

int1    .ivec no_isr

        nop_16

int2    .ivec no_isr

        nop_16

int3    .ivec no_isr

        nop_16

int4    .ivec no_isr

        nop_16

int5    .ivec no_isr

        nop_16

int6    .ivec no_isr

        nop_16

int7    .ivec no_isr

        nop_16

int8    .ivec no_isr

        nop_16

int9    .ivec no_isr

        nop_16

int10   .ivec no_isr

        nop_16

int11   .ivec no_isr

        nop_16

int12   .ivec no_isr

        nop_16

int13 .ivec no_isr

        nop_16

int14   .ivec no_isr

        nop_16

int15   .ivec no_isr

        nop_16

int16   .ivec no_isr

        nop_16

int17   .ivec no_isr

        nop_16

int18   .ivec no_isr

        nop_16

int19   .ivec no_isr

        nop_16

int20   .ivec no_isr

        nop_16

int21   .ivec no_isr

        nop_16

int22   .ivec no_isr

        nop_16

int23   .ivec no_isr

        nop_16

int24   .ivec no_isr

        nop_16

int25   .ivec no_isr

        nop_16

int26   .ivec no_isr

        nop_16

int27   .ivec no_isr

        nop_16

int28   .ivec no_isr

        nop_16

int29   .ivec no_isr

        nop_16



*------------------------------------------------------------------------------

* This is a dummy interrupt service routine used to initialize the IST.

*------------------------------------------------------------------------------

        .text

        .def no_isr

no_isr:

        b #no_isr
*------------------------------------------------------------------------------

使用特权

评论回复
10
wangch_sh|  楼主 | 2014-11-10 18:59 | 只看该作者
b应该是跳转指令吧。

使用特权

评论回复
11
wangch_sh|  楼主 | 2014-11-10 19:00 | 只看该作者
按键那个你查查手册吧,我没仔细研究过。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:为江山踏坏了乌骓马,为社稷拉断了宝雕弓。

318

主题

2817

帖子

5

粉丝