智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1447|回复: 4
打印 上一主题 下一主题

这个图中的黑道怎么破,求大神。

[复制链接]

2

主题

9

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2219
威望
1814
贡献
383
兑换币
30
注册时间
2016-3-23
在线时间
11 小时
毕业学校
武汉理工
跳转到指定楼层
1#
发表于 2016-4-16 21:10:41 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
这个图中的黑道怎么破,求大神。怎么破消隐区。
#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);
}

}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

20

主题

136

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1634
威望
828
贡献
432
兑换币
509
注册时间
2015-10-20
在线时间
187 小时
5#
发表于 2016-4-18 15:34:25 | 只看该作者
456789 发表于 2016-4-17 13:07
大神具体应该在哪个位置?我试着加了几个,但是还没下去

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

使用道具 举报

2

主题

9

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2219
威望
1814
贡献
383
兑换币
30
注册时间
2016-3-23
在线时间
11 小时
毕业学校
武汉理工
4#
 楼主| 发表于 2016-4-17 13:07:46 | 只看该作者
miaobrother 发表于 2016-4-16 22:48
行中断来的时候  给一段延时  再开始DMA采集

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

20

主题

136

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1634
威望
828
贡献
432
兑换币
509
注册时间
2015-10-20
在线时间
187 小时
3#
发表于 2016-4-16 22:48:33 | 只看该作者
行中断来的时候  给一段延时  再开始DMA采集
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2219
威望
1814
贡献
383
兑换币
30
注册时间
2016-3-23
在线时间
11 小时
毕业学校
武汉理工
2#
 楼主| 发表于 2016-4-16 21:11:47 | 只看该作者
#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);                    //禁止中断
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-26 15:14 , Processed in 0.071621 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表