|
39 | 39 |
|
40 | 40 | static const char *TAG = "s3 ll_cam";
|
41 | 41 |
|
| 42 | +void ll_cam_dma_print_state(cam_obj_t *cam) |
| 43 | +{ |
| 44 | + esp_rom_printf("dma_infifo_status[%u] :\n", cam->dma_num); |
| 45 | + esp_rom_printf(" infifo_full_l1 : %lu\n", GDMA.channel[cam->dma_num].in.infifo_status.infifo_full_l1); |
| 46 | + esp_rom_printf(" infifo_empty_l1 : %lu\n", GDMA.channel[cam->dma_num].in.infifo_status.infifo_empty_l1); |
| 47 | + esp_rom_printf(" infifo_full_l2 : %lu\n", GDMA.channel[cam->dma_num].in.infifo_status.infifo_full_l2); |
| 48 | + esp_rom_printf(" infifo_empty_l2 : %lu\n", GDMA.channel[cam->dma_num].in.infifo_status.infifo_empty_l2); |
| 49 | + esp_rom_printf(" infifo_full_l3 : %lu\n", GDMA.channel[cam->dma_num].in.infifo_status.infifo_full_l3); |
| 50 | + esp_rom_printf(" infifo_empty_l3 : %lu\n", GDMA.channel[cam->dma_num].in.infifo_status.infifo_empty_l3); |
| 51 | + esp_rom_printf(" infifo_cnt_l1 : %lu\n", GDMA.channel[cam->dma_num].in.infifo_status.infifo_cnt_l1); |
| 52 | + esp_rom_printf(" infifo_cnt_l2 : %lu\n", GDMA.channel[cam->dma_num].in.infifo_status.infifo_cnt_l2); |
| 53 | + esp_rom_printf(" infifo_cnt_l3 : %lu\n", GDMA.channel[cam->dma_num].in.infifo_status.infifo_cnt_l3); |
| 54 | + esp_rom_printf(" in_remain_under_1b_l3: %lu\n", GDMA.channel[cam->dma_num].in.infifo_status.in_remain_under_1b_l3); |
| 55 | + esp_rom_printf(" in_remain_under_2b_l3: %lu\n", GDMA.channel[cam->dma_num].in.infifo_status.in_remain_under_2b_l3); |
| 56 | + esp_rom_printf(" in_remain_under_3b_l3: %lu\n", GDMA.channel[cam->dma_num].in.infifo_status.in_remain_under_3b_l3); |
| 57 | + esp_rom_printf(" in_remain_under_4b_l3: %lu\n", GDMA.channel[cam->dma_num].in.infifo_status.in_remain_under_4b_l3); |
| 58 | + esp_rom_printf(" in_buf_hungry : %lu\n", GDMA.channel[cam->dma_num].in.infifo_status.in_buf_hungry); |
| 59 | + esp_rom_printf("dma_state[%u] :\n", cam->dma_num); |
| 60 | + esp_rom_printf(" dscr_addr : 0x%lx\n", GDMA.channel[cam->dma_num].in.state.dscr_addr); |
| 61 | + esp_rom_printf(" in_dscr_state : %lu\n", GDMA.channel[cam->dma_num].in.state.in_dscr_state); |
| 62 | + esp_rom_printf(" in_state : %lu\n", GDMA.channel[cam->dma_num].in.state.in_state); |
| 63 | +} |
| 64 | + |
| 65 | +void ll_cam_dma_reset(cam_obj_t *cam) |
| 66 | +{ |
| 67 | + |
| 68 | + GDMA.channel[cam->dma_num].in.int_clr.val = ~0; |
| 69 | + GDMA.channel[cam->dma_num].in.int_ena.val = 0; |
| 70 | + |
| 71 | + GDMA.channel[cam->dma_num].in.conf0.val = 0; |
| 72 | + GDMA.channel[cam->dma_num].in.conf0.in_rst = 1; |
| 73 | + GDMA.channel[cam->dma_num].in.conf0.in_rst = 0; |
| 74 | + |
| 75 | + //internal SRAM only |
| 76 | + if (!cam->psram_mode) { |
| 77 | + GDMA.channel[cam->dma_num].in.conf0.indscr_burst_en = 1; |
| 78 | + GDMA.channel[cam->dma_num].in.conf0.in_data_burst_en = 1; |
| 79 | + } |
| 80 | + |
| 81 | + GDMA.channel[cam->dma_num].in.conf1.in_check_owner = 0; |
| 82 | + // GDMA.channel[cam->dma_num].in.conf1.in_ext_mem_bk_size = 2; |
| 83 | + |
| 84 | + GDMA.channel[cam->dma_num].in.peri_sel.sel = 5; |
| 85 | + //GDMA.channel[cam->dma_num].in.pri.rx_pri = 1;//rx prio 0-15 |
| 86 | + //GDMA.channel[cam->dma_num].in.sram_size.in_size = 6;//This register is used to configure the size of L2 Tx FIFO for Rx channel. 0:16 bytes, 1:24 bytes, 2:32 bytes, 3: 40 bytes, 4: 48 bytes, 5:56 bytes, 6: 64 bytes, 7: 72 bytes, 8: 80 bytes. |
| 87 | + //GDMA.channel[cam->dma_num].in.wight.rx_weight = 7;//The weight of Rx channel 0-15 |
| 88 | +} |
| 89 | + |
42 | 90 | static void IRAM_ATTR ll_cam_vsync_isr(void *arg)
|
43 | 91 | {
|
44 | 92 | //DBG_PIN_SET(1);
|
@@ -164,27 +212,7 @@ static esp_err_t ll_cam_dma_init(cam_obj_t *cam)
|
164 | 212 | REG_SET_BIT(SYSTEM_PERIP_RST_EN1_REG, SYSTEM_DMA_RST);
|
165 | 213 | REG_CLR_BIT(SYSTEM_PERIP_RST_EN1_REG, SYSTEM_DMA_RST);
|
166 | 214 | }
|
167 |
| - |
168 |
| - GDMA.channel[cam->dma_num].in.int_clr.val = ~0; |
169 |
| - GDMA.channel[cam->dma_num].in.int_ena.val = 0; |
170 |
| - |
171 |
| - GDMA.channel[cam->dma_num].in.conf0.val = 0; |
172 |
| - GDMA.channel[cam->dma_num].in.conf0.in_rst = 1; |
173 |
| - GDMA.channel[cam->dma_num].in.conf0.in_rst = 0; |
174 |
| - |
175 |
| - //internal SRAM only |
176 |
| - if (!cam->psram_mode) { |
177 |
| - GDMA.channel[cam->dma_num].in.conf0.indscr_burst_en = 1; |
178 |
| - GDMA.channel[cam->dma_num].in.conf0.in_data_burst_en = 1; |
179 |
| - } |
180 |
| - |
181 |
| - GDMA.channel[cam->dma_num].in.conf1.in_check_owner = 0; |
182 |
| - // GDMA.channel[cam->dma_num].in.conf1.in_ext_mem_bk_size = 2; |
183 |
| - |
184 |
| - GDMA.channel[cam->dma_num].in.peri_sel.sel = 5; |
185 |
| - //GDMA.channel[cam->dma_num].in.pri.rx_pri = 1;//rx prio 0-15 |
186 |
| - //GDMA.channel[cam->dma_num].in.sram_size.in_size = 6;//This register is used to configure the size of L2 Tx FIFO for Rx channel. 0:16 bytes, 1:24 bytes, 2:32 bytes, 3: 40 bytes, 4: 48 bytes, 5:56 bytes, 6: 64 bytes, 7: 72 bytes, 8: 80 bytes. |
187 |
| - //GDMA.channel[cam->dma_num].in.wight.rx_weight = 7;//The weight of Rx channel 0-15 |
| 215 | + ll_cam_dma_reset(cam); |
188 | 216 | return ESP_OK;
|
189 | 217 | }
|
190 | 218 |
|
|
0 commit comments