您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 关于SPORT接口的中断问题
本帖共有707个阅读者
发表帖子 发表投票 回复主题
关于SPORT接口的中断问题
ReedXu(论坛新手)
ReedXu
头衔:社区公民
帮派:无帮无派
帖数:6
金钱:160
积分:10
注册时间:2013/3/14
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
关于SPORT接口的中断问题

我想求证一个问题,是不是BF533的SPORT RX和TX中断不能同时开启(当然不是指同时发生)我将初始化函数写成这样写

void Init_Interrupts(void)
{
// Set Sport0 RX (DMA1) interrupt priority to 2 = IVG9
*pSIC_IAR0 = 0xffffffff;
*pSIC_IAR1 = 0xfffff22f;
*pSIC_IAR2 = 0xffffffff;

// assign ISRs to interrupt vectors
// Sport0 RX ISR -> IVG 9
register_handler(ik_ivg9, Sport0_RX_ISR);

register_handler(ik_ivg9, Sport0_TX_ISR);

// enable Sport0 RX interrupt
*pSIC_IMASK = 0x00000600;
}

结果只有 Sport0_RX_ISR好使,而将初始化函数写成

void Init_Interrupts(void)
{
// Set Sport0 RX (DMA1) interrupt priority to 2 = IVG9
*pSIC_IAR0 = 0xffffffff;
*pSIC_IAR1 = 0xfffff22f;
*pSIC_IAR2 = 0xffffffff;

// assign ISRs to interrupt vectors
// Sport0 RX ISR -> IVG 9
register_handler(ik_ivg9, Sport0_RX_ISR);

register_handler(ik_ivg10, Sport0_TX_ISR);

// enable Sport0 RX interrupt
*pSIC_IMASK = 0x0000060
}结果还是只有 Sport0_RX_ISR好使,我尝试将DMA1(对应 Sport0_RX)在完成相应功能后不使能(即*pDMA1-COFIG=0x0000;)发现还是解决不了这个问题


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/3/18 23:38:57
blackfin(论坛游民)
blackfin
头衔:社区公民
帮派:无帮无派
帖数:114
金钱:1105
积分:153
注册时间:2011/6/10
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
RX和TX是共享同一中断的。

void Init_Interrupts(void)
{
// Set Sport0 RX (DMA1) interrupt priority to 2 = IVG9
。。。。。。。。。

// assign ISRs to interrupt vectors
// Sport0 RX ISR -> IVG 9
register_handler(ik_ivg9, Sport0_ISR);

// enable Sport0 RX interrupt
。。。。。。。。。。。
}

然后再到Sport0_ISR中断服务中,区分是发送中断还是接收中断的!

EX_INTERRUPT_HANDLER(Sport0_ISR)

/* sport0接收中断 */

    if (0x00000200 == (0x00000200 & *pSIC_ISR))    

    {

        *pDMA1_IRQ_STATUS = 0x0001;

        

        /* 处理  */

        ..........................    

    }

    /* sport0发送中断 */

    if (0x00000400 == (0x00000400 & *pSIC_ISR))    

    {

        *pDMA2_IRQ_STATUS = 0x0001;

        /* 处理  */

        ..........................

    }  

}


这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2013/3/19 8:09:18
ReedXu(论坛新手)
ReedXu
头衔:社区公民
帮派:无帮无派
帖数:6
金钱:160
积分:10
注册时间:2013/3/14
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

那我的初始化设置是不是还应该是这样的呢?

void Init_Interrupts(void)
{
// Set Sport0 RX (DMA1) interrupt and Sport0 TX (DMA2) interrupt  priority  to 2 = IVG9
*pSIC_IAR0 = 0xffffffff;
*pSIC_IAR1 = 0xfffff22f;
*pSIC_IAR2 = 0xffffffff;

// assign ISRs to interrupt vectors
// Sport0  ISR -> IVG 9
register_handler(ik_ivg9, Sport0_ISR);

// enable Sport0 RX interrupt and Sport0 TX interrupt
*pSIC_IMASK = 0x00000600;
}


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/3/19 9:57:59
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你把sport发送的中断等级设置为9,把接受设置为10,用不同的中断等级看看

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