当前位置: 首页 > news >正文

AG32 mcu通过ahb转apb方式操作cpld外设

上节讲述了mcu和cpld之间交互数据的实现方式。

但数据是在ahb层面的响应,慢速设备不能直接使用。慢速设备需要ahb转为apb后,使用apb的信号来交互。这种情况,转变为mcu和apb 之间的交互。

mcu和apb之间的交互,相比mcu和aph之间的交互,多了一层ahb到apb的转换。 这个转换是借助于“桥”ahb2apb.v模块来实现的(在example/analog下找该.v文件)。

该模块:输入是ahb的一组信号,输出是apb的一组信号。使用如下图:

如果实现mcu和apb的交互,则需要操作的是转换后的这组apb信号。

关于apb总线的使用,更多信息请自行百度。这里只是简述下apb信号列表(与ahb略有不同):

  • apb_psel:片选
  • apb_penable:表示传输进入第二周期(准备好了读/写)
  • apb_pwrite:传输方向(1-写;0-读)
  • apb_paddr[32]:地址总线,要操作的地址
  • apb_pwdata[32]:写的数据,32位
  • apb_prdata[32]:读的数据,32位

以下展示在apb下如何实现跟mcu的交互,仍以ahb的两个寄存器为例。

1. 首先需要增加ahb转apb的信号关联;

  如上图。

  Ahb2apb模块会把ahb信号转换为apb信号。接下来操作apb信号即可。

2. 在转换后的apb信号中,实现写和读的操作。

  mcu读操作时:

  比如,mcu要读0x60000004的寄存器:

  mcu端直接C语言这样调用:int cpRdReg = *((int *)0x60000004);

  cpld端,可以根据以上信号做如下处理:

----------------------------------------------

//mcu的读操作响应
//mcu端用C语言:int value = *((int *)0x60000004);
reg [31:0] ardata_reg; //定义32位的hrdata_reg
always @(posedge apb_clock) begin //clk上升沿触发
  if (!apb_pwrite && //读 (0 读,1 写)
    apb_penable && //是否准备好
    apb_paddr[11:0] == ADDR_READ) //读地址为0x60000004(cpld内部用相对偏移)。
  begin
    ardata_reg <= awdata_reg; //把另一准备好的数据给到hrdata_reg
  end
end
assign apb_prdata = ardata_reg; //绑定hrdata_reg到读的数据线上

-----------------------------------------------

  mcu写操作时:

  比如,mcu要写0x60000000的寄存器:

  mcu端直接C语言这样调用:*((int *)0x60000000) = value;

  cpld端,可以根据以上信号做如下处理:

----------------------------------------------

//mcu的写操作响应
//mcu端用C语言:*((int *)0x60000000) = value;
reg [31:0] awdata_reg; //定义32位的hwdata_reg
always @(posedge apb_clock) begin //clk上升沿触发
  if (apb_pwrite && //写 (0 读,1 写)
    apb_penable && //是否准备好
    apb_paddr[11:0] == ADDR_WRITE)//写地址为0x60000000(cpld内部用相对偏移)。
  begin
    TestLedCtrl <= !TestLedCtrl; //led灯切换,表示有写操作触发
    awdata_reg <= apb_pwdata; //把收到的数据给到hwdata_reg
  end
end
//这个过程,是把mcu写进来的数据收到hwdata_reg中

-----------------------------------------------

这个功能实现后,其实是个简单的“空外设”。可以用它做为实现复杂功能外设的基础。

这部分的实例代码,请参考网盘上获取:

链接:百度网盘 请输入提取码 里边的 \cpld-fpga文档\logic样例\5.mcu读写cpld寄存器

.

样例展示到这里,mcu和cpld的交互上:交互信号、跟ahb交互数据、跟apb交互数据,基本的交互通路已经建立。

接下来,用户根据自己的需求,在cpld中交互到数据后,编写自己需要的功能即可。

http://www.dtcms.com/a/316512.html

相关文章:

  • 计算机视觉CS231n学习(3)
  • 基于深度学习的医学图像分析:使用CycleGAN实现医学图像风格转换
  • 深入理解Spring Boot自动配置原理
  • 区块链:重构信任的价值互联网革命​
  • 技术实践:在Debian上为同型号双网卡配置差异化驱动
  • 【Algorithm | 0x02 动态规划】背包问题
  • AIDL学习
  • sql调优总结
  • MySQL 5.7 和 8.0 离线安装教程(图文版适合电脑小白)
  • 信用机制的发展与货币演进
  • CSRF漏洞原理及利用(全)
  • vue环境的搭建
  • 从汽车到航天发动机:三坐标检测深孔的挑战
  • OpenGL图形渲染管线:从三维世界到二维屏幕的奇妙旅程
  • nflsoi 8.2 题解
  • bluetooth matlab GFSK 调制解调,误码率统计
  • 委托第三方软件检测机构出具验收测试报告需要做哪些准备?
  • helm部署graph-node服务
  • linux nfs+autofs
  • 并发 Vs 并行
  • 管式土壤墒情监测站在高标准农田的作用
  • 具身智能触觉传感器全景调研
  • HTML 如何转 Markdown
  • 【YOLO学习笔记】YOLOv1详解
  • 亚马逊标品与非标品广告运营:从架构搭建到策略优化的专业方法论
  • Could not load the Qt platform plugin “xcb“ in “无法调试与显示Opencv
  • Natural Language Processing in Computational Creativity: A Systematic Review
  • 2025年08月05日Github流行趋势
  • 3477. 水果成篮 II
  • 电子器械行业的主数据有哪些?