【飞思卡尔】鹰眼摄像头基础程序讨论

先在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);           //清除通道传输中断标志位
}

永不止步步 发表于09-18 10:08 浏览2885次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67409个|学分:271500个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号