您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 技术讨论区 -> [求助]将itu656格式的数据通过ppi送到bf592... 
本帖共有662个阅读者
发表帖子 发表投票 回复主题
[求助]将itu656格式的数据通过ppi送到bf592里面的SRAM(现在只需一行进入)
amusingchao(论坛新手)
amusingchao
头衔:社区公民
帮派:无帮无派
帖数:7
金钱:141
积分:7
注册时间:2014/6/12
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]将itu656格式的数据通过ppi送到bf592里面的SRAM(现在只需一行进入)
//只收集active field中的亮度信号,每一行产生中断,现在可以进中断,但是PPI_STATUS显示FIFO overflow error和PPI_count数与实际不匹配
Init_DMA()
{
    *pDMA0_START_ADDR = buffer1; //配置PPIDMA 数据起始地址
    *pDMA0_X_COUNT =720; //配置DMA 一行要传输多少次数据
    *pDMA0_X_MODIFY = 1; //配置每次传输行地址的增量
    *pDMA0_Y_COUNT =1;
    *pDMA0_Y_MODIFY = 1;
    *pDMA0_PERIPHERAL_MAP = 0x0;
    *pDMA0_CONFIG |= 0x00f3;                            
}
Init_PPI()
{
*pPPI_FRAME = 1;
*pPPI_CONTROL =0x43c1;
}
void main()
{

//其他省略
Init_Interrupts(); //Enter an interrupt subroutine after DMA has been finished
Init_DMA(); //DMA Setup "PPI->DMA->SDRAM" Its conigured in Sotp Mode
Init_PPI(); //PPI Setup



}

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/11/3 21:48:58
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你仅仅配置了DMA,并没有配置PPI,所以会产生错误。
另外,DMA使能和PPI使能需放到一个函数中,尽量使其同时执行,每配置一个使能,后面要加上ssynv(); 以告知系统让两个使能同步运行。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/11/3 22:43:23
amusingchao(论坛新手)
amusingchao
头衔:社区公民
帮派:无帮无派
帖数:7
金钱:141
积分:7
注册时间:2014/6/12
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
//PPI设置了,同步也加了,但是sram里面仍然全是0,PPI_status仍然是原来的错误
*pPPI_CONTROL =0x43c0;                     //0x43fc;GP mode//0x43c0;itu656 偶是
*pPPI_DELAY = 0; //配置时钟延时为0
*pPPI_COUNT = 720; //配置PPI 每行要传输480 次
*pPPI_FRAME = 1; //配置每帧图像有286 行

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/11/4 9:46:51
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
给你一个533上ITU656采集完整帧的代码:
void   Video_Frame_Capture(void)
{
*pPPI_FRAME =625;  
*pPPI_COUNT = 1439;
*pPPI_DELAY = 282;

*pPPI_CONTROL = 0x002c  ;

*pDMA0_START_ADDR = 0;
*pDMA0_X_COUNT = 720*2;
*pDMA0_X_MODIFY = 1;
*pDMA0_Y_COUNT = 625;
*pDMA0_Y_MODIFY = 1;
*pDMA0_PERIPHERAL_MAP = 0x0;
*pDMA0_CONFIG =  WNR | WDSIZE_8| DMA2D| DI_EN ;

*pDMA0_CONFIG |= DMAEN;
ssync();
*pPPI_CONTROL |= PORT_EN;
ssync();
}

你只采一行的话,只需要改这一句 *pDMA0_Y_COUNT = 1;
另外你需要看一下你的ITU656芯片,视频有效数据的高度是625还是525,如果是525,需将*pDMA0_Y_COUNT = 625; 改为525.
*pPPI_FRAME =625;   表示的是整帧的高度,这个不能改为1。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/11/5 21:41:02
amusingchao(论坛新手)
amusingchao
头衔:社区公民
帮派:无帮无派
帖数:7
金钱:141
积分:7
注册时间:2014/6/12
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
//那采集15行怎么做。中断这样可以吗?
EX_INTERRUPT_HANDLER(DMA0PPI_ISR)
{
*pDMA0_IRQ_STATUS = 0x1;//清除中断标志位
countt++;
*pDMA0_START_ADDR = buffer1+1440*countt;
PPI_DMA_Enable();
if(countt>14)
{countt=0;flagg=1;
//Init_PPI();
//Init_DMA();
  PPI_DMA_Disable();
  *pSIC_IMASK &= ~(0x00000100);

}
}


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/11/6 15:07:11
amusingchao(论坛新手)
amusingchao
头衔:社区公民
帮派:无帮无派
帖数:7
金钱:141
积分:7
注册时间:2014/6/12
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
15行dma和ppi怎么设



这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/11/6 17:10:01
amusingchao(论坛新手)
amusingchao
头衔:社区公民
帮派:无帮无派
帖数:7
金钱:141
积分:7
注册时间:2014/6/12
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
为何总是出现fifo overflow


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/11/7 16:42:28
amusingchao(论坛新手)
amusingchao
头衔:社区公民
帮派:无帮无派
帖数:7
金钱:141
积分:7
注册时间:2014/6/12
7信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
接收到的数据次序不对,是什么原因呢?ppi_status显示preamble error



「该帖子被 amusingchao 在 2014-11-07 17:36:08 编辑过」

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

*pDMA0_Y_COUNT = 1; 改为
*pDMA0_Y_COUNT = 15

不清楚为何,没遇到过你,你看看是不是你代码太大,内存溢出了。592代码量稍微大一点就溢出

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/11/8 21:48:09
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154423 Call, 3 Queries, Processed in 0.046875 second(s),