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;
}
结论:不可以使用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;
}
结论:不可以使用CDMA,波形是乱的。