1 | void init_dcmi(void){
|
2 | // Speicher einmal vollschreiben, damit es eindeutige Ergebnisse gibt
|
3 | for (count = 0;count < 100*100*2*2;count++){
|
4 | frame_buffer[count] = 0;
|
5 | }
|
6 | count =0;
|
7 | GPIO_InitTypeDef GPIO_InitStructure;
|
8 | NVIC_InitTypeDef NVIC_InitStructure;
|
9 |
|
10 | /*** Configures the DCMI GPIOs to interface with the OV2640 camera module ***/
|
11 | /* Enable DCMI GPIOs clocks */
|
12 | RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB |RCC_AHB1Periph_GPIOC |RCC_AHB1Periph_GPIOE,ENABLE);
|
13 |
|
14 | /* Connect DCMI pins to AF13 */
|
15 | GPIO_PinAFConfig(GPIOA, GPIO_PinSource4, GPIO_AF_DCMI);
|
16 | GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_DCMI);
|
17 |
|
18 | GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_DCMI);
|
19 | GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_DCMI);
|
20 |
|
21 | GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_DCMI);
|
22 | GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_DCMI);
|
23 |
|
24 | GPIO_PinAFConfig(GPIOE, GPIO_PinSource0, GPIO_AF_DCMI);
|
25 | GPIO_PinAFConfig(GPIOE, GPIO_PinSource1, GPIO_AF_DCMI);
|
26 | GPIO_PinAFConfig(GPIOE, GPIO_PinSource4, GPIO_AF_DCMI);
|
27 | GPIO_PinAFConfig(GPIOE, GPIO_PinSource5, GPIO_AF_DCMI);
|
28 | GPIO_PinAFConfig(GPIOE, GPIO_PinSource6, GPIO_AF_DCMI);
|
29 |
|
30 | /* DCMI GPIO configuration */
|
31 | /* GPIO A*/
|
32 | //HREF | PCLK
|
33 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_6 ;
|
34 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; // Alternativfunktion
|
35 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
|
36 | GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //Pullup
|
37 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; //Pullup
|
38 | GPIO_Init(GPIOA, &GPIO_InitStructure);
|
39 |
|
40 | /*GPIO B*/
|
41 | //D5 | VSync
|
42 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 ;
|
43 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; // Alternativfunktion
|
44 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
|
45 | GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //Pullup
|
46 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; //Pullup
|
47 | GPIO_Init(GPIOB, &GPIO_InitStructure);
|
48 |
|
49 | /*GPIO C*/
|
50 | //D0 |D1
|
51 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 ;
|
52 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; // Alternativfunktion
|
53 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
|
54 | GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //Pullup
|
55 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; //Pullup
|
56 | GPIO_Init(GPIOC, &GPIO_InitStructure);
|
57 |
|
58 | /*GPIO E*/
|
59 | //D2 | D3 | D4 | D6 | D7
|
60 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 ;
|
61 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; // Alternativfunktion
|
62 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
|
63 | GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //Pullup
|
64 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; //Pullup
|
65 | GPIO_Init(GPIOE, &GPIO_InitStructure);
|
66 |
|
67 | /*Konfiguriren der I2C Schnittstelle zum steuern der Kamera*/
|
68 | //init_I2C2(); // I2C initialisierung zur Steuerung der Kamera
|
69 |
|
70 | /* Interrupts*/
|
71 | NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream1_IRQn;
|
72 | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
|
73 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
|
74 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
75 | NVIC_Init(&NVIC_InitStructure);
|
76 |
|
77 |
|
78 | NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
|
79 | NVIC_InitStructure.NVIC_IRQChannel = DCMI_IRQn;
|
80 | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
|
81 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
|
82 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
83 | NVIC_Init(&NVIC_InitStructure);
|
84 |
|
85 |
|
86 | /* dcmi Struktur*/
|
87 |
|
88 | DCMI_InitTypeDef DCMI_InitStructure;
|
89 | DMA_InitTypeDef DMA_InitStructure;
|
90 |
|
91 | /*** Configures the DCMI to interface with the OV2640 camera module ***/
|
92 | /* Enable DCMI clock */
|
93 | RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_DCMI, ENABLE);
|
94 |
|
95 | /* DCMI configuration */
|
96 | DCMI_InitStructure.DCMI_CaptureMode = DCMI_CaptureMode_Continuous;
|
97 | DCMI_InitStructure.DCMI_SynchroMode = DCMI_SynchroMode_Hardware;
|
98 | DCMI_InitStructure.DCMI_PCKPolarity = DCMI_PCKPolarity_Rising;
|
99 | DCMI_InitStructure.DCMI_VSPolarity = DCMI_VSPolarity_Low;
|
100 | DCMI_InitStructure.DCMI_HSPolarity = DCMI_HSPolarity_Low;
|
101 | DCMI_InitStructure.DCMI_CaptureRate = DCMI_CaptureRate_1of4_Frame;
|
102 | DCMI_InitStructure.DCMI_ExtendedDataMode = DCMI_ExtendedDataMode_8b;
|
103 | //DCMI_JPEGCmd(ENABLE/DISABLE) bit[3]: JPEG Mode
|
104 |
|
105 | DCMI_Init(&DCMI_InitStructure);
|
106 |
|
107 | //----- mask interrupt for DCMI -----
|
108 | DCMI_ITConfig(DCMI_IT_VSYNC, ENABLE);
|
109 | DCMI_ITConfig(DCMI_IT_LINE, ENABLE);
|
110 | DCMI_ITConfig(DCMI_IT_FRAME, ENABLE);
|
111 | DCMI_ITConfig(DCMI_IT_OVF, ENABLE);
|
112 | DCMI_ITConfig(DCMI_IT_ERR, ENABLE);
|
113 |
|
114 | /* Configures the DMA2 to transfer Data from DCMI */
|
115 | /* Enable DMA2 clock */
|
116 | RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
|
117 |
|
118 | /* DMA2 Stream1 Configuration */
|
119 | DMA_DeInit(DMA2_Stream1); // Deinitalisieren von DMA2_Stream1
|
120 | DMA_StructInit(&DMA_InitStructure); // Grundeinstellungen vornehmen
|
121 |
|
122 | DMA_InitStructure.DMA_Channel = DMA_Channel_1;
|
123 | DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(DCMI_BASE+0x28);
|
124 | DMA_InitStructure.DMA_Memory0BaseAddr = (u32)frame_buffer;
|
125 | DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
|
126 | DMA_InitStructure.DMA_BufferSize = 0x1388;
|
127 | DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
128 | DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
129 | DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
|
130 | DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
|
131 | DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
|
132 | DMA_InitStructure.DMA_Priority = DMA_Priority_High;
|
133 | DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable;
|
134 | DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
|
135 | DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
|
136 | DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
|
137 |
|
138 | /* DMA2 IRQ channel Configuration */
|
139 | DMA_Init(DMA2_Stream1, &DMA_InitStructure);
|
140 | return;
|
141 | }
|