您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [讨论]EPPI视频采集及输出
本帖共有625个阅读者
发表帖子 发表投票 回复主题
[讨论]EPPI视频采集及输出
mathslee(论坛新手)
mathslee
头衔:社区公民
帮派:无帮无派
帖数:35
金钱:421
积分:43
注册时间:2013/9/23
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[讨论]EPPI视频采集及输出
各位好!
我使用BF609两路的EPPI实现视频采集及输出,使用pingpong采集,pingpong输出,但是出现了有路DMA无法进入中断,只显示初始化指向的buf,代码如下,请大家指教,不胜感激!
adi_int_InstallHandler((uint32_t)INTR_EPPI1_CH0_DMA, EPPI1_DMA33_Handler, (void *)0, true);
adi_int_InstallHandler((uint32_t)INTR_EPPI2_CH0_DMA, EPPI2_DMA31_Handler, (void *)0, true);

配置好DMA33及PPI1能完成采集,
这个是采集的中断函数:
void EPPI1_DMA33_Handler(uint32_t iid, void* handlerArg)
{

*pREG_DMA33_STAT |= (uint32_t)ENUM_DMA_STAT_IRQDONE;
ssync();


if((Frame1Flag == 1))
{
*pREG_DMA33_ADDRSTART = InBuffer1;
ssync();

*pREG_DMA33_CFG |= ENUM_DMA_CFG_EN;
ssync();
Frame1done = 1;
}
else if((Frame1Flag == 2))
{
*pREG_DMA33_ADDRSTART = InBuffer2;
ssync();

*pREG_DMA33_CFG |= ENUM_DMA_CFG_EN;
ssync();
Frame2done = 1;
}
}

输入处理pingpong到输出的buf
配置好DMA31及PPI2能完成输出,
这个是输出的中断函数:

void EPPI2_DMA31_Handler(uint32_t iid, void* handlerArg)
{

*pREG_DMA31_STAT |= (uint32_t)ENUM_DMA_STAT_IRQDONE;
ssync();

if((Frame1empty==1)&&(Frame1Flag == 1))
{
            *pREG_DMA31_ADDRSTART = OutBuffer1;
            ssync();
            *pREG_DMA31_CFG |= ENUM_DMA_CFG_EN;
            ssync();
}
else if((Frame2empty==1)&&(Frame1Flag == 2))
{

           *pREG_DMA31_ADDRSTART =OutBuffer2;
           ssync();
           *pREG_DMA31_CFG |= ENUM_DMA_CFG_EN;
            ssync();
}
}



这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2015/1/8 13:15:39
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

你先单独试试看是不是每一路都能进入中断。

在第一路完成后,你先人为配置下关闭该DMA使能,然后看第二路能否进中断,如果不能,就将第二路整个DMA配置都初始化一下,理论上这样是可以进中断的,然后再查看这些寄存器,看与不进中断时有何不同。

在论坛下载区中,有个BF533上的乒乓例子,你可以参考下。



这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2015/1/8 22:18:16
mathslee(论坛新手)
mathslee
头衔:社区公民
帮派:无帮无派
帖数:35
金钱:421
积分:43
注册时间:2013/9/23
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
谢谢,andy!

单独都能进入,下面是参考BF533的例子,下面是代码,这样有问题吗?

我按这个代码写还是有问题,不输出图像,用了三个buffer,视频输出没有乒乓。

void EPPI1_DMA33_Handler(uint32_t iid, void* handlerArg)
{

*pREG_DMA33_STAT |= (uint32_t)ENUM_DMA_STAT_IRQDONE;
ssync();

if(Frame1Flag == 1)
{
Frame1done = 1;
}
else if(Frame1Flag == 2)
{
Frame2done = 1;
}
}

int main(void)
{
     Frame1Flag = 1;
     buffer2_empty=1;

    Init_DMA31_EPPI2();
    Init_DMA33_EPPI1();

    Enable_DMA33_EPPI1();
    Enable_DMA31_EPPI2();

    while(1)
    {     
        if(buffer1_done == 1)
        {
         buffer_flag = 2;
        if((buffer2_empty == 1)&&(buffer_flag == 2))
        {
       buffer2_empty = 0;
         *pREG_DMA33_ADDRSTART =&Inbuf2;  
         ssync();
*pREG_DMA33_CFG |= ENUM_DMA_CFG_EN;
ssync();
        }         
        ProcessImage(Inbuf1,Outbuf);//处理图像到输出buf
         buffer1_done = 0;
         buffer1_empty = 1;
        }
        else if(buffer2_done == 1)
        {
         buffer_flag = 1;
         if((buffer1_empty == 1)&&(buffer_flag == 1))
        {
       buffer1_empty = 0;
         *pREG_DMA33_ADDRSTART =&Inbuf1;
         ssync();
*pREG_DMA33_CFG |= ENUM_DMA_CFG_EN;
ssync();
        }
ProcessImage(Inbuf2,Outbuf);//处理图像到输出buf
         buffer2_done = 0;
         buffer2_empty = 1;
        }    
    }

}

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2015/1/11 16:15:37
mathslee(论坛新手)
mathslee
头衔:社区公民
帮派:无帮无派
帖数:35
金钱:421
积分:43
注册时间:2013/9/23
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
重新初始化可以了,谢谢各位!

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2015/1/13 17:51:53
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
恭喜

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