您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 求代码解释
本帖共有744个阅读者
发表帖子 发表投票 回复主题
求代码解释
unconscious(论坛新手)
unconscious
头衔:社区公民
帮派:无帮无派
帖数:67
金钱:746
积分:86
注册时间:2013/8/2
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
求代码解释

void Init_Timers(void)
{  

    *pTIMER0_PERIOD        = 525;  
    *pTIMER0_WIDTH         = 41;        
    *pTIMER0_CONFIG        = 0x00a9;
    *pTIMER1_PERIOD        = 150150;  
    *pTIMER1_WIDTH         = 5250;      
    *pTIMER1_CONFIG        = 0x00a9;
    *pTIMER_ENABLE         = 0x0002;  

}

1、这个是BF533的CMOS驱动里的代码,我不懂 *pTIMER0_WIDTH 和*pTIMER1_WIDTH值是怎么确定的?为什么是41和5250?  

2、还有,我想用UART串口输出采集到的图像数据,定义一个buffer,直接在DMA设置中设置*pDMA0_START_ADDR = &buffer[0];

    然后在主函数中打印输出这个buffer里的数据可以吗?还是需要用到UART的DMA模式?

谢谢!


^_^
等级:论坛新手 参考IP地址:*.*.*.*
2013/9/10 15:01:53
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
1. 这个代码是480*272液晶屏的代码,不是CMOS的.详细配置说明:
2. 你的打印如果是串口打印,打印数据入口为该buffer地址,可以使用.但直接使用printf不行,默认的printf是通过仿真器打印在VDSP 窗口内的,速度很慢。

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

1、我查阅了OV7725的数据手册,根据VGA的时序图得到

    *pTIMER0_PERIOD        = 784;
    *pTIMER0_WIDTH        = 64;  
    *pTIMER1_PERIOD        = 399840; //510*784
    *pTIMER1_WIDTH        = 3136; //4*784

请问按照时序图我得到的对吗?不是很确定。我用FS1接的摄像头的HSYNC,FS2接的VSYNC.

2、程序没有进下面的中断

EX_INTERRUPT_HANDLER(DMA0_PPI_ISR)
{    
        *pDMA0_IRQ_STATUS = 0x1;  
        //*pPPI_CONTROL &= 0xfffe;   //16bit data
        *pPPI_CONTROL &= 0xc7fe;     //8bit data
        DEBUG_STATEMENT( "\nSuccess Capture One Frame:  640 * 480\n");
        DEBUG_STATEMENT( "                          YUV422 Format\n" );
}

在Video_Frame_Capture()函数中设置

    *pDMA0_START_ADDR = (void *)&databuf[0];

    然后直接打印该地址数据,输出的数据全部为0,是因为没有进上面的中断所以接口没有输出,还是这个地址寄存器需要其他设置?

    我是用Visual DSP++ 下面的post_debug.h中的DEBUG_PRINT函数做串口输出的。

    刚接触这方面,很多不懂,麻烦帮忙看下,谢谢andy  

3、还有个问题,我用到的所有的数据PF、同步信号PG接口是不是都要在Setup_Flags()函数中做初始化,设置其使能,方向等?程序是在

   BF533的CMOS例程中改的。




「该帖子被 unconscious 在 2013-09-16 16:35:21 编辑过」

^_^
等级:论坛新手 参考IP地址:*.*.*.*
2013/9/16 14:50:25
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
1.OV7725的行场同步是输出给DSP的,PPI只需要采集这个同步即可,无需TIMER配置输出同步。给你一个BF533上的配置参考:
#define PORT_CFG_2_3_EXT_FS 0x00000020
#define XFR_TYPE_NON_ITU656 0x0000000C

*pPPI_FRAME = 480;  
*pPPI_COUNT = 1279;
*pPPI_DELAY =2;
// *pPPI_CONTROL = 0x01AC;
*pPPI_CONTROL =   PACK_EN | DLEN_8 | PORT_CFG_2_3_EXT_FS | XFR_TYPE_NON_ITU656;
*pDMA0_START_ADDR = 0;
*pDMA0_X_COUNT = 640;
*pDMA0_X_MODIFY = 0x2;
*pDMA0_Y_COUNT = 480;
*pDMA0_Y_MODIFY = 0x2;
*pDMA0_PERIPHERAL_MAP = 0x0;
*pDMA0_CONFIG =  WNR | WDSIZE_16| DMA2D | RESTART | DI_EN;
*pDMA0_CONFIG |= DMAEN;
ssync();
*pPPI_CONTROL |= PORT_EN;
ssync();

2. 没有配合好PPI和DMA,不会采集到数据,当然不会进入中断。

3. 不需要,只需要配置好你的接口所使用的功能就可以了,无需在IO寄存器中配置他的IO方向。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/9/16 18:35:56
unconscious(论坛新手)
unconscious
头衔:社区公民
帮派:无帮无派
帖数:67
金钱:746
积分:86
注册时间:2013/8/2
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
可以进中断了,是我把PG接口的PORTG_MUX寄存器没设置好。
又有一个问题,我用post_debug.h中的Debug_PRINT函数从串口输出采集到的数据,如下:
    for(i = 0; i <= IMAGE_SIZE; i++)     //IMAGE_SIZE = 640*480
       {
          DEBUG_PRINT("%d ",databuf[i]);  // *pDMA0_START_ADDR = databuf;
          if((i+1)%IMAGE_WIDTH == 0)     //IMAGE_WIDTH = 640
              DEBUG_STATEMENT("\n");
       }
以上代码的结果是每一个像素的数据打印了两遍,去掉if((i+1)%IMAGE_WIDTH == 0)和DEBUG_STATEMENT("\n")两行,就打印一遍正确,不知道为什么。。

^_^
等级:论坛新手 参考IP地址:*.*.*.*
2013/9/17 16:18:33
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
不清楚,代码看不出什么,你最好能通过仿真器看看内存中采集到了什么数据,是不是采集就是如此。
或者单步跟一下代码,看看什么原因,也许是打印未完成,又跳进中断。单从几句代码,没法分析

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/9/19 0:05:46
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159235 Call, 1 Queries, Processed in 0.046997 second(s),