智能车制作

标题: 鹰眼摄像头基础程序讨论 [打印本页]

作者: dss875914213    时间: 2016-9-15 13:24
标题: 鹰眼摄像头基础程序讨论
先在while(1)
里面写ov7725_eagle_get_img()
把PTB的中断打开ov7725_eagle_vsync(),然后等待场中断触发,再打开DMA中断,通过DMA接受数据。


有两个疑问,
1.感觉没有DMA中断关闭的程序,为什么每次都要开DMA啊。而且不关DMA,对其他程序没影响啊。
2.采集一副图像的时候,一直在
while(ov7725_eagle_img_flag != IMG_FINISH)           //等待图像采集完毕
循环里面傻等,感觉一直在浪费单片机的资源。(虽然,现在还不知道可以用这些时间干些什么)
求解释


void ov7725_eagle_get_img()
{
    ov7725_eagle_img_flag = IMG_START;                   //开始采集图像
    PORTB_ISFR = ~0;                        //写1清中断标志位(必须的,不然回导致一开中断就马上触发中断)(改B)
    enable_irq(PORTB_IRQn);                         //允许PTB的中断
    while(ov7725_eagle_img_flag != IMG_FINISH)           //等待图像采集完毕
    {
        if(ov7725_eagle_img_flag == IMG_FAIL)            //假如图像采集错误,则重新开始采集
        {
            ov7725_eagle_img_flag = IMG_START;           //开始采集图像
            PORTB_ISFR = ~0;                //写1清中断标志位(必须的,不然回导致一开中断就马上触发中断)
            enable_irq(PORTB_IRQn);                 //允许PTB的中断
        }
    }
}

void ov7725_eagle_vsync(void)
{

    //场中断需要判断是场结束还是场开始
    if(ov7725_eagle_img_flag == IMG_START)                   //需要开始采集图像
    {
        ov7725_eagle_img_flag = IMG_GATHER;                  //标记图像采集中
        disable_irq(PORTB_IRQn);

#if 1

        PORTB_ISFR = 1 <<  PT21;            //清空PCLK标志位(改PB21)

        DMA_EN(CAMERA_DMA_CH);                  //使能通道CHn 硬件请求
        PORTB_ISFR = 1 <<  PT21;            //清空PCLK标志位(改PB21)
        DMA_DADDR(CAMERA_DMA_CH) = (uint32)ov7725_eagle_img_buff;    //恢复地址

#else
        PORTB_ISFR = 1 <<  PT21;            //清空PCLK标志位
        dma_repeat(CAMERA_DMA_CH, (void *)&PTC_B0_IN, (void *)ov7725_eagle_img_buff,CAMERA_DMA_NUM);
#endif
    }
    else                                        //图像采集错误
    {
        disable_irq(PORTB_IRQn);                        //关闭PTB的中断
        ov7725_eagle_img_flag = IMG_FAIL;                    //标记图像采集失败
    }
}

void ov7725_eagle_dma()
{
    ov7725_eagle_img_flag = IMG_FINISH ;
    DMA_IRQ_CLEAN(CAMERA_DMA_CH);           //清除通道传输中断标志位
}







作者: zhou1994    时间: 2016-9-16 15:27
不明觉厉
作者: YFKJ    时间: 2016-9-16 18:23
有想法试试不就知道了
作者: 渔樵    时间: 2016-9-17 11:06
要是有路径识别的程序模块就更好了!:P:P
作者: 铝、不想生锈    时间: 2016-9-19 19:21
我们把等待采集完成的while移到了开始采集的前面,这样DMA和主循环就同时在走了。
作者: 小蚩尤    时间: 2016-9-26 19:25
行中断触发一次,DMA就采集一列的数据,DMA的触发源就是行中断啊!接收完之后DMA自动关闭,下一次触发需要重新开启中断
作者: 小蚩尤    时间: 2016-9-26 19:27
采集是DMA来完成的,你可以采集一行处理一行,也可以采完了再处理,不需要在主循环里等待
作者: 何文    时间: 2016-10-1 21:29
感谢分享
作者: shadow_child    时间: 2016-10-3 09:09
实践出真知

作者: master“小军“    时间: 2016-11-1 20:26
很好的,可以了解了解。
作者: master“小军“    时间: 2016-11-8 17:47
鹰眼摄像头基础程序




欢迎光临 智能车制作 (http://www.znczz.com/) Powered by Discuz! X3.2