piaoran1314 发表于 2018-5-11 15:21:26

全功能智能车之无FIFO摄像头 DMA传送优化(第三篇)

无FIFO摄像头 DMA传送优化:
原来虽说是DMA传输,但是那是定时器定时触发DMA的,并不是根据摄像头的引脚信号触发的DMA,存在很多的不合理性,这次的程序是用摄像头PCLK引脚来触发DMA。
STM32F103的缺陷:
1.定时器没有回溯清除DMA请求标志的功能,也就是说要启用一个定时器触发中断,在该中断里清除自己的状态位,好让下次的DMA再次请求,
//定时器1触发中断服务程序   
void TIM1_TRG_COM_IRQHandler(void)
{   
    TIM_ClearITPendingBit(TIM1, TIM_IT_Trigger);//清除TIMx的中断待处理位:TIM 中断源   
}
2.FSMC没有的LCD没有DMA请求标志,而DMA_Mode_Circular模式每次的DMA传输就是一行的数据,但是最无奈的是LCD外设的速度远远跟不上DMA的速度,造成不能够用DMA把数据直接拷贝到LCD,这是十分坑爹的,十分,十分的无奈!!!!!!!!!
最后只能够在一行的像素数据采集完之后,用for循环把数据放到LCD里!这个有点偏离两个DMA的初衷,十分的无奈,DMA完成中断:
extern u8 Row;
void DMA1_Channel4_IRQHandler(void)
{
    u16 j;
    u16 color;
    DMA_ClearITPendingBit(DMA1_IT_GL4);
    for(j=0;j<320;j++)
    {
            color=Row;
            color<<=8;
            color|=Row;
            LCD->LCD_RAM=color;
    }
}
为了保证屏幕不会出现双屏现象,在行中断里归零LCD坐标:
//外部中断4服务程序即场同步信号HREF中断
void EXTI4_IRQHandler(void)
{            
    if(EXTI_GetITStatus(EXTI_Line4)!=RESET)//是3线的中断
    {   
          LCD_Scan_Dir(U2D_L2R);      //从上到下,从左到右
            LCD_SetCursor(0x00,0x0000);    //设置光标位置
            LCD_WriteRAM_Prepare();   //开始写入GRAM   
          LED0=!LED0;
    }
    EXTI_ClearITPendingBit(EXTI_Line4);//清除EXTI6线路挂起位                        
}
每次DMA传送一行数据,所以在行中断里重新使能DMA:
//外部中断3服务程序即行同步信号HREF中断
void EXTI3_IRQHandler(void)
{            
    if(EXTI_GetITStatus(EXTI_Line3)!=RESET)//是3线的中断
    {   
    MYDMA_Enable(DMA1_Channel3);            //TIM3的UPDATE对应DMA的通道3   开始一次DMA传输
    }
    EXTI_ClearITPendingBit(EXTI_Line3);//清除EXTI6线路挂起位                        
}

有图有真相,下面是本实验的图片:
http://img.blog.csdn.net/20151104150811523?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Centerhttp://img.blog.csdn.net/20151104150817804?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Centerhttp://img.blog.csdn.net/20151104150826234?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Centerhttp://img.blog.csdn.net/20151104150834848?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center


2016-03-24:
由于有网友反映不知道硬件连接怎么连,这里将我写在书上的笔记上传上来,这里再次说明用的开发板是原子公司的战舰开发板,这里将上传图片,怎么连接请大家仔细琢磨,如有疑问,请邮箱联系,QQ邮箱:384710930@qq.com    这里感谢网友关注。


http://img.blog.csdn.net/20160324221307207?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Centerhttp://img.blog.csdn.net/20160324221333667?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Centerhttp://img.blog.csdn.net/20160324221351036?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Centerhttp://img.blog.csdn.net/20160324221405902?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Centerhttp://img.blog.csdn.net/20160324221416364?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Centerhttp://img.blog.csdn.net/20160324221426590?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Centerhttp://img.blog.csdn.net/20160324221438395?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
如果看不清楚,这里看这里的的压缩文件里的图片
http://download.csdn.net/detail/chengdong1314/9471920



源码下载:
http://download.csdn.net/detail/chengdong1314/9235795


页: [1]
查看完整版本: 全功能智能车之无FIFO摄像头 DMA传送优化(第三篇)