1 | volatile uint16_t DCMI_Buffer[160 * 120] = {0};
|
2 |
|
3 | RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_DCMI, ENABLE);
|
4 |
|
5 | // Reinitialize
|
6 | DCMI_DeInit();
|
7 |
|
8 | DCMI_InitStructure.DCMI_CaptureMode = DCMI_CaptureMode_Continuous;
|
9 | DCMI_InitStructure.DCMI_SynchroMode = DCMI_SynchroMode_Hardware;
|
10 | DCMI_InitStructure.DCMI_PCKPolarity = DCMI_PCKPolarity_Falling;
|
11 | DCMI_InitStructure.DCMI_VSPolarity = DCMI_VSPolarity_High;
|
12 | DCMI_InitStructure.DCMI_HSPolarity = DCMI_HSPolarity_High;
|
13 | DCMI_InitStructure.DCMI_CaptureRate = DCMI_CaptureRate_All_Frame;
|
14 | DCMI_InitStructure.DCMI_ExtendedDataMode = DCMI_ExtendedDataMode_8b;
|
15 |
|
16 | DCMI_Init(&DCMI_InitStructure);
|
17 |
|
18 | /* DCMI Interrupts config ***************************************************/
|
19 | // DCMI_ITConfig(DCMI_IT_VSYNC, ENABLE);
|
20 | // DCMI_ITConfig(DCMI_IT_LINE, ENABLE);
|
21 | // DCMI_ITConfig(DCMI_IT_FRAME, ENABLE);
|
22 | // DCMI_ITConfig(DCMI_IT_ERR, ENABLE);
|
23 | // DCMI_ITConfig(DCMI_IT_OVF, ENABLE);
|
24 |
|
25 | NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
|
26 | NVIC_InitStructure.NVIC_IRQChannel = DCMI_IRQn;
|
27 | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
|
28 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
|
29 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
30 | NVIC_Init(&NVIC_InitStructure);
|
31 |
|
32 | /* Configures the DMA2 to transfer Data from DCMI to the LCD ****************/
|
33 | /* Enable DMA2 clock */
|
34 | RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
|
35 |
|
36 | /* DMA2 Stream1 Configuration */
|
37 | DMA_Cmd(DMA2_Stream1, DISABLE);
|
38 | DMA_DeInit(DMA2_Stream1);
|
39 | while (DMA_GetCmdStatus(DMA2_Stream1) != DISABLE); // Check if the DMA Stream is disabled before enabling it.
|
40 |
|
41 | DMA_StructInit(&DMA_InitStructure);
|
42 | DMA_InitStructure.DMA_Channel = DMA_Channel_1;
|
43 | DMA_InitStructure.DMA_PeripheralBaseAddr = DCMI_DR_ADDRESS;
|
44 | DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)DCMI_Buffer;
|
45 | DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
|
46 | DMA_InitStructure.DMA_BufferSize = (160 * 120);
|
47 | DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
48 | DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
49 | DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
|
50 | DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
|
51 | DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
|
52 | DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
|
53 | DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable;
|
54 | DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
|
55 | DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
|
56 | DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
|
57 | DMA_Init(DMA2_Stream1, &DMA_InitStructure);
|