Помогите разобраться с некоторыми вопросами:
1. Нужно ли настраивать (инициализировать) ядро Video In To AXI4-Stream или оно само передает информацию без предварительных настроек.
2. Как лучше (основной критерий простота, наверное) инициализировать VDMA (при помощи описанной Programming Sequence в документации или брать код в examples API-функций)
3. Я пробовал вставить примеры, а именно функцию
Код
int run_triple_frame_buffer(XAxiVdma* InstancePtr, int DeviceId, int hsize,int vsize, int buf_base_addr, int number_frame_count,int enable_frm_cnt_intr);
для инициализации, но данные в память не идут (смотрю по вкладке Memory в режиме Debug)
инициализация по документации
Код
void InitializeVDMA(){
u32 RegVal;
//reset AXI DMA
RegVal = 0x04;
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x30, RegVal);
//wait reset
while(RegVal & (1 << 2))
{
RegVal = Xil_In32(XPAR_AXI_VDMA_0_BASEADDR + 0x30);
}
//Инициализируем AXI DMA
RegVal = Xil_In32(XPAR_AXI_VDMA_0_BASEADDR + 0x30);
RegVal = RegVal | 0x1001;
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x30, RegVal);
RegVal = Xil_In32(XPAR_AXI_VDMA_0_BASEADDR + 0x30);
xil_printf("AXI DMA control register value: %x\n\r", RegVal);
RegVal = Xil_In32(XPAR_AXI_VDMA_0_BASEADDR + 0x34);
xil_printf("AXI DMA status register value: %x\n\r", RegVal);
//Set start address
RegVal = 0x000000;
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xAC, RegVal);
//Set Frame Delay ???????
RegVal = 0x0000000;
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA8, RegVal);
//Set Horizontal Size 640
RegVal = 0x280;
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA4, RegVal);
//Set Vertical Size 480
RegVal = 0x1e0;
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA0, RegVal);
}
u32 RegVal;
//reset AXI DMA
RegVal = 0x04;
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x30, RegVal);
//wait reset
while(RegVal & (1 << 2))
{
RegVal = Xil_In32(XPAR_AXI_VDMA_0_BASEADDR + 0x30);
}
//Инициализируем AXI DMA
RegVal = Xil_In32(XPAR_AXI_VDMA_0_BASEADDR + 0x30);
RegVal = RegVal | 0x1001;
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x30, RegVal);
RegVal = Xil_In32(XPAR_AXI_VDMA_0_BASEADDR + 0x30);
xil_printf("AXI DMA control register value: %x\n\r", RegVal);
RegVal = Xil_In32(XPAR_AXI_VDMA_0_BASEADDR + 0x34);
xil_printf("AXI DMA status register value: %x\n\r", RegVal);
//Set start address
RegVal = 0x000000;
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xAC, RegVal);
//Set Frame Delay ???????
RegVal = 0x0000000;
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA8, RegVal);
//Set Horizontal Size 640
RegVal = 0x280;
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA4, RegVal);
//Set Vertical Size 480
RegVal = 0x1e0;
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA0, RegVal);
}
Документацию читал, но пока плохо её понимаю.
Буду рад пояснениям, ссылкам, направлениям на цель
Пример инициализации и работы брал из Adam Taylor's chronicles(part 119)