This is the idmac configuration
void ipu_general_idmac_config()
{
uint32_t channel = 0;
/* enable channel 0 */
ipu_idmac_channel_enable(channel, 0);
memset((void *)ipu_cpmem_addr(channel), 0, sizeof(ipu_cpmem_t));
ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 0, 29, 0x08000000);
ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 29, 29, 0);
ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 125, 13, 0x0000027f);
ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 138, 12, 0x000001df);
/*setup default pixel format */
ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 85, 4, 0x01);
ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 46, 22, 0x4b000 / 8);
ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 68, 22, 0x4b000 * 3 / 16);
ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 102, 14, 640 - 1);
ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 128, 14, 640 / 2 - 1);
/*setup pixel per burst */
ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 78, 7, 30);
ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 113, 1, 0);
ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 58, 20, 0);
//setup rotate/vf/hf and block mode
ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 119, 1, 0);
ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 121, 1, 0);
ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 120, 1, 0);
ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 117, 2, 0);
ipu_idmac_channel_mode_sel(channel, 0);
ipu_idmac_channel_enable1(channel, 1);
}
This is the SMFC configuration:
uint32_t ipu_smfc_fifo_allocate(uint32_t channel, uint32_t map,
uint32_t burst_size)
{
switch (channel) {
case 0:
writel(map, 0x2650000);
writel(burst_size, 0x2650008);
break;
case 1:
writel(map, 0x2650000);
writel(burst_size, 0x2650008);
break;
case 2:
writel(map, 0x2650000);
writel(burst_size, 0x2650008);
break;
case 3:
writel(map, 0x2650000);
writel(burst_size, 0x2650008);
break;
default:
printf("Wrong channel selected!!\n");
return -1;
}
writel(1, 0x2600000);
return 0;
}
This is the csi configuration:
void ipu_csi_config()
{
writel((readl(0x2600000) | 1 << 28), 0x2600000);//mipi
writel(0x1e, 0x2638020);//di
writel(((0x04 << 24) | (0x00 << 4) | (0x0 << 16) | (0x1 << 11) | (0x0 << 7) | (0x02 << 8)), 0x2630000);
writel(((0x01df << 16) | (0x027f << 0)), 0x2630004);
writel((readl(0x2600000) | (1 << 0)), 0x2600000);
}
My development board is imx6q,and configure camera data.640 x 480,15fps;
and I don't use an operating system.
cpmem address:0x02700000.CH23_EBA0 = 0X40000000;
ov5640->csi->smfc->idmac->memory.
So where should the data collected by the camera be stored?
When I look at the in-memory data.I find that memory data varies between 0x2701400 and 0x2701ff0.CH23_EBA0 = 0X40000000 data is constant.So how much memory should I look at?To see the data from the camera.