CH32V307 carema_uart

void DVP_IRQHandler(void)

{

//**********************************************************************************

    if (DVP->IFR & RB_DVP_IF_ROW_DONE)

    {

        /* Write 0 clear 0 */

        DVP->IFR &= ~RB_DVP_IF_ROW_DONE;  //clear Interrupt


#if (DVP_Work_Mode == JPEG_MODE)                            //#define DVP_Work_Mode    JPEG_MODE

        href_cnt++;


        if (addr_cnt%2)     //buf1 done

        {

            addr_cnt++;

            DVP->DMA_BUF1 += OV2640_JPEG_WIDTH *4;

        }

        else                //buf0 done

        {

            addr_cnt++;

            DVP->DMA_BUF0 += OV2640_JPEG_WIDTH *4;

        }


#endif


    }

//******************************************************************************

    if (DVP->IFR & RB_DVP_IF_FRM_DONE)

    {

        DVP->IFR &= ~RB_DVP_IF_FRM_DONE;  //clear Interrupt


#if (DVP_Work_Mode == JPEG_MODE)

        DVP->CR0 &= ~RB_DVP_ENABLE;       //disable DVP


        //Use uart2 send JPEG data.

        {

            UINT32 i;

            UINT16 val;


            href_cnt = href_cnt*OV2640_JPEG_WIDTH;


            for(i=0; i

                val = *(UINT16*)(0x20005000+i*2);

                UART2_Send_Byte((UINT8)(val>>2));// | 0xC0);//((val>>4)|(val));

            }


        }


        DVP->CR0 |= RB_DVP_ENABLE;  //enable DVP


        DVP->DMA_BUF0 = JPEG_DVPDMAaddr0;        //DMA addr0

        DVP->DMA_BUF1 = JPEG_DVPDMAaddr1;        //DMA addr1

        href_cnt = 0;


        addr_cnt =0;


#endif


    }

//************************************************************************************

    if (DVP->IFR & RB_DVP_IF_STR_FRM)

    {

        DVP->IFR &= ~RB_DVP_IF_STR_FRM;  //clear Interrupt


        frame_cnt++;

    }


    if (DVP->IFR & RB_DVP_IF_STP_FRM)

    {

        DVP->IFR &= ~RB_DVP_IF_STP_FRM;  //clear Interrupt


    }


    if (DVP->IFR & RB_DVP_IF_FIFO_OV)

    {

        DVP->IFR &= ~RB_DVP_IF_FIFO_OV;   //clear Interrupt


        printf("FIFO OV\r\n");

    }

}

请问是否可以把每一部分的代码的功能大体解释一下,并且想咨询一下,如何修改代码实现只采集一帧图像,通过串口发出去

您好,该函数为DVP中断处理函数,对应DVP中断使能寄存器的各个位,在DVP初始化配置使能开启DVP中断后,会触发进入中断,在中断函数中会进行中断标志位的清除以及进行相关的操作,具体可结合CH32V307应用手册关于DVP寄存器的介绍来看。下面链接为应用手册下载链接,可下载下来对照看一下。

/downloads/CH32FV2x_V3xRM_PDF.html?

image.png



只有登录才能回复,可以选择微信账号登录