This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

cc3200搭配OV7670无法触发帧结束中断

Other Parts Discussed in Thread: CC3200

我把OV7670的 VSYNC HS 都设置成高电平了,VS引脚接pin_03,复用成CAM_hS功能了,但是就是不会触发中断,串口也不会打印,代码如下

void CameraIntHandler()
{
 MAP_CameraIntClear(CAMERA_BASE, CAM_INT_FE);
 g_frame_end = 1;
 Report(" goto interrupt \n\r ");
 MAP_CameraCaptureStop(CAMERA_BASE, true);
}

void CaptureImage()
{
 int val;
    //
    // Configure DMA in ping-pong mode
    //
    DMAConfig();
    //
    // Perform Image Capture
    //
    MAP_CameraCaptureStart(CAMERA_BASE);

    //HWREG(0x44018040)=1<<20;
    Report(" before \n\r ");
    while(g_frame_end == 0)
   {
      //一直在这里循环
    }
    MAP_CameraCaptureStop(CAMERA_BASE, true);
    Report(" later \n\r ");

}

void CamControllerInit()
{
 int val;
    MAP_PRCMPeripheralClkEnable(PRCM_CAMERA, PRCM_RUN_MODE_CLK);
    MAP_PRCMPeripheralReset(PRCM_CAMERA);

    HWREG(0x44025000) = 0x0000;//不分频
    MAP_CameraReset(CAMERA_BASE);
    //CAM_HS_POL_HI,HSYNC极性为高电平有效
    //CAM_VS_POL_LO,VSYNC低电平有效
    //CAM_ORDERCAM_SWAP交换字节顺序,swapping image data in FIFO.
    //CAM_NOBT_SYNCHRO,在帧开始时捕捉数据
   /* MAP_CameraParamsConfig(CAMERA_BASE, CAM_HS_POL_HI, CAM_VS_POL_LO,
                       CAM_ORDERCAM_SWAP|CAM_NOBT_SYNCHRO);*/
    MAP_CameraParamsConfig(CAMERA_BASE, CAM_HS_POL_HI, CAM_VS_POL_HI,
           CAM_NOBT_SYNCHRO|CAM_IF_SYNCHRO);
    HWREG(0x44018000 + 0x40) |= 1<<17;//FRAME_TRIG 置1
    MAP_CameraIntRegister(CAMERA_BASE, CameraIntHandler);

    //MCLK is by-default set to 120MHz, and cannot be modified
    MAP_CameraXClkConfig(CAMERA_BASE, 120000000,12000000);


    MAP_CameraThresholdSet(CAMERA_BASE, 8);
    MAP_CameraIntEnable(CAMERA_BASE, CAM_INT_FE);//帧结束中断,低电平有效
    MAP_CameraDMAEnable(CAMERA_BASE);
}

void DMAConfig()
{
 memset(g_image_buffer,0xF80F,sizeof(g_image_buffer));  //这个内存大小有待考究,QVGA  50?120?
    p_buffer = &g_image_buffer[0];
    //
    // Initilalize DMA
    //
    UDMAInit();
    //
    // Setup ping-pong transfer
    //
    DMASetupTransfer(UDMA_CH22_CAMERA,UDMA_MODE_PINGPONG,TOTAL_DMA_ELEMENTS,
                     UDMA_SIZE_32,
                     UDMA_ARB_8,(void *)CAM_BUFFER_ADDR, UDMA_SRC_INC_32,
                     (void *)p_buffer, UDMA_DST_INC_32);
    //
    //  Pong Buffer
    //
    p_buffer += TOTAL_DMA_ELEMENTS;
    DMASetupTransfer(UDMA_CH22_CAMERA|UDMA_ALT_SELECT,UDMA_MODE_PINGPONG,
                     TOTAL_DMA_ELEMENTS,
                     UDMA_SIZE_32, UDMA_ARB_8,(void *)CAM_BUFFER_ADDR,
                     UDMA_SRC_INC_32, (void *)p_buffer, UDMA_DST_INC_32);

    //
    //  Ping Buffer
    //
    p_buffer += TOTAL_DMA_ELEMENTS;

    g_dma_txn_done = 0;
    g_frame_size_in_bytes = 0;
    g_frame_end = 0;
    g_total_dma_intrpts = 0;
    //
    // Clear any pending interrupt
    //
    HWREG(0x4402609C) |= 1 << 8;

    //
    // DMA Interrupt unmask from apps config
    //
    HWREG(0x44026094) |= 1 << 8;
    Report(" DMA INIT OK \n\r ");
}