Esempio n. 1
0
/*************************************************************************
*                             蓝宙电子工作室
*
*  函数名称:DMA_CH4_Handler
*  功能说明:DMA通道4的中断服务函数
*  参数说明:是采集摄像头数据,本数据位摄像头AD数据,可以采集到300个点。
设置标志位能够及时搬移。
*  函数返回:无
*  修改时间:2012-3-18    已测试
*  备    注:
*************************************************************************/
void DMA_CH0_Handler(void)
{
  
  //DMA通道0
  printf("DMA_CH0_Handler\n");
  DMA_IRQ_CLEAN(DMA_CH0);                             //清除通道传输中断标志位    (这样才能再次进入中断)
  DMA_EN(DMA_CH0);                                    //使能通道CHn 硬件请求      (这样才能继续触发DMA传输)
  //   uart_putchar(UART0,0XAA);
}
Esempio 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清中断标志位
        }   
    }
}
Esempio n. 3
0
/*!
 *  @brief      鹰眼ov7725场中断服务函数
 *  @since      v5.0
 */
void ov7725_eagle_vsync(void)
{

    //场中断需要判断是场结束还是场开始
    if(ov7725_eagle_img_flag == IMG_START)                   //需要开始采集图像
    {
        ov7725_eagle_img_flag = IMG_GATHER;                  //标记图像采集中
        disable_irq(PORTC_IRQn);

        DMA_EN(CAMERA_DMA_CH);                  //使能通道CHn 硬件请求
        DMA_DADDR(CAMERA_DMA_CH) = (uint32)ov7725_eagle_img_buff;    //恢复地址
    }
    else                                        //图像采集错误
    {
        disable_irq(PORTC_IRQn);                        //关闭PTA的中断
        ov7725_eagle_img_flag = IMG_FAIL;                    //标记图像采集失败
    }
}
Esempio n. 4
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 ;                         //清除摄像头行数
  }
  
}
Esempio n. 5
0
void 
PORTA_ISR(void)         //场中断处理函数
{
    if(PORTA_ISFR & (1 << 29))                       //PTA29触发中断
    {
        switch(img_flag)
        {
        case IMG_START:
            img_flag = IMG_GATHER;                  //标记图像采集中

            DMA_EN(CAMERA_DMA_CH);                  //使能通道CHn 硬件请求
            DMA_DADDR(CAMERA_DMA_CH) = (uint32)IMG_BUFF;    //恢复地址
            break;
        default :
            break;
        }
    }

    if (PORTA_ISFR & (1 << 10))                     // TAGS: 编码器引脚PTA10中断 
    {               
        encoder_cnt ++;
    }
    PORTA_ISFR  = ~0;       //场中断里,全部都要清中断标志位
}