智能车制作

标题: 用kl26+ov7620采集图像采成这样~求助 [打印本页]

作者: lurenlym    时间: 2015-12-2 22:13
标题: 用kl26+ov7620采集图像采成这样~求助
源程序:
#include "common.h"
#include "include.h"
#define hs 80
#define ls 60
#define size hs*ls/8

uint8 imagbuff[size];                        
uint16 VSY_Flog=0;
uint16 Line_Cont=0;
  
//函数声明
void vcan_sendimg(uint8 *imgaddr, uint32 imgsize);
void img_extract(uint8 *dst, uint8 *src, uint32 srclen);
void PORTA_IRQHandler();
void PORTC_IRQHandler();
void DMA0_IRQHandler();
void portinit();

void  main()
{
     
     DisableInterrupts;
     portinit();
     port_init(PTA2, ALT1 | IRQ_FALLING | PULLDOWN );
     enable_irq(PORTA_IRQn);
     port_init(PTC0, ALT1 | IRQ_RISING | PULLDOWN );
     port_init(PTD1, ALT1 | DMA_RISING | PULLDOWN );
     disable_irq(PORTC_PORTD_IRQn);
     uart_init(UART0,115200);
   
     set_vector_handler(PORTA_VECTORn,PORTA_IRQHandler);
     set_vector_handler(PORTC_PORTD_VECTORn,PORTC_IRQHandler);
     set_vector_handler(DMA0_VECTORn,DMA0_IRQHandler);
     EnableInterrupts;
   
     while(1)
    {
     vcan_sendimg(imagbuff,sizeof(imagbuff));
    }
}

void vcan_sendimg(uint8 *imgaddr, uint32 imgsize)
{
#define CMD_IMG     1
    uint8 cmdf[2] = {CMD_IMG, ~CMD_IMG};    //山外上位机 使用的命令
    uint8 cmdr[2] = {~CMD_IMG, CMD_IMG};    //山外上位机 使用的命令
    uart_putbuff(VCAN_PORT, cmdf, sizeof(cmdf));    //先发送命令
    uart_putbuff(VCAN_PORT,imgaddr, imgsize); //再发送图像
    uart_putbuff(VCAN_PORT, cmdr, sizeof(cmdr));    //先发送命令
}

void PORTA_IRQHandler()
{
   
    if(PORTA_ISFR & (1 << 2))
    {
      PORTA_ISFR  |= (1 << 2);
      led (LED0,LED_ON);
      dma_portx2buff_init(DMA_CH0,(void *)&PTE_B2_IN,imagbuff,PTD1, DMA_BYTE1,size);
      DMA_DIS(DMA_CH0);
      
      VSY_Flog=1;
      Line_Cont=0;
      enable_irq(PORTC_PORTD_IRQn);
     }
  
}

void PORTC_IRQHandler()
{
  
  if(PORTC_ISFR & (1 << 0))         
    {
        PORTC_ISFR  |= (1 <<0);     
        if(VSY_Flog==0)
        {
        return;
        }
        
        DMA_IRQ_EN(DMA_CH0);
        DMA_EN(DMA_CH0);
        Line_Cont++;
      
        if(Line_Cont==hs)
        {
         Line_Cont=0;
         DMA_DIS(DMA_CH0);
        }
       led(LED1,LED_ON);
    }
}
void DMA0_IRQHandler()
{
    DMA_IRQ_CLEAN(DMA_CH0);                             //清除通道传输中断标志位    (这样才能再次进入中断)
    DMA_IRQ_DIS(DMA_CH0);                               //禁止DMA   等待下一次行中断来临开启DMA

}
void portinit()
{
     gpio_init(PTE16,GPI,0);
     gpio_init(PTE17,GPI,0);
     gpio_init(PTE18,GPI,0);
     gpio_init(PTE19,GPI,0);
     gpio_init(PTE20,GPI,0);
     gpio_init(PTE21,GPI,0);
     gpio_init(PTE22,GPI,0);
     gpio_init(PTE23,GPI,0);
       led_init (LED0);
     led_init (LED1);
}

作者: lakers天眼    时间: 2015-12-2 22:54
你while里面都没获取图像
作者: lurenlym    时间: 2015-12-2 23:33
我开启了中断dma不就可以采集了吗?
作者: lurenlym    时间: 2015-12-3 09:06
lakers天眼 发表于 2015-12-2 22:54
你while里面都没获取图像

我开启了中断dma不就可以采集了吗?




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