Ejemplo n.º 1
0
/*!
 *  @brief      鹰眼ov7725管脚初始化(内部调用)
 *  @since      v5.0
 */
void ov7725_eagle_port_init()
{
    //DMA通道0初始化,PTC10触发源(默认上升沿),源地址为PTC_B0_IN,目的地址为:IMG_BUFF,每次传输1Byte
    dma_portx2buff_init(CAMERA_DMA_CH, (void *)&PTC_B0_IN, (void *)ov7725_eagle_img_buff, PTC10, DMA_BYTE1, CAMERA_DMA_NUM, DADDR_KEEPON);

    DMA_DIS(CAMERA_DMA_CH);
    disable_irq(PORTC_IRQn);                        //关闭PTA的中断
    DMA_IRQ_CLEAN(CAMERA_DMA_CH);                   //清除通道传输中断标志位
    DMA_IRQ_EN(CAMERA_DMA_CH);
	
    port_init(PTC10, ALT1 | DMA_FALLING | PULLUP );         //PCLK

    port_init(PTC9, ALT1 | IRQ_RISING | PULLUP | PF);     //场中断,上拉,上降沿触发中断,带滤波

}
Ejemplo n.º 2
0
void ov7725_eagle_vsync(void)
{   
  //uart_putchar (UART0, 0);
   //场中断需要判断是场结束还是场开始
    if(ov7725_eagle_img_flag == IMG_START)                   //需要开始采集图像
    {            
        if(PORTD_ISFR & 0x2000)            //PTD13触发中断,采集的行中断
        { 
          PORTD_ISFR  |= 0x2000;         //写1清中断标志位 
          if(Sample_Flag==0)
          {
            return;
          }                            
          if((LinCout%(480/DATALINE)==0)&&(LinADCout<DATALINE))
          {
                      
            //uart_putchar (UART0, 1);
            systick_delay_us(8);
            DMA_DADDR(DMA_CH4) = (uint32_t)ov7725_eagle_img_buff[LinADCout] ;   //数据存储地址变化
            DMA_EN(DMA_CH4);                                    //使能通道CHn 硬件请求      (这样才能继续触发DMA传输) 
            DMA_IRQ_EN(DMA_CH4) ;                             //允许DMA通道传输
            LinADCout ++ ;
          }
          LinCout++;     
          if(LinADCout==DATALINE)
          {
            LinADCout=0;
            ov7725_eagle_img_flag = IMG_FINISH; 
            Sample_Flag=0;
            disable_irq(PORTD_IRQn);                        //关闭PTd的中断
          }
        }   
        if(PORTD_ISFR & 0x4000)         //PTD14触发中断,采集的场中断。
        {
          PORTD_ISFR  |= 0x4000;        //写1清中断标志
          
          //uart_putchar (UART0, 2);
          
          LinCout = 0 ;
          LinADCout=0;
          Sample_Flag=1;
          port_init(PTD13, ALT1 | IRQ_FALLING | PULLUP );          //初始化 PTD7 管脚,复用功能为GPIO ,下降沿触发中断,上拉电阻
          PORTD_ISFR  |= 0x2000;         //写1清中断标志位
        }   
    }
}
Ejemplo n.º 3
0
void PORTD_IRQHandler()
{
  
  /***************
  摄像头变量
  ***************/
  if(PORTD_ISFR & 0x2000)                                 //PTD13触发中断,采集的行中断
  {
    PORTD_ISFR  |= 0x2000;                              //写1清中断标志位  
    
    if(Sample_Line_flag )
    {       
      Sample_Line_flag = 0;  
          
      DMA_IRQ_CLEAN(DMA_CH4);                             //清除通道传输中断标志位    (这样才能再次进入中断)
      DMA_EN(DMA_CH4);                                    //使能通道CHn 硬件请求      (这样才能继续触发DMA传输) 
      DMA_IRQ_EN(DMA_CH4) ;                              //允许DMA通道传输
      
      Sample_Line_Count ++ ;                             //采样行数 
    }
    
    LineCount ++ ;
    if(*pSample_Line == LineCount )
    {         
      Sample_Line_flag = 1 ;
      if(*pSample_Line != 0xFFff )
      {
        pSample_Line ++ ;
      }
    }
  }
  
  if(PORTD_ISFR & 0x4000)                     //PTD14触发中断,采集的场中断。
  {
    PORTD_ISFR  |= 0x4000;                   //写1清中断标志位
    pSample_Line = &Sample_LineAryy[0] ;    //初始化要采集的行数
    LineCount = 0 ;                         //清除摄像头行数
  }
  
}