智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 968|回复: 0
打印 上一主题 下一主题

图像采集程序

[复制链接]

4

主题

6

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
416
威望
219
贡献
117
兑换币
124
注册时间
2014-11-3
在线时间
40 小时
毕业学校
南昌大学
跳转到指定楼层
1#
发表于 2015-1-24 13:56:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  这是我的图像采集程序  思路感觉是对的  调试了几天了  我是用串口采集图像的  但是串口助手一直没现象  检查过了 串口  连线都没问题  求大神帮我看看程序有什么问题
main.c
#include "common.h"
#include "include.h"
#include "isr.h"

void main(void)
{
    DisableInterrupts;
    u16 i,j;
    exti_init(PORTA,29,rising_down);            //行中断,PORTA29 端口外部中断初始化 ,上升沿触发中断,内部下拉
    disable_irq(87);                            //行中断关闭
    exti_init(PORTB,0,falling_down);            //场中断,PORTB0 端口外部中断初始化 ,下降沿触发中断,内部下拉
    uart_init(UART1,115200);
   EnableInterrupts;
    while(Is_SendPhoto)
    {
      if(1)
      {
      /*************************************************************************/
      //直接发送灰度数据,上位机软件会把图像信息显示出来
      disable_irq(87);
      disable_irq(88);                  //关闭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++)
        {         
           if(Pix_Data[i][j] <60)
          {
            uart_putchar(UART1,'0');
          }
          else
          {
            uart_putchar(UART1,'1');
          }
        }
        uart_putchar(UART1,'\r');
        uart_putchar(UART1,'\n');
      }
      uart_putchar(UART1,'\r');
      uart_putchar(UART1,'\n');
  }
}
}


isr.c

#include "common.h"
#include "include.h"
#include "isr.h"
unsigned int  V_Cnt=0;                                                  //行采集计数
unsigned char Is_SendPhoto=0;                                           //图像发送标志
unsigned char Pix_Data[80][200] = {0};                                     //采集V行 H列的图像数据
void DMA_CH4_Handler(void)
{
    DMA_IRQ_CLEAN(DMA_CH4);                                 //清除通道传输中断标志位  
    DMA_DIS(DMA_CH4);                                       //采集完H个数据后进入这个DMA中断,停止DMA传输。行中断中打开DMA传输
    /********************/
    //串口调试用到
    if(V_Cnt>=304)
    {Is_SendPhoto = 1;
    PTA17_OUT=~PTA17_OUT;}
    /*******************/
}
/************************************************************************/
//晓克添加
//行中断处理函数
void PORTA_IRQHandler()
{
    if((PORTA_ISFR & (1<<29)))                              //PTA29触发中断,行中断
    {
      PORTA_ISFR |= (1<<29);                                //写1清中断标志位
      /**************用户任务**************************************************/
      V_Cnt++;
      if(V_Cnt<13)
      { }
      else
   {
      if(V_Cnt%4 == 0)                                  //判断该行数据是否需要,根据自己需要的行数自己设定判别条件
      {
        DMA_EN(DMA_CH4);                                    //使能通道CHn 硬件请求
      }
                     
   }
    }
}

//场中断处理函数
void PORTB_IRQHandler()
{
    if(PORTB_ISFR & (1<<0))                                 //PTB0触发中断,场中断
    {
      PORTB_ISFR |= (1<<0);                                 //写1清中断标志位   
         V_Cnt=0;
         Is_SendPhoto = 0;                                   //发送图像标志
         DMA_PORTx2BUFF_Init (DMA_CH4, (void *)&PTD_BYTE0_IN, Pix_Data, PTC0, DMA_BYTE1, 200, DMA_rising_keepon);
        //DMA通道4初始化,PTC0上升沿触发DMA传输,源地址为PTD_BYTE0_IN,目的地址为:Pix_Data ,每次传输1Byte,传输H次后停止传输,目的地址保持不变,关闭通道CHn 硬件请求   
         enable_irq(87);   
        //使能PORTA中断,即开启行中断,PORTA的ISR中断号为87                                           //行采集计数清零
   }
}
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 12:22 , Processed in 0.042757 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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