Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Embedded CPU如何读取内存映射的IO?_Embedded - Fatal编程技术网

Embedded CPU如何读取内存映射的IO?

Embedded CPU如何读取内存映射的IO?,embedded,Embedded,我正在学习记忆。到目前为止,我已经了解到CPU读取和写入特定的内存地址,以写入或读取特定的IO设备。在传统的方式中,IO设备用来生成中断,这就是CPU用来知道IO设备是如何完成处理的,并且它的结果将被CPU消耗的方式 但是在内存映射IO中没有这样的规定,对吗?因此,根据我的知识(这是没有意义的),如果IO设备向CPU提供了任何结果,CPU每次都需要去读取内存。那不是很糟糕吗?这比投票更糟糕,对吗?因为它增加了从内存读取的周期 我错过了什么?请提供帮助。以我的设备为例: MEMORY { I

我正在学习记忆。到目前为止,我已经了解到CPU读取和写入特定的内存地址,以写入或读取特定的IO设备。在传统的方式中,IO设备用来生成中断,这就是CPU用来知道IO设备是如何完成处理的,并且它的结果将被CPU消耗的方式

但是在内存映射IO中没有这样的规定,对吗?因此,根据我的知识(这是没有意义的),如果IO设备向CPU提供了任何结果,CPU每次都需要去读取内存。那不是很糟糕吗?这比投票更糟糕,对吗?因为它增加了从内存读取的周期


我错过了什么?请提供帮助。

以我的设备为例:

MEMORY {
   IRAM        : origin = 0x0,         len = 0x30000
   CACHE_L2    : origin = 0x30000,     len = 0x10000
   SDRAM       : origin = 0x80000000,  len = 0x1000000
   FPGA_A1     : origin = 0x90000000,  len = 0x1000
   FPGA_A2     : origin = 0xA0000000,  len = 0x1000
   WATCHDOG    : origin = 0xB0000000,  len = 0x1
}
这是我的C6713 DSP。它与两个FPGA的FPGA_1和FPGA_2共享内存,并与PowerPC CPU SDRAM部分共享内存。 这就是所谓的内存映射设备示例。 这两个FPGA基本上处理ADC转换、脉冲、数字IO和保护。 让我们坚持使用ADC

  • 正常的C6713将在50usec下处理ADC。在相同的级别上,我们将执行我们的控制循环。也许我们可以把它推到25usec,但是我们正在消耗越来越多的CPU,而且随着采样速度的提高,C6713能够做的越来越少
  • 而FPGA每1U秒进行一次ADC转换。因此,当第一个控制回路开始运行时,FPGA已经产生了50个值。但是我们的控制循环并不需要它,它可以进入内存,只要做一个读取操作,它就有它需要的所有值
因此,通过在内存映射设备上卸载它。我们有

  • 将C6713从ADC操作中释放。(这释放了大量计算能力)
  • 只有使用内存读取操作C6713才会有新值
因此,现在要让您的CPU读回该值,您可以在CPU上安排一个读取操作,确保它始终获得一个新值,或者您可以配置您的FPGA,在这种特殊情况下,每50 usec生成一个中断,使您的CPU受中断驱动

简而言之,不,这并不坏,因为通过从CPU上卸载这些任务,您可以获得很多好处,并释放出大量的计算能力。在这样做的过程中,您还可以简化您的系统


希望这有帮助。

是的,谢谢悉达思。我没有注意到IO设备是通过一些中断线连接到CPU的,它们通常是通过中断线连接到CPU的。就像我在回答中提到的。我的应用程序中的FPGA有4条以上的中断线直接连接到CPU(在我的例子中是C6713)。所以我可以优先考虑我想首先服务的中断。这实际上是一个非常健壮和灵活的设计。你应该进一步了解这一点。这些设计案例提供了非常有趣的案例研究,甚至可以帮助您的专业人员在您的产品中采用某些标准设计。是的,这是一种非常有趣且更快的方式来完成IO操作。你有一个好的文档或者一些我可以用来了解这个设计的东西吗?你混淆了两个不相关的问题,中断和内存映射。中断和内存映射I/O不是相互排斥的。您认为中断处理程序如何检索“结果”?您正在比较中断驱动I/O和轮询I/O。这也不是现代或旧处理器如何工作的问题,所有处理器都可以使用这两种方式;这是一个软件设计决策,而不是架构约束。你真的偏离了轨道。