zynq bram读写 linux,【正点原子FPGA连载】第十四章基于BRAM的PS和PL的数据交互领航者 ZYNQ 之嵌入式开发指南...

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 }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值