/*! * @brief 鹰眼ov7725 DMA中断服务函数 * @since v5.0 */ void ov7725_eagle_dma() { //ov7725_eagle_img_flag = IMG_FINISH ; DMA_IRQ_CLEAN(DMA_CH4); //清除通道传输中断标志位 DMA_DIS(DMA_CH4); DMA_IRQ_DIS(DMA_CH4) ; //uart_putchar (UART0, 3); }
void DMA0_ISR(void) { DMA_DIS(CAMERA_DMA_CH); //关闭通道CHn 硬件请求 DMA_IRQ_CLEAN(CAMERA_DMA_CH); //清除通道传输中断标志位 img_flag = IMG_FINISH ; GPIOD_PTOR |= (1 << 13); }
/************************************************************************* * 蓝宙电子工作室 * * 函数名称: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); }
void DMA_CH4_Handler(void) { //DMA通道4 DMA_IRQ_CLEAN(DMA_CH4) ; DMA_IRQ_DIS(DMA_CH4); DMA_DIS(DMA_CH4); DMA_Over_Flag = 1 ; }
/*! * @brief 鹰眼ov7725管脚初始化(内部调用) * @since v5.0 */ void ov7725_eagle_port_init() { //DMA通道0初始化,PTA27触发源(默认上升沿),源地址为PTB_B0_IN,目的地址为:IMG_BUFF,每次传输1Byte dma_portx2buff_init(DMA_CH4, (void *)&PTE_B0_IN, ov7725_eagle_img_buff[0], PTD12, DMA_BYTE1,DATACOUNT , DADDR_KEEPON); DMA_DIS(DMA_CH4); DMA_IRQ_DIS(DMA_CH4); DMA_IRQ_CLEAN(DMA_CH4); //清除通道传输中断标志位 disable_irq(PORTD_IRQn); //关闭PTd的中断 //set_irq_priority(90,0); }
void DMA_CH4_Handler(void) { //DMA通道4 // u16 i ; // uart_putchar(UART0,0XAA); DMA_IRQ_CLEAN(DMA_CH4) ; DMA_IRQ_DIS(DMA_CH4); DMA_DIS(DMA_CH4); DMA_Over_Flg = 1 ; // disable_irq(PORTC+87); }
/*! * @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); //场中断,上拉,上降沿触发中断,带滤波 }
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 ; //清除摄像头行数 } }
/*! * @brief 鹰眼ov7725 DMA中断服务函数 * @since v5.0 */ void ov7725_eagle_dma() { ov7725_eagle_img_flag = IMG_FINISH ; DMA_IRQ_CLEAN(CAMERA_DMA_CH); //清除通道传输中断标志位 }