MZ7015FA开发板PCIE数据和ARM端修改问题
使用的mz7015开发板,使用官方pcie例程CH01_BASE ,代码如下:#define PCIE_DATA_ADDR 0x1000000
int main()
{
int i;
int pcie_read_data= 0;
int pcie_write_data = 0;
init_platform();
while(1)
{
for(i = 0; i < 10; i++)
{
pcie_read_data = Xil_In32(PCIE_DATA_ADDR + i*4);
Xil_Out32(PCIE_DATA_ADDR + i*4, pcie_read_data+1);
pcie_write_data = Xil_In32(PCIE_DATA_ADDR + i*4);
}
}
cleanup_platform();
return 0;
}
debug程序断点在for循环处,通过pc端xdma_rw.exe命令写入二进制文件,debug单步执行读出的数据和二进制文件数据一致,修改内存数据,通过pc端xdma_rw.exe命令读出二进制文件发现文件没有被修改,求解答。
可能cache问题,disable cache后再试试 admin 发表于 2019-7-11 17:07
可能cache问题,disable cache后再试试
#define PCIE_DATA_ADDR 0x1000000
int main()
{
int i;
int pcie_read_data= 0;
int pcie_write_data = 0;
// init_platform();
// print("Hello World\n\r");
while(1)
{
for(i = 0; i < 10; i++)
{
// disable_caches();
pcie_read_data = Xil_In32(PCIE_DATA_ADDR + i*4);
Xil_Out32(PCIE_DATA_ADDR + i*4, pcie_read_data+1);
pcie_write_data = Xil_In32(PCIE_DATA_ADDR + i*4);
// enable_caches();
}
}
// cleanup_platform();
return 0;
}
改完还是不行
我也感觉不是cache的问题,
我想问下....单步执行的时候pcie_write_data读出的数据是不是已经不是写入的数据了? 首先是ARM测试程序的升级,我们PCIE上位机发送4096个数据,ARM端程序,只要收到第一个数据为1就表示PCIE上位机已经发送数据到PS DDR了,之后我们的ARM端程序会读出所有的4096个数据,并且加1 再写入到PS DDR.
#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xil_io.h"
#define PCIE_DATA_ADDR 0x10000000
u8*BufferPtr = (u8 *)PCIE_DATA_ADDR;
int main()
{
int i=0;
int read_val = 0;
Xil_DCacheDisable();
while(1)
{ read_val=Xil_In8(PCIE_DATA_ADDR);
if(read_val==1)
{
for(i = 0; i < 4096; i++)
{
read_val=Xil_In8(PCIE_DATA_ADDR + i);
Xil_Out8(PCIE_DATA_ADDR + i, read_val+1);
//printf("pcie read %d: %d\r\n",i,read_val);
}
read_val=0;
}
}
return 0;
}
再来看上位机程序,上位机可以利用PCIE 第三课CH03_BAR_DDR程序只要稍作修改,每次发送4096字节数据,并且把的第一个数据设置为1,发送完成后要等待一会,等ARM端读并且加1后写入到DDR,完成后再读出PS DDR数据,做比较,看是否加1了。
测试结果如下
void MainWindow::on_TestDDR_clicked()
{
unsigned char buf1;
unsigned char *buf2 = c2h_align_mem_tmp;
unsigned int i=0;
unsigned char tmp;
unsigned int error_cnt =0;
for(i=0;i<4096;i++)
{
buf1= i+1;
}
put_data_to_fpga_ddr(FPGA_DDR_START_ADDR,buf1,4096);
Sleep(1000);
get_data_from_fpga_ddr(FPGA_DDR_START_ADDR,buf2,4096);
for(i=0;i<4096;i++)
{
tmp = buf1+ 1;
if(tmp!= buf2)
error_cnt++;
}
if(error_cnt)
{
m_ddrpass++;
QString str=QString("%1 %2").arg("DDR bad data = ").arg(error_cnt);
ui->labelDDRPASS->setText(str);
}
else
{
m_ddrpass++;
QString str=QString("%1 %2").arg("DDR PASS Times = ").arg(m_ddrpass);
ui->labelDDRPASS->setText(str);
}
}
测试结果如下
http://www.osrc.cn/data/attachment/forum/201907/16/143225jr24amor7hx0iimc.png
7015上已经有arm+pcie的case啦,请问7035上有这样的例子不? 7035用的PL DDR 自己也可以用PS DDR实现,很简单,自己弄下吧。
页:
[1]