智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1469|回复: 3
打印 上一主题 下一主题

[华北赛区] 摄像头采集

[复制链接]

28

主题

2228

帖子

1

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
15817

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章资源大师奖章

QQ
威望
7430
贡献
4213
兑换币
5193
注册时间
2013-12-9
在线时间
2087 小时
跳转到指定楼层
1#
发表于 2014-9-21 19:44:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用K60加OV7620仿照别人的程序写了个采集程序,就是采集回来发给上位机这点目的,但是始终没有图像,用的是野火新版的库,哪位大神帮我看看是哪里出错了吧,一下是程序,仅仅是采集和发送。其中PTA29接行中断,PTB0接场中断,PTC0为像素中断
#include "common.h"
#include "include.h"
#define H 260                                    
#define V 60
unsigned char Pix_Data[V][H];
void PTA29_IRQHandler(void);
void PTB0_IRQHandler(void);
void DMA_CH4_Handler(void);
unsigned int Hang_Cnt;                //行采集计数
unsigned char Is_SendPhoto;         //图像发送标志
void main()
{
    int i=0,j=0;
    DisableInterrupts;
    Hang_Cnt=0;                       //行计数
    Is_SendPhoto=0;                //从串口发送图像   
    port_init(PTA29,IRQ_RISING|PF|ALT1|PULLDOWN);   //行中断,PORTA29 端口外部中断初始化 ,
                                                   //上升沿触发中断,内部下拉
    disable_irq(PORTA_IRQn);                              //行中断关闭
    port_init(PTB0,IRQ_FALLING|PF|ALT1|PULLDOWN);    //场中断,PORTB0 端口外部中断初始化 ,
                                                     //下降沿触发中断,内部下拉
    uart_init(UART1,256000);
    set_vector_handler(PORTA_VECTORn,PTA29_IRQHandler); //设置行中断函数
    set_vector_handler(PORTB_VECTORn,PTB0_IRQHandler);  //设置场中断函数
    set_vector_handler(DMA4_VECTORn,DMA_CH4_Handler);
    enable_irq(PORTB_IRQn);
    EnableInterrupts;
    enable_irq(PORTB_IRQn);
    while(1)
    {
      if(Is_SendPhoto)
      {
          disable_irq(PORTA_IRQn);
          disable_irq(PORTB_IRQn);   //关闭PORTB中断,即关闭场中断,防止串口发送图像数据进程被打乱
          //以下四句话是固定格式,是串口和上位机软件之间的协议
          uart_putchar(UART1,0);
          uart_putchar(UART1,255);
          uart_putchar(UART1,1);
          uart_putchar(UART1,0);
          for(i=0;i<V;i++)
          {
            for(j=0;j<H;j++)
            {        
                uart_putchar(UART1,Pix_Data[i][j]);
            }
          }
          enable_irq(PORTB_IRQn);      //打开PORTB中断
          enable_irq(PORTA_IRQn);
          Is_SendPhoto=0;
      }
    }
}
void PTA29_IRQHandler(void)
{
    if((PORTA_ISFR & (1<<29)))               //PTA29触发中断,行中断
    {
      PORTA_ISFR |= (1<<29);               //写1清中断标志位
      if((++Hang_Cnt)%4 == 0)            //判断该行数据是否需要,根据自己需要的行数自己设定判别条件
      {
        DMA_EN(DMA_CH4);                 //使能通道CHn 硬件请求
      }
    }
}
void PTB0_IRQHandler(void)
{
    if(PORTB_ISFR & (1<<0))           //PTB0触发中断,场中断
    {
        PORTB_ISFR |= (1<<0);            //写1清中断标志位                          
        dma_portx2buff_init(DMA_CH4,(void *)&PTD_B0_IN,Pix_Data,PTC0,DMA_BYTE1,H,DADDR_KEEPON);
        //DMA通道4初始化,PTC0上升沿触发DMA传输,源地址为PTD_BYTE0_IN,
                    //目的地址为:Pix_Data ,每次传输1Byte,传输H次后停止传输,
                    //目的地址保持不变,关闭通道CHn 硬件请求
        enable_irq(PORTA_IRQn);      //使能PORTA中断,即开启行中断,PORTA的ISR中断号为87
        Hang_Cnt=0;             //行采集计数清零
        Is_SendPhoto = 0;
      }
}
void DMA_CH4_Handler(void)
{
    DMA_IRQ_CLEAN(DMA_CH4);       //清除通道传输中断标志位    (这样才能再次进入中断)
    DMA_DIS(DMA_CH4);        //采集完H个数据后进入这个DMA中断,停止DMA传输。行中断中打开DMA传输
    if(Hang_Cnt == 240)
      Is_SendPhoto = 1;
}
回复

使用道具 举报

28

主题

2228

帖子

1

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
15817

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章资源大师奖章

QQ
威望
7430
贡献
4213
兑换币
5193
注册时间
2013-12-9
在线时间
2087 小时
2#
 楼主| 发表于 2014-9-22 11:20:09 | 只看该作者
没人啊
回复 支持 反对

使用道具 举报

28

主题

2228

帖子

1

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
15817

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章资源大师奖章

QQ
威望
7430
贡献
4213
兑换币
5193
注册时间
2013-12-9
在线时间
2087 小时
3#
 楼主| 发表于 2014-9-22 19:43:34 | 只看该作者
回复 支持 反对

使用道具 举报

19

主题

730

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2390
威望
1180
贡献
718
兑换币
762
注册时间
2014-7-14
在线时间
246 小时
4#
发表于 2014-12-31 22:37:38 | 只看该作者
你这么厉害,谁还能指导了你
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-26 19:48 , Processed in 0.040905 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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