智能车制作

标题: 这个图中的黑道怎么破,求大神。 [打印本页]

作者: 456789    时间: 2016-4-16 21:10
标题: 这个图中的黑道怎么破,求大神。
这个图中的黑道怎么破,求大神。怎么破消隐区。
#include "include.h"

U8 Image[240][320];
U16 i,j;

U8 THRESHOLD=65;  //判断黑白的门槛值
extern U16  ROW_num;
/*****************************************************************************/
/*                          初始化外部中断                                   */
/*****************************************************************************/
void init_exti(void)
{
    //设置PTA8的中断,采集VSYN场同步信号
    PORT_PCR_REG(PORTA_BASE_PTR,8)=PORT_PCR_MUX(1)   //作为GPIO使用
                                  |PORT_PCR_IRQC(9)  //上升沿触发中断
                                  |PORT_PCR_PE_MASK;  //使能下拉电阻
    GPIO_PDDR_REG(PTA_BASE_PTR) &= ~(1 << 8);       //输入模式

    //设置PTA9的中断,采集HREF行同步信号
    PORT_PCR_REG(PORTA_BASE_PTR,9)=PORT_PCR_MUX(1)   //作为GPIO使用
                                  |PORT_PCR_IRQC(9)  //上升沿触发中断
                                  |PORT_PCR_PE_MASK;  //使能下拉电阻
    GPIO_PDDR_REG(PTA_BASE_PTR) &= ~(1 << 9);       //输入模式   

    enable_irq(87);    //使能PTA口的中断功能
}

void delay(void)
{
    U16 k;
    for(k=0;k<5000;k++);
}


/*****************************************************************************/
/*                               主函数                                      */
/*****************************************************************************/
void main(void)
{
  DisableInterrupts;  
  //初始化OV7620的SCCB总线
  Init_SCCB();

  delay();
  SCCB_regWrite(0x42,0x14,0x24);      //设置采集分辨率为(320*240),
                                      //减小数据量,以便减小单片机的处理压力
  delay();
   //初始化串口
  Init_UART(0,115200);
  //初始化DMA,用于数据采集
  DMA_init(4, (void *)&GPIOB_PDIR, Image[ROW_num], 1, 320);
  DMA_ERQ &=~(DMA_ERQ_ERQ0_MASK<<4);  //先禁止DMA功能
  //初始化IO中断
  init_exti();
  EnableInterrupts;        //使能中断

  for(;;)
  {
    void delay(void);
      for(i=0;i<240;i+=2)    //每2行发送一行数据
      {
          for(j=0;j<320;j+=2)    //每两个像素发送一个
          {

                UART_send(0,Image[i][j]);

          }

      }

      UART_send(0,0xff);
}

}


作者: 456789    时间: 2016-4-16 21:11
#include "isr.h"
#include "DMA.h"

extern U8 Image[240][320];

U16  ROW_num=0;
U8   VSYNsingle=0;

/*****************************************************************************/
/*                          PORTA中断处理函数                                */
/*****************************************************************************/
void PORTA_isr(void)
{
    //VSYN场中断
    if(PORTA_ISFR & (1 << 8))         //PTA8触发中断
    {
        PORTA_ISFR  |= (1 <<8);       //写1清中断标志位
        ROW_num = 0;
        VSYNsingle = 1;
    }
   
    //HREF行中断
    if(PORTA_ISFR & (1 << 9))         //PTA9触发中断
    {
        PORTA_ISFR  |= (1 << 9);       //写1清中断标志位
         if(VSYNsingle==1)
         {
            //初始化DMA,源地址为PTB,目标地址为Image数组
            //DMA_init(4, (void *)&GPIOB_PDIR, Image[ROW_num], 1, 320);
            DMA_DADDR(4)=(U32)Image[ROW_num];  //指定DMA的目的地址
            DMA_ERQ |= (DMA_ERQ_ERQ0_MASK<<4); //使能DMA4功能
            enable_irq(4);                     //使能DMA4中断
            
            ROW_num+=1;
            
           if(ROW_num>=240)     //采集完一幅图像
           {
                ROW_num=0;
                VSYNsingle=0;
            }
        }

    }
}

/*****************************************************************************/
//                       DMA通道4中断函数                                 
/*****************************************************************************/
void DMA_CH4_isr(void)
{
    //DMA通道4
    DMA_INT|=(DMA_INT_INT4_MASK) ;     //清除通道传输中断标志位
    disable_irq(4);                    //禁止中断
}
作者: miaobrother    时间: 2016-4-16 22:48
行中断来的时候  给一段延时  再开始DMA采集
作者: 456789    时间: 2016-4-17 13:07
miaobrother 发表于 2016-4-16 22:48
行中断来的时候  给一段延时  再开始DMA采集

大神具体应该在哪个位置?我试着加了几个,但是还没下去

作者: miaobrother    时间: 2016-4-18 15:34
456789 发表于 2016-4-17 13:07
大神具体应该在哪个位置?我试着加了几个,但是还没下去

。。。。就是每进入行中断,给个十几微妙的延时就行啦,你主频是200M?




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