注册 登录
查看: 468|回复: 4

[鹰眼] KL26+鹰眼图像采集问题

[复制链接]
发表于 2014-6-22 08:48:05 | 显示全部楼层 |阅读模式
/*!
*     COPYRIGHT NOTICE
*     Copyright (c) 2013,山外科技
*     All rights reserved.
*     技术讨论:山外我行论坛 http://www.vcan123.com
*
*     除注明出处外,以下所有内容版权均属山外科技所有,未经允许,不得用于商业用途,
*     修改内容时必须保留山外科技的版权声明。
*
* @file       main.c
* @brief      山外KL26 平台主程序
* @author     山外科技
* @version    v5.0
* @date       2013-12-14
*/

#include "common.h"
#include "include.h"


uint8 imgbuff[CAMERA_SIZE];                             //定义存储接收图像的数组
uint8 img[CAMERA_W*CAMERA_H];                           //由于鹰眼摄像头是一字节8个像素,因而需要解压为 1字节1个像素,方便处理

//函数声明
void sendimg(uint8 *imgaddr, uint32 imgsize);          //发送图像到上位机
void img_extract(uint8 *dst, uint8 *src, uint32 srclen);
void PORTA_IRQHandler();
void DMA0_IRQHandler();

/*!
*  @brief      main函数
*  @since      v5.0
*  @note       山外 DMA 采集摄像头 实验
                注意,此例程 bus频率设为100MHz(50MHz bus频率会太慢而导致没法及时采集图像)
*/
void  main(void)
{    //初始化摄像头
    camera_init(imgbuff);

    //配置中断复位函数
    set_vector_handler(PORTA_VECTORn ,PORTA_IRQHandler);    //设置LPTMR的中断复位函数为 PORTA_IRQHandler
    set_vector_handler(DMA0_VECTORn ,DMA0_IRQHandler);      //设置LPTMR的中断复位函数为 PORTA_IRQHandler
        while(1)
    {
        //获取图像
        camera_get_img();                                   //摄像头获取图像
        //解压图像
        img_extract(img, imgbuff,CAMERA_SIZE);

        //发送图像到上位机
        sendimg(img, CAMERA_W * CAMERA_H);                  //发送到上位机
           }
}

/*!
*  @brief      发送图像到eSmartCameraCar上位机显示
*  @param      imgaddr         图像地址
*  @param      imgsize         图像占用空间大小
*  @since      v5.0
*  @note       不同的上位机,不同的命令,这里使用 eSmartCameraCar软件,
                如果使用其他上位机,则需要修改代码。
*  Sample usage:   sendimg(imgbuff, CAMERA_W * CAMERA_H);                    //发送到上位机
*/
void sendimg(uint8 *imgaddr, uint32 imgsize)
{
    uint8 cmd[4] = {0, 255, 1, 0 };    //yy_摄像头串口调试 使用的命令

    uart_putbuff(FIRE_PORT, cmd, sizeof(cmd));    //先发送命令

    uart_putbuff(FIRE_PORT, imgaddr, imgsize); //再发送图像
}

/*!
*  @brief      二值化图像解压(空间 换 时间 解压)
*  @param      dst             图像解压目的地址
*  @param      src             图像解压源地址
*  @param      srclen          二值化图像的占用空间大小
*  @since      v5.0            img_extract(img, imgbuff,CAMERA_SIZE);
*  Sample usage:   sendimg(imgbuff, CAMERA_W * CAMERA_H);                    //发送到上位机
*/
void img_extract(uint8 *dst, uint8 *src, uint32 srclen)
{
    uint8 colour[2] = {255, 0}; //0 和 1 分别对应的颜色
    //注:山外的摄像头 0 表示 白色,1表示 黑色
    uint8 tmpsrc;
    while(srclen --)
    {
        tmpsrc = *src++;
        *dst++ = colour[ (tmpsrc >> 7 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 6 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 5 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 4 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 3 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 2 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 1 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 0 ) & 0x01 ];
    }
}

/*!
*  @brief      PORTA中断服务函数
*  @since      v5.0
*/
void PORTA_IRQHandler()
{
    uint8  n = 0;    //引脚号
    uint32 flag = PORTA_ISFR;
    PORTA_ISFR  = ~0;                                   //清中断标志位

    n = 6;                                              //场中断
    if(flag & (1 << n))                                 //PTA6触发中断
    {
        camera_vsync();
        gpio_set(PTD5,0);
    }
#if 0             //鹰眼直接全速采集,不需要行中断
    n = 5;
    if(flag & (1 << n))                                 //PTA5触发中断
    {
        camera_href();
    }
#endif
}

/*!
*  @brief      DMA0中断服务函数
*  @since      v5.0
*/
void DMA0_IRQHandler()
{
    camera_dma();
    gpio_set(PTD6,0);
}

用给的例程拍赛道,但在上位机上的图像很乱,不是一副图像,是哪有问题么?求指导
回复

使用道具 举报

 楼主| 发表于 2014-6-22 08:50:47 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2014-6-22 10:03:18 | 显示全部楼层
KL26 需要在 场中断 和 PCLK 里加个 下拉 150欧的电阻
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-23 16:22:52 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-22 10:03
KL26 需要在 场中断 和 PCLK 里加个 下拉 150欧的电阻

谢谢,问题已解决。我想在请教一下,KL26设置引脚为输入时,需要设置上拉或下拉么?
回复 支持 反对

使用道具 举报

发表于 2014-6-24 11:21:15 | 显示全部楼层
FinallyFancy 发表于 2014-6-23 16:22
谢谢,问题已解决。我想在请教一下,KL26设置引脚为输入时,需要设置上拉或下拉么?

看情况,可以不设置。
我们的按键例程,本来外部需要按键,而我们外部没有接按键,所以就需要内部上拉
回复 支持 反对

使用道具 举报

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

本版积分规则

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