【问题标题】:ADI BF533 programmable flag interruptADI BF533 可编程标志中断
【发布时间】:2011-10-24 22:14:17
【问题描述】:

当我按下 PF8 按钮时,我希望 blackfin 进入 ISR 并且计数器增加 1。 我应该清除或设置一个表明处理器已进入ISR的位,但我不知道如何清除它。

我的处理器是BF533。

这是我的代码:

    // prototype
EX_INTERRUPT_HANDLER(FlagA_ISR);

volatile int count = 0;

void main(void)
{

     // Register FlagA ISR to interrupt vector group 12
     register_handler(ik_ivg12, FlagA_ISR);

     // set direction of programmable flag PF8 to input
     *pFIO_DIR &= ~PF8;
     ssync();

     // interrupt enable PF8
     *pFIO_INEN |= PF8;
     ssync();     

     // give interrupt when FIO_FLAG_D PF8 changes
     *pFIO_MASKA_D |= PF8;
     ssync();


     // Bind FlagA interrupt to IVG12
     *pSIC_IAR2 |= 0x00005000; // flag A IVG12
     ssync();


     // Enable PFA in system interrupt mask register
     *pSIC_IMASK = 0x00080000;
     ssync();

     // enable IVG12 in core interrupt mask register
     *pIMASK |= 0x00001000;
     ssync();

     // wait for interrupt
     while(count < 5);
        printf("5 interrupts received");
}

EX_INTERRUPT_HANDLER(FlagA_ISR)
{     
     count++;

     // Needed to clear or set a bit to indicate that the processor has entered the ISR
}

【问题讨论】:

  • 您的格式已损坏,请修复它 - 使用 {} 按钮并检查预览。此外,您还没有说明为什么您必须设置或清除位,这是由大多数系统上的编译器或处理器自动完成的。
  • @Kevin Vermeer 下次我会注意格式。但是编译器没有做任何事情。
  • 请使用问题上的“编辑”按钮这次修复它。当其他人遇到同样的问题并来到这里时,他们将受益于格式正确的内容。

标签: embedded interrupt


【解决方案1】:

我刚刚想出了如何解决这个问题。

PFx 连接到 FIO_FLAG。我们可以通过清除 FIO_FLAG 来清除我们的中断状态。

代码如下:

*pFIO_FLAG_D &= ~PF8;
ssync();
//or, you can try:
*pFIO_FLAG_C |= PF8; 
ssync();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 2021-01-25
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    相关资源
    最近更新 更多