1 #include "xil_printf.h"
2 #include "stdio.h"
3 #include "pl_bram_rd.h"
4 #include "xbram.h"
5
6 #define PL_BRAM_BASE XPAR_PL_BRAM_RD_0_S00_AXI_BASEADDR //PL_RAM_RD基地址
7 #define PL_BRAM_START PL_BRAM_RD_S00_AXI_SLV_REG0_OFFSET //RAM读开始寄存器地址
8 #define PL_BRAM_START_ADDR PL_BRAM_RD_S00_AXI_SLV_REG1_OFFSET //RAM起始寄存器地址
9 #define PL_BRAM_LEN PL_BRAM_RD_S00_AXI_SLV_REG2_OFFSET //PL读RAM的深度
10
11 #define START_ADDR 0 //RAM起始地址 范围:0~1023
12 #define BRAM_DATA_BYTE 4 //BRAM数据字节个数
13
14 char ch_data[1024]; //写入BRAM的字符数组
15 int ch_data_len; //写入BRAM的字符个数
16
17 //函数声明
18 void str_wr_bram();
19 void str_rd_bram();
20
21 //main函数
22 int main()
23 {
24 while(1)
25 {
26 printf("Please enter data to read and write BRAM\n") ;
27 scanf("%1024s", ch_data); //用户输入字符串
28 ch_data_len = strlen(ch_data); //计算字符串的长度
29
30 str_wr_bram(); //将用户输入的字符串写入BRAM中
31 str_rd_bram(); //从BRAM中读出数据
32 }
33 }
34
35 //将字符串写入BRAM
36 void str_wr_bram()
37 {
38 int i=0,wr_cnt = 0;
39 //每次循环向BRAM中写入1个字符
40 for(i = BRAM_DATA_BYTE*START_ADDR ; i < BRAM_DATA_BYTE*(START_ADDR + ch_data_len) ;
41 i += BRAM_DATA_BYTE){
42 XBram_WriteReg(XPAR_BRAM_0_BASEADDR,i,ch_data[wr_cnt]) ;
43 wr_cnt++;
44 }
45 //设置BRAM写入的字符串长度
46 PL_BRAM_RD_mWriteReg(PL_BRAM_BASE, PL_BRAM_LEN , BRAM_DATA_BYTE*ch_data_len) ;
47 //设置BRAM的起始地址
48 PL_BRAM_RD_mWriteReg(PL_BRAM_BASE, PL_BRAM_START_ADDR, BRAM_DATA_BYTE*START_ADDR) ;
49 //拉高BRAM开始信号
50 PL_BRAM_RD_mWriteReg(PL_BRAM_BASE, PL_BRAM_START , 1) ;
51 //拉低BRAM开始信号
52 PL_BRAM_RD_mWriteReg(PL_BRAM_BASE, PL_BRAM_START , 0) ;
53 }
54
55 //从BRAM中读出数据
56 void str_rd_bram()
57 {
58 int read_data=0,i=0;
59 //循环从BRAM中读出数据
60 for(i = BRAM_DATA_BYTE*START_ADDR ; i < BRAM_DATA_BYTE*(START_ADDR + ch_data_len) ;
61 i += BRAM_DATA_BYTE){
62 read_data = XBram_ReadReg(XPAR_BRAM_0_BASEADDR,i) ;
63 printf("BRAM address is %d\t,Read data is %c\n",i/BRAM_DATA_BYTE ,read_data) ;
64 }
65 }