智能车制作

标题: OV7620采集到的数据乱码 [打印本页]

作者: °Destiny    时间: 2015-4-28 23:23
标题: OV7620采集到的数据乱码
[attach]76668[/attach]

作者: °Destiny    时间: 2015-4-28 23:23
mian函数如下
#include "common.h"
#include "include.h"
#include "MK60_port.h"
#include "MK60_it.h"

extern uint8 imgbuff[CAMERA_H][CAMERA_W];      //定义存储接收图像的数组
extern uint8 Is_SendPhoto;     //图像发送标志

//uint8  nrf_rx_buff[CAMERA_SIZE + 2*COM_LEN + DATA_PACKET];         //预多
//uint8  nrf_tx_buff[CAMERA_SIZE + 2*COM_LEN + DATA_PACKET];         //预多
////uint8 *imgbuff = (uint8 *)(((uint8 *)&nrf_tx_buff) + COM_LEN);     //图像地址

uint16 i,j;
uint16 H = CAMERA_H; //发送图像高度
uint16 W = CAMERA_W; //发送图像宽度

/*!
*  @brief      main函数
*  @since      v5.0
*  @note       测试 LED 功能是否正常
                看到的效果是LED0和LED1同时亮灭闪烁
*/
void main()
{
//  com_e     com;
//  nrf_result_e nrf_result;
  
  DisableInterrupts;//关闭全局中断,似乎不需要?
  
  gpio_init(PTA15,GPO,0);//指示灯初始化,用于显示程序执行情况
  
  uart_init(UART5, 115200);//串口初始化,TXDTB8 RXD:PTB9
  
  OV7620_Init();//OV7620摄像头初始化
  
//  while(!nrf_init());//无线模块初始化
//  
//  nrf_msg_init();//无线模块消息初始化
  
  DELAY_MS(1000);//延时1秒钟
  
  EnableInterrupts;//开启全局中断,似乎不需要?
  for(;;)
  {
    GPIO_TURN(PTA15);
    if(1 == Is_SendPhoto)
    {      
      //直接发送灰度数据,上位机软件会把图像信息显示出来
      disable_irq(PORTA_IRQn); //关闭PORTA中断,即关闭场中断,防止串口发送图像数据进程被打乱
      disable_irq(PORTB_IRQn); //关闭PORTB中断,即关闭行中断,防止串口发送图像数据进程被打乱
      //以下2句话是固定格式,是串口和上位机软件之间的协议
      uart_putchar(UART5,0x01);
      uart_putchar(UART5,0xfe);//与上位机的协议
      for(i=0;i<H;i++)
      {
        for(j=0;j<W;j++)
        {         
            uart_putchar(UART5,imgbuff[i][j]);
        }
      }
      uart_putchar(UART5,0xfe);
      uart_putchar(UART5,0x01);//与上位机的协议
      PORTA_ISFR = ~0; //写1清中断标志位(必须的,不然回导致一开中断就马上触发中断)
      enable_irq(PORTA_IRQn);   //先只打开PORTA场中断
      Is_SendPhoto=0;           //发送标志清零
    }
  }
}

作者: °Destiny    时间: 2015-4-28 23:24
中断函数如下
#include    "include.h"
#include    "MK60_it.h"
#include    "MK60_dma.h"

uint8 imgbuff[CAMERA_H][CAMERA_W]={0};      //定义存储接收图像的数组
//uint8 Row_xiao = 0;              //消影标志位
uint8 V_Cnt = 0;                 //行采集计数
uint8 H_Cnt = 0;                 //奇偶场的判断标志
uint8 Is_SendPhoto=0;            //图像发送标志

/*!
*  @brief      PTA端口的场中断服务函数
*  @since      v5.0
*/
void PORTA_IRQHandler()
{
  if(PORTA_ISFR & (1<<29))    //PTA29触发场中断
  {
    PORTA_ISFR |= (1<<29);    //写1清中断标志位
    Is_SendPhoto = 0;         //发送图像标志清零
   
    dma_portx2buff_init(CAMERA_DMA_CH, (void *)&PTB_B0_IN,
                        imgbuff, PTB8,DMA_BYTE1,
                        CAMERA_DMA_NUM, DADDR_KEEPON);
//    DMA_DIS(CAMERA_DMA_CH);//禁止DMA的硬件请求
//  //  disable_irq(PORTA_IRQn);                        //关闭PTA的中断
    DMA_IRQ_CLEAN(CAMERA_DMA_CH);                   //清除通道传输中断标志位
    DMA_IRQ_EN(CAMERA_DMA_CH);
   
//    Row_xiao=0;               //消影标志位清零
    V_Cnt=0;                  //行采集计数清零
   
   disable_irq(PORTA_IRQn);  //关闭PORTA场中断   
//   PORTB_ISFR = ~0; //写1清中断标志位(必须的,不然回导致一开中断就马上触发中断)
    enable_irq(PORTB_IRQn);   //使能PORTB行中断  
  }
}

/*!
*  @brief      PTB端口的行中断服务函数
*  @since      v5.0
*/
void PORTB_IRQHandler()
{
  if(PORTB_ISFR & (1<<9))    //PTB9触发场中断
  {
    DMA_IRQ_DIS(CAMERA_DMA_CH);//关闭DMA0通道传输中断
    PORTB_ISFR |= (1<<9);      //写1清中断标志位
    //判断该行数据是否需要,根据自己需要的行数自己设定判别条件
    if( (V_Cnt++) % CAMERA_H_JIANGE == 0 ) //每隔CAMERA_H_JIANGE行采集一行数据      
    {   
      disable_irq(PORTB_IRQn);    //暂时关闭PTB行中断   
//        PORTB_ISFR = 1 <<  PT8;     //清空PCLK标志位
      DMA_IRQ_EN(CAMERA_DMA_CH);//使能DMA0通道的传输完成中断
      DMA_EN(DMA_CH0);       //使能通道CHn 硬件请求
    }  
  }
}

/*!
*  @brief      DMA0采集的中断服务函数
*  @since      v5.0
*/
void DMA0_IRQHandler()
{
  PORTB_ISFR = ~0; //写1清中断标志位(必须的,不然回导致一开中断就马上触发中断)
  enable_irq(PORTB_IRQn);     //采集了一行,便又使能PORTB行中断  
//  PORTB_ISFR = 1 <<  PT8;     //清空PCLK标志位
  DMA_IRQ_CLEAN(CAMERA_DMA_CH);//清除通道传输中断标志位,(这样才能再次进入中断)
  DMA_IRQ_DIS(CAMERA_DMA_CH);//关闭DMA0通道传输中断
  if(V_Cnt >= CAMERA_H_MAX)
  {
    Is_SendPhoto = 1;
  }
}

/*!
*  @brief      PTC端口的行中断服务函数
*  @since      v5.0
*/
void PORTC_IRQHandler()
{
  PORTC_ISFR  = ~0;          //清中断标志位
  if(PORTC_ISFR & (1<<9))    //PTC9触发场中断
  {
    nrf_handler();     
  }
}
作者: aytc100    时间: 2015-4-29 00:07
设为用BIN格式显示,也就是二进制
作者: °Destiny    时间: 2015-4-29 00:59
aytc100 发表于 2015-4-29 00:07
设为用BIN格式显示,也就是二进制

[attach]76670[/attach]数组里面的值并不能设置2进制显示,不过这种情况是程序有误吗?


作者: aytc100    时间: 2015-4-29 02:41
°Destiny 发表于 2015-4-29 00:59
数组里面的值并不能设置2进制显示,不过这种情况是程序有误吗?

那你好歹用串口把数发下来啊,这么问神仙也帮不了你

作者: 泰庆电子    时间: 2015-4-29 08:32
= =.live watch格式
作者: 六步上篮    时间: 2015-4-29 16:45
右键改显示成进制   16或者2进制显示




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