棋子 · 2019年12月18日

基础知识:ARM的C编程-AHB传输

有人可以帮助我解决以下基本问题吗?
我过去曾经对微控制器进行过编程,但是现在我需要使用ARM处理器,并且需要一些基本的知识来解决这个难题。
我将为ARM966写C / C ++代码,但我不知道在代码中做什么才能与AHB外设通信。它应该是内存映射的,但是我不知道在什么位置以及是否需要在代码开始时进行内存初始化,或者我可以从某个地方读取它-到目前为止,我还无法找到清晰的文档那。
另外,我希望这足以写入内存中的该位置并从中读取数据,并且编译器“ armcc”将负责生成将进入ARM AHB接口端口的AHB事务数据。我是对的还是双向AHB传输有特定的C函数?
我希望有一个可以在代码中使用的C函数库,但又无法找到解释它的地方。
我一直在搜索中查看RealView 3.0(Unix)目录,并且看到几个头文件(例如rt_heap.h,rt_memory.h等),但是我没有任何一个C项目示例可以在其中看到他们的用法。
如果有人可以给我一些例子或将我指向可以阅读的地方,我将非常感激。
紧密耦合内存(TCM)也会遇到同样的问题-内存映射在哪里等等。

1 个回答 得票排序 · 时间排序
极术小姐姐 · 2019年12月18日

ARM966 TRM的所有状态就是到AHB接口的映射。

内核的所有外部都将由硬件制造商定义,而不是由ARM内核定义,因此我在这里不能为您提供帮助。什么外围设备/ RAM /存储器控制器位于AHB总线上的什么地址,取决于ASIC制造商如何配置总线。

如果您使用的是已经制造的硅芯片,请参考实际的ASIC TRM以获得硬件图;如果您正在一家实际设计ASIC的公司工作,请与您的硬件人员进行交谈=)

映射将固定为特定的ASIC-因此通常不需要在启动时使用软件来设置任何映射。

自动-由ASIC总线实现硬定义通常=)

我认为您正在尝试使这件事变得比实际困难得多-上面的示例C代码*是与ARM966上的外设通信所需的全部。没有什么可以成为例子的了。

您只需要从硬件mfr读取ASIC TRM。找出定义YOUR_PERIPHERAL_BASE_ADDRESS的常数。

你的回答