智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1534|回复: 7
打印 上一主题 下一主题

OV7620采集到的数据乱码

[复制链接]

7

主题

47

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1714
威望
876
贡献
516
兑换币
549
注册时间
2014-11-14
在线时间
161 小时
跳转到指定楼层
1#
发表于 2015-4-28 23:23:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

本帖子中包含更多资源

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

x
回复

使用道具 举报

7

主题

47

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1714
威望
876
贡献
516
兑换币
549
注册时间
2014-11-14
在线时间
161 小时
2#
 楼主| 发表于 2015-4-28 23:23:58 | 只看该作者
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;           //发送标志清零
    }
  }
}
回复 支持 反对

使用道具 举报

7

主题

47

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1714
威望
876
贡献
516
兑换币
549
注册时间
2014-11-14
在线时间
161 小时
3#
 楼主| 发表于 2015-4-28 23:24:45 | 只看该作者
中断函数如下
#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();     
  }
}
回复 支持 反对

使用道具 举报

56

主题

4914

帖子

3

精华

顶级版主

北京科技大学智能汽车队公共主页管理员

Rank: 11Rank: 11Rank: 11Rank: 11

积分
56131

特殊贡献奖章资源大师奖章论坛骨干奖章推广达人奖章优秀版主奖章热心会员奖章论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
19568
贡献
13933
兑换币
3365
注册时间
2010-7-22
在线时间
11315 小时
4#
发表于 2015-4-29 00:07:04 | 只看该作者
设为用BIN格式显示,也就是二进制
回复 支持 反对

使用道具 举报

7

主题

47

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1714
威望
876
贡献
516
兑换币
549
注册时间
2014-11-14
在线时间
161 小时
5#
 楼主| 发表于 2015-4-29 00:59:10 | 只看该作者
aytc100 发表于 2015-4-29 00:07
设为用BIN格式显示,也就是二进制

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

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

56

主题

4914

帖子

3

精华

顶级版主

北京科技大学智能汽车队公共主页管理员

Rank: 11Rank: 11Rank: 11Rank: 11

积分
56131

特殊贡献奖章资源大师奖章论坛骨干奖章推广达人奖章优秀版主奖章热心会员奖章论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
19568
贡献
13933
兑换币
3365
注册时间
2010-7-22
在线时间
11315 小时
6#
发表于 2015-4-29 02:41:36 | 只看该作者
°Destiny 发表于 2015-4-29 00:59
数组里面的值并不能设置2进制显示,不过这种情况是程序有误吗?

那你好歹用串口把数发下来啊,这么问神仙也帮不了你
回复 支持 反对

使用道具 举报

10

主题

1514

帖子

0

精华

金牌会员

智能车,首选泰庆

Rank: 6Rank: 6

积分
1715

活跃会员奖章在线王奖章

QQ
威望
427
贡献
400
兑换币
497
注册时间
2014-11-4
在线时间
444 小时
7#
发表于 2015-4-29 08:32:02 | 只看该作者
= =.live watch格式
回复 支持 反对

使用道具 举报

28

主题

2228

帖子

1

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
15822

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

QQ
威望
7433
贡献
4215
兑换币
5195
注册时间
2013-12-9
在线时间
2087 小时
8#
发表于 2015-4-29 16:45:00 | 只看该作者
右键改显示成进制   16或者2进制显示
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-23 18:02 , Processed in 0.072814 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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