在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: ahan

【AMBA AHB总线专题讨论】

[复制链接]
发表于 2008-11-17 16:54:25 | 显示全部楼层


原帖由 老扁 于 2008-10-23 14:48 发表


我明白你的意思了。这种情况应该比较少,但肯定会存在,特别是正如你所编的程序,如果你一直non-cache模式随机访问外部存储器就会出现。你是担心你的slave不能及时处理,这在AMBA总线里只有靠RETRY、SPLIT协议, ...



老扁兄,你好!最近一直非常忙,所以才看到你的回复。我在实际编写程序的时候的确是像你说的那样,采用response和hready等信号来拉住总线的,但时序上的确难控制许多,不过还是要谢谢你的指点!
发表于 2008-11-20 13:57:27 | 显示全部楼层
我也刚接触AMBA,受教了!

     我们现要在AMBA总线上挂接一个USB OTG IP核,希望实现DMA功能,DMA控制器采用的ARM Primecell (PL081)SDMAC,它包括一个AHB master,一个AHB Slave,一个DMA请求和响应模块,一个中断请求模块,其中Slave用于ARM向DMA控制器写DMA的配置信息,Master用于发起DMA传输,但是有几个问题不是很明白:

1、在ABMA总线上,所有的传输必须以M-S的形式,M-M以及S-S之间不能进行直接传输,如果要DMA,那必须先把比如外设的数据读取到DMA的FIFO中,然后再由DMA FIFO写入目的内存地址,这样需要中转传输,那DMA的优势体现在哪里呢?

2、从DMA的工作过程来看,一次DMA传输包括:

    (1)微处理器通过DMA 控制器的Slave 接口向其内部控制寄存器写入配置信息,如传输的源地址,目的地址,传输大小等;

    (2)设备向DMA控制器发起DMA传输请求

    (3)DMA控制器中的AHB Master向仲裁器发起总线申请

    (4)DMA获得总线以后,向设备发送DMA请求回应信号

    (5)DMA传输正式开始

     下面的步骤 略……

     这个步骤是我看一些资料上写的,也不知道对不对?如果对,那有个疑问就是,微处理器ARM如何知道要进行DMA传输?是由用户通过操作系统发起的呢,还是必须先要设备对ARM进行告知?如果事先告知,那是采用何种方式,中断么?如果纯粹由操作系统发起,又有个问题就是,虽然ARM可以主动将DMA传输的信息配置进DMA控制器,但是设备如何知道自己会进行DMA传输?即它怎会主动向DMA控制器申请DMA传输呢?

     主要还是对AMBA总线下DMA的传输过程还不是很清楚,请大虾们指教,小弟先行谢过了!
发表于 2008-11-20 15:50:11 | 显示全部楼层
对以上问题的补充:
是否系统在一开始的时候就对DMA控制器编程,设定其各个通道的DMA传输方式,目的地址,源地址等信息,一旦有外设提出DMA申请,那就按照相应通道的配置信息进行DMA传输;如果需要对配置信息进行变更,也是由操作系统(或用户)主动发起,而不需要外部设备进行申请,反正每次配置完以后,DMA就按固定的配置进行传输就是了,这样是不是就说得过去了?
发表于 2008-11-20 16:16:00 | 显示全部楼层
回答jiajie的几个问题,你对DMA的工作原理基本理解都是对的:

1. 通用DMA控制器确实必须传输两次才能把数据从源设备倒到目标设备
2. 一般DMA主要是由外设在数据准备好以后给它发DMA请求或给CPU发中断两种方式来启动。
发表于 2008-11-20 19:04:09 | 显示全部楼层
谢谢老扁! ^_^
但是如果是ARM事先对DMA进行配置的话,又有一个问题就是,在每一次配置完成以后,数据传输的目的地址,源地址和传输大小就不能根据实际情况进行变更,尤其是对于内存存取的位置来讲,就相当于给每个外设中的数据固定好了存取的位置,而不是根据内存当时的存储状况来选择存储位置,请问是这样的吗?
PS:这个帖子好强大啊,竟然从04年顶到了现在,哈哈
发表于 2008-11-20 20:04:40 | 显示全部楼层
对了哦,在AHB上进行DMA传输的时候,是否需要进行锁定(Lock)传输,等DMA完成以后再释放总线呢?
发表于 2008-11-20 23:52:36 | 显示全部楼层


原帖由 jiajie0628 于 2008-11-20 19:04 发表
谢谢老扁! ^_^
但是如果是ARM事先对DMA进行配置的话,又有一个问题就是,在每一次配置完成以后,数据传输的目的地址,源地址和传输大小就不能根据实际情况进行变更,尤其是对于内存存取的位置来讲,就相当于给每个外设中的数据固定好了存取的位置,而不是根据内存当时的存储状况来选择存储位置,请问是这样的吗?
PS:这个帖子好强大啊,竟然从04年顶到了现在,哈哈


DMA的工作方式可以多样,有的是固定地址间的传输,有的是CPU在启动DMA前先对DMA通道重新配置。
DMA一般是优先级最低的AHB传输(当然你也可以根据系统要求设为高优先级),可以被打断。
发表于 2008-11-23 23:05:03 | 显示全部楼层
谢谢,好东西。
发表于 2008-11-26 09:45:06 | 显示全部楼层
有一个问题,AHB Master的输入信号Hready是如何得来的呀?是由每个Slave都直接连一根线给它吗?
发表于 2008-11-26 15:42:34 | 显示全部楼层


原帖由 jiajie0628 于 2008-11-26 09:45 发表
有一个问题,AHB Master的输入信号Hready是如何得来的呀?是由每个Slave都直接连一根线给它吗?



对每个slave的hready进行mux而来,mux的选择信号由地址译码产生
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-3-5 03:04 , Processed in 0.025361 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表