智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2583|回复: 10
打印 上一主题 下一主题

ColdFire图像滚动

[复制链接]

4

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
257
威望
146
贡献
67
兑换币
80
注册时间
2013-3-15
在线时间
22 小时
毕业学校
USTC
跳转到指定楼层
1#
发表于 2013-7-5 20:07:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的Coldfire的EPORT来接受场中断和行中断。
用的是OV6620.
奇数场读摄像头数据,偶数场把前面读到得数据写到sd卡。

奇怪的是,图像总是向上滚动。滚了两天了。。。搞不定。用的是CodeWarrior

猜测,最直接的原因是,场中断函数的执行不是按照摄像头给的信号去执行的。就是,摄像头给了我场中断信号,但是我没有理他,而是继续干自己的事,等我去执行场中断时(干完自己的事会马上进场中断,因为中断标志总会被置),以为摄像头正在发第一行的数据,其实他已经发了好几行,不过我都丢掉了。或者,我一退出场中断马上就又进去了,没等摄像头给我发中断信号。
这样图像就会滚动。

然后觉得是没有清除中断标志,但是我已经清了。

然后觉得是写sd卡的时间太长,导致我“欠”着一个场中断,等我去真正执行的时候已经晚了几行。但是我少写一个扇区,情况没有什么变化。还是滚。

到底怎么回事呢?
不知道同志们有没有遇到过类似的问题。有用ColdWarrior的吧?我刚学这个片子(以前是xs128),不知道用这个Coldfire有什么需要注意的问题。尤其是中断方面的。



/*行中断 P5*/
__declspec(interrupt:0) void EPORT_irq5_handler(void)
{
       
        MCF_EPORT_EPFR|=MCF_EPORT_EPFR_EPF5;//清除中断标志
       
//        return ;
       
  MCF_EPORT_EPIER &= ~MCF_EPORT_EPIER_EPIE5;//两个中断都禁止掉(貌似中断标志仍然会被置,等使能了中断马上会去执行)
  MCF_EPORT_EPIER &= ~MCF_EPORT_EPIER_EPIE7;
  
  cLine++;

  if(cLine>120){//6620:352*288隔行扫描?????。7620:640*480隔行扫描。//大于120行,下面不要了。
      MCF_EPORT_EPIER |= MCF_EPORT_EPIER_EPIE7;
      return;
  }
  
  cmd=cLine%4;
  curLine=cLine/4;
  
  
  switch(cmd){
   
    case 0:{//采集
      CaiJi();
      break;
    }
    case 1:{//二值化
      ErZhiHua();
      break;
    }

    case 2:{
       //ZuoBianJie();//左边界
       //YouBianJie();//右边界
   
      break;
      
    }

    /*case 3:{
        border[curLine][0]=iLeft;
            border[curLine][1]=iRight;
                  border[curLine][3]=(iRight-iLeft);
                  iMiddle=(iLeft+iRight)/2;
                  border[curLine][2]=iMiddle;
                  //for(i=0;i<40;i++)uart_putchar(1,line[i]);
       break;
        }*/
        default:
                break;
  }
  
    MCF_EPORT_EPIER |= MCF_EPORT_EPIER_EPIE5; //最后把行中断再使能。
       

}

/*场中断 P7*/
__declspec(interrupt:0) void EPORT_irq7_handler(void)
{
       
        MCF_EPORT_EPFR|=MCF_EPORT_EPFR_EPF7;//清除场中断标志

       
  MCF_EPORT_EPIER &= ~MCF_EPORT_EPIER_EPIE5;//两个中断都禁掉
  MCF_EPORT_EPIER &= ~MCF_EPORT_EPIER_EPIE7;
   
   flagCameraorSD ^= 1;//如果是0,就读摄像头,如果是1,就写sd卡。

  if(!flagCameraorSD){// it is camera
                                      uart_putchar(1,0xee);
    cField++;
    cLine=-1;
   
    MCF_EPORT_EPIER |= MCF_EPORT_EPIER_EPIE5;使能行中断
   
  }else{
   //电机和舵机控制
  // uart_putchar(1,0x22);
  // DianJiKongZhi();
  // DuoJiKongZhi();
   
   
    //写入SD卡
    pgraph=(byte *)graph;
    *pgraph++=0b01010101;
    *pgraph++=cField>>8;
    *pgraph++=(byte)cField;
    pgraph=(byte *)graph;
   
    for(i=0;i<2;i++){//写入sd卡
      _io_sdcard_spi_write_block(&sdcard_struct,pgraph,RdWrAdd+3*cField+i);
      pgraph+=512;
    }
   
    MCF_EPORT_EPIER |= MCF_EPORT_EPIER_EPIE7;//使能场中断,等下一场到了就去读摄像头
   
  }
}


都快比赛了还在纠结硬件,真是捉鸡。

4

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
257
威望
146
贡献
67
兑换币
80
注册时间
2013-3-15
在线时间
22 小时
毕业学校
USTC
2#
 楼主| 发表于 2013-7-5 20:10:02 | 只看该作者
下面是初始化中断函数的部分。

void EPORT_init(void)
{
        MCF_GPIO_PNQPAR = MCF_GPIO_PNQPAR_IRQ1_IRQ1
                                     |MCF_GPIO_PNQPAR_IRQ3_IRQ3
                                     |MCF_GPIO_PNQPAR_IRQ5_IRQ5
                                     |MCF_GPIO_PNQPAR_IRQ7_IRQ7;
//pin assignment register:FALLING LEVEL RISING BOTH                          
        MCF_EPORT_EPPAR = MCF_EPORT_EPPAR_EPPA1_FALLING
                                          |MCF_EPORT_EPPAR_EPPA3_FALLING
                                          |MCF_EPORT_EPPAR_EPPA5_RISING
                                         |MCF_EPORT_EPPAR_EPPA7_FALLING;
//data direction register
        MCF_EPORT_EPDDR =(uint8)~MCF_EPORT_EPDDR_EPDD1
                                         &~MCF_EPORT_EPDDR_EPDD3
                                         &~MCF_EPORT_EPDDR_EPDD5
                                         &~MCF_EPORT_EPDDR_EPDD7;

//data register:hold the data to be driven to the pins
        MCF_EPORT_EPDR = MCF_EPORT_EPDR_EPD1
                                      |MCF_EPORT_EPDR_EPD3
                                      |MCF_EPORT_EPDR_EPD5
                                      |MCF_EPORT_EPDR_EPD7;
//data register:reflects the current state of the pins READ ONLY
//        MCF_EPORT_EPPDR

                                  
//set interrupt enable                                  
        MCF_INTC0_IMRL&=~MCF_INTC_IMRL_MASKALL;
        MCF_INTC0_IMRL&=~MCF_INTC_IMRL_INT_MASK1 //EPORT interrupt source 1
                                   &~MCF_INTC_IMRL_INT_MASK3 //EPORT interrupt source 3
                                   &~MCF_INTC_IMRL_INT_MASK5 //EPORT interrupt source 5
                                   &~MCF_INTC_IMRL_INT_MASK7;//EPORT interrupt source 7
                                  
        MCF_INTC0_ICR01=MCF_INTC_ICR_IP(1)+MCF_INTC_ICR_IL(3);
        MCF_INTC0_ICR03=MCF_INTC_ICR_IP(2)+MCF_INTC_ICR_IL(3);
        MCF_INTC0_ICR05=MCF_INTC_ICR_IP(3)+MCF_INTC_ICR_IL(3);
        MCF_INTC0_ICR07=MCF_INTC_ICR_IP(4)+MCF_INTC_ICR_IL(3);

        //interrupt enable register

                                          
        //flag register:individually latches EPORT edge events
        MCF_EPORT_EPFR = MCF_EPORT_EPFR_EPF1
                                    |MCF_EPORT_EPFR_EPF2
                                    |MCF_EPORT_EPFR_EPF3
                                    |MCF_EPORT_EPFR_EPF4
                                    |MCF_EPORT_EPFR_EPF5
                                    |MCF_EPORT_EPFR_EPF6
                                    |MCF_EPORT_EPFR_EPF7;
                                    
                                    uart_putchar(1,0x44);
                                    uart_putchar(1,MCF_EPORT_EPFR);
                                    //while(1);
                       
                       
                       
        MCF_EPORT_EPIER =// MCF_EPORT_EPIER_EPIE1        //EPORT interrupt source 1
                                         //|MCF_EPORT_EPIER_EPIE3        //EPORT interrupt source 3
                                          //0|MCF_EPORT_EPIER_EPIE5        //EPORT interrupt source 5
                                          0|MCF_EPORT_EPIER_EPIE7;//EPORT interrupt source 7            
   // MCF_EPORT_EPIER &= ~MCF_EPORT_EPIER_EPIE5;
   //如果不把上面注释掉,那么在执行这一句前已经发生了场中断
   //然后这句把行中断又屏蔽掉了。

    flagCameraorSD=1;
       
}

回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
威望
138
贡献
86
兑换币
89
注册时间
2013-3-27
在线时间
27 小时
毕业学校
青岛大学
3#
发表于 2013-7-5 22:37:32 | 只看该作者
把场信号 分压 降到3.3V
回复 支持 反对

使用道具 举报

4

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
257
威望
146
贡献
67
兑换币
80
注册时间
2013-3-15
在线时间
22 小时
毕业学校
USTC
4#
 楼主| 发表于 2013-7-5 22:40:23 | 只看该作者
田东林 发表于 2013-7-5 22:37
把场信号 分压 降到3.3V

哥们我这就开烙铁
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
威望
138
贡献
86
兑换币
89
注册时间
2013-3-27
在线时间
27 小时
毕业学校
青岛大学
5#
发表于 2013-7-5 22:41:38 | 只看该作者
Frozenflame 发表于 2013-7-5 22:40
哥们我这就开烙铁

嗯  拿电阻分压就好
回复 支持 反对

使用道具 举报

4

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
257
威望
146
贡献
67
兑换币
80
注册时间
2013-3-15
在线时间
22 小时
毕业学校
USTC
6#
 楼主| 发表于 2013-7-5 23:03:35 | 只看该作者
田东林 发表于 2013-7-5 22:37
把场信号 分压 降到3.3V

搞定了搞定了搞定了!!!!把信号搞成3.3V就可以了啊 真是太感激了!
还有。某个版本的OV6620有个“3.3V”的引脚。如果这根线接到5V电压,所有的输出信号都会变成5V。如果接到3.3V电压,所有的输出信号都会是3.3V。如果什么都不接,输出的信号是一坨屎。
回复 支持 反对

使用道具 举报

0

主题

40

帖子

0

精华

高级会员

Rank: 4

积分
987
威望
505
贡献
222
兑换币
174
注册时间
2012-4-13
在线时间
130 小时
7#
发表于 2013-7-19 19:58:14 | 只看该作者
:)
回复 支持 反对

使用道具 举报

13

主题

250

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3621
威望
1776
贡献
1079
兑换币
1136
注册时间
2013-11-19
在线时间
383 小时
8#
发表于 2014-7-11 12:00:58 | 只看该作者
Frozenflame 发表于 2013-7-5 23:03
搞定了搞定了搞定了!!!!把信号搞成3.3V就可以了啊 真是太感激了!
还有。某个版本的OV6620有个“3.3 ...

OV7620是不是也是这样呢?
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

注册会员

Rank: 2

积分
117
威望
77
贡献
36
兑换币
14
注册时间
2014-9-24
在线时间
2 小时
9#
发表于 2014-9-25 16:46:18 | 只看该作者
好厉害,我也准备开始学这个
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

注册会员

Rank: 2

积分
73
威望
42
贡献
25
兑换币
25
注册时间
2014-9-24
在线时间
3 小时
10#
发表于 2014-9-27 18:32:55 | 只看该作者
  大神带我飞吧!我也在用coldfire做摄像头组的车!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 05:09 , Processed in 0.058758 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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