AXI_GPIO_UART是否可以使用CDMA驱动? - minichao9901/TangNano-20k-Zynq-7020 GitHub Wiki

AXI_GPIO

#define CDMA_BASE 0x43000000
#define GPIO_BASE 0x44000000
typedef u8 (*buffer_type)[128];
buffer_type buffer=(buffer_type)0x11000000;

void test_axi_gpio_cdma()
{
	for(int i=0; i<128; i++){
		*buffer[i]=i;
	}

	Xil_DCacheInvalidateRange((u32)buffer, 128);
	usleep(500);

//    //write burst
//    addr = 32'h00;  data = 32'h0000_0020; //key_hole_wr=1
//    master_agent.AXI4LITE_WRITE_BURST(base_addr + addr,0,data,resp);

//    #200ns
//    addr = 32'h18;  data = 32'hC000_0000; //配置源地址
//    master_agent.AXI4LITE_WRITE_BURST(base_addr + addr,0,data,resp);
//
//    #200ns
//    addr = 32'h20;  data = 32'h4200_0000; //配置目的地址
//    master_agent.AXI4LITE_WRITE_BURST(base_addr + addr,0,data,resp);
//
//    #200ns
//    addr = 32'h28;  data = 32'd128*4;   //配置传输长度,以byte为单位
//    master_agent.AXI4LITE_WRITE_BURST(base_addr + addr,0,data,resp);

	Xil_Out32(CDMA_BASE+0x00, 0x00000020);  //key_hole_wr=1
	Xil_Out32(CDMA_BASE+0x18, 0x11000000);  //src_addr
	Xil_Out32(CDMA_BASE+0x20, 0x44000000);  //dest_addr
	Xil_Out32(CDMA_BASE+0x28, 128);         //burst_length
	usleep(500);
}


int main(void)
{
	//main_ps_io();
	//main_ps_emio();

	//main_axi_io();
	test_axi_gpio_cdma();
	return 0;
}

image

结论:不可以使用CDMA,波形是乱的。

AXI_UARTLite

#define CDMA_BASE 0x43000000
#define GPIO_BASE 0x44000000
#define AXI_UARTLITE_BASE 0x45000000
typedef u8 (*buffer_type)[128];
buffer_type buffer=(buffer_type)0x11000000;

void test_axi_uartlite_cdma()
{
	for(int i=0; i<128; i++){
		*buffer[i]=i;
	}

	Xil_DCacheInvalidateRange((u32)buffer, 128);
	usleep(500);

	Xil_Out32(CDMA_BASE+0x00, 0x00000020);  //key_hole_wr=1
	Xil_Out32(CDMA_BASE+0x18, 0x11000000);  //src_addr
	Xil_Out32(CDMA_BASE+0x20, 0x45000004);  //dest_addr
	Xil_Out32(CDMA_BASE+0x28, 128);         //burst_length
	usleep(100*1000);
}





int main(void)
{
	//main_ps_io();
	//main_ps_emio();

	//main_axi_io();
	//test_axi_gpio_cdma();
	test_axi_uartlite_cdma();
	return 0;
}

image

结论:不可以使用CDMA,波形是乱的。