您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 【已解决】BF548  多个GPIO中断初始化问题
本帖共有419个阅读者
发表帖子 发表投票 回复主题
【已解决】BF548 多个GPIO中断初始化问题
木杉是彬彬(论坛新手)
木杉是彬彬
头衔:社区公民
帮派:无帮无派
帖数:14
金钱:227
积分:21
注册时间:2015/9/15
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
【已解决】BF548 多个GPIO中断初始化问题

使用BF548的PA10,PA12引脚作为外部IO中断触发,两个共用PIN1中断,同一优先级ivg8。单独初始化一个没问题,两个都初始化,只有一个能进中断ISR。

*pPINT1_ASSIGN的设置是不是有问题?不知道该如何设置

EX_INTERRUPT_HANDLER(IsrPA10)
{
*pPINT1_REQUEST = PA10;
gui_Pb9cnt++;
}

void drv_IO_0_InterruptInit(void)
{    
  
   //register interrupt routine
    register_handler(ik_ivg8, IsrPA10);
    //assign PINT1 interrupt to IVG8
    *pSIC_IAR2 &= 0xFFF0FFFFL;
    *pSIC_IAR2  = 1<<16;    
    *pSIC_IMASK0 = IRQ_PINT1;

    //enable the PB8 input driver
    *pPORTA_INEN = PA10;
    //assign PB8 to PINT0 byte 1
    *pPINT1_ASSIGN = B1MAP_PAH;

    //set to raising edge sensitivity
    *pPINT1_INVERT_CLEAR = PA10;
    *pPINT1_EDGE_SET = PA10;

    //W1C potential latches due to history
    *pPINT1_LATCH = PA10;

    //unmask interrupts
    *pPINT1_MASK_SET = PA10;

}

EX_INTERRUPT_HANDLER(IsrPA12)
{
*pPINT1_REQUEST = PA12;
gui_Pb9cnt++;
}

void drv_IO_1_InterruptInit(void)
{

  /* register interrupt routine */
    register_handler(ik_ivg8, IsrPA12);
    
    /* assign PINT1 interrupt to IVG12 */
    *pSIC_IAR2 &= 0xFFF0FFFFL;
    *pSIC_IAR2  = 1<<16;  
    
    *pSIC_IMASK0 = IRQ_PINT1;

    /* enable the PA12 input driver */
    *pPORTA_INEN = PA12;
    /* assign PA12 to PINT1 byte 1 */
    *pPINT1_ASSIGN = B1MAP_PBH;

    /* set to raising edge sensitivity */
    *pPINT1_INVERT_CLEAR  = PA12;
    *pPINT1_EDGE_SET   = PA12;
    //*pPINT0_EDGE_CLEAR = PB8;

    /* W1C potential latches due to history */
    *pPINT1_LATCH   = PA12;

    /* unmask interrupts */
    *pPINT1_MASK_SET  = PA12;

}


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2015/10/20 15:48:34
木杉是彬彬(论坛新手)
木杉是彬彬
头衔:社区公民
帮派:无帮无派
帖数:14
金钱:227
积分:21
注册时间:2015/9/15
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

只初始化中断1,能进中断1的isr;只初始化中断2,能进中断2的isr;如果1、2都初始化只能进1个中断的初始化,感觉是第2个初始化把第1个初始化的参数覆盖了。

不知道我PA10和PA12共用pin1 interrupt 是不是初始化参数哪里有问题?

哪位大神帮忙看看


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2015/10/20 17:47:25
木杉是彬彬(论坛新手)
木杉是彬彬
头衔:社区公民
帮派:无帮无派
帖数:14
金钱:227
积分:21
注册时间:2015/9/15
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
是不是pin1 interrupt 只能对应一个中断服务函数?

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2015/10/20 17:55:35
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
pSIC_IAR2    这个寄存器你在赋值时出现了两次 等号 赋值,而不是采用 或  方式赋值,这样会把之前的赋值清除。
若是不同管脚采用同一个中断源,只能对应一个中断注册函数,当进入中断函数时,采用查询法读取IO状态,当状态为1,表示这个管脚中断触发。

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