注册 登录
查看: 397|回复: 7

[智能车] 关于摄像头

[复制链接]
发表于 2014-9-20 23:13:46 | 显示全部楼层 |阅读模式
自己拿野火最新的库仿照别人的采集OV7620的程序写了个采集程序,检查了两天了都没找到问题所在,始终不发送图像,实在找不到问题了,求各路大神帮看看哪里出错了,以下是程序,仅仅是采集然后发给上位机显示图像。其中PTA29接行中断,PTB0接场中断,PTC0接像素中断,不知道哪里错了,大家帮我看看吧,谢谢了。
#include "common.h"
#include "include.h"

#define H 260                                    
#define V 60
#define PHOTO_SIZE H*V
#define TIAOSHI             //供串口调试用,不用串口调试时注释掉本语句即可
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;         //图像发送标志
//unsigned char FieldCounter=1;      //判断奇偶场
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;
}

回复

使用道具 举报

发表于 2014-9-20 23:16:04 | 显示全部楼层
不发送图像? 看看有没有卡死在哪里?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-20 23:41:08 | 显示全部楼层
汤静云 发表于 2014-9-20 23:16
不发送图像? 看看有没有卡死在哪里?

单步执行吗?像这种接外设有严格时钟的程序可以单步吗?
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2014-9-20 23:56:06 | 显示全部楼层
六步上篮 发表于 2014-9-20 23:41
单步执行吗?像这种接外设有严格时钟的程序可以单步吗?

全速执行一段时间,然后暂停,然后看调用栈。

最好在默认中断函数和断言函数里设断点。

可以看看山外哥的IAR调试视频(K60视频)
回复 支持 反对

使用道具 举报

发表于 2014-9-20 23:57:01 | 显示全部楼层
调用栈是个好东西,我喜欢用IAR,最大的原因就是它的调用栈太好用,比MDK好用多了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-21 00:11:09 | 显示全部楼层
汤静云 发表于 2014-9-20 23:57
调用栈是个好东西,我喜欢用IAR,最大的原因就是它的调用栈太好用,比MDK好用多了。

调用栈是神马东西?视频里讲这个了吗?
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2014-9-21 00:12:37 | 显示全部楼层
六步上篮 发表于 2014-9-21 00:11
调用栈是神马东西?视频里讲这个了吗?

自认为非常牛叉级调试工具,在K60视频中《 2.3_IAR使用技巧.avi》,好像是20分钟左右就开始讲到。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-21 00:45:46 | 显示全部楼层
汤静云 发表于 2014-9-21 00:12
自认为非常牛叉级调试工具,在K60视频中《 2.3_IAR使用技巧.avi》,好像是20分钟左右就开始讲到。

好的  天亮看看,谢谢你了
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

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

本版积分规则

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