Embedded CPU如何读取内存映射的IO?
我正在学习记忆。到目前为止,我已经了解到CPU读取和写入特定的内存地址,以写入或读取特定的IO设备。在传统的方式中,IO设备用来生成中断,这就是CPU用来知道IO设备是如何完成处理的,并且它的结果将被CPU消耗的方式 但是在内存映射IO中没有这样的规定,对吗?因此,根据我的知识(这是没有意义的),如果IO设备向CPU提供了任何结果,CPU每次都需要去读取内存。那不是很糟糕吗?这比投票更糟糕,对吗?因为它增加了从内存读取的周期Embedded CPU如何读取内存映射的IO?,embedded,Embedded,我正在学习记忆。到目前为止,我已经了解到CPU读取和写入特定的内存地址,以写入或读取特定的IO设备。在传统的方式中,IO设备用来生成中断,这就是CPU用来知道IO设备是如何完成处理的,并且它的结果将被CPU消耗的方式 但是在内存映射IO中没有这样的规定,对吗?因此,根据我的知识(这是没有意义的),如果IO设备向CPU提供了任何结果,CPU每次都需要去读取内存。那不是很糟糕吗?这比投票更糟糕,对吗?因为它增加了从内存读取的周期 我错过了什么?请提供帮助。以我的设备为例: MEMORY { I
我错过了什么?请提供帮助。以我的设备为例:
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才会有新值李>
希望这有帮助。是的,谢谢悉达思。我没有注意到IO设备是通过一些中断线连接到CPU的,它们通常是通过中断线连接到CPU的。就像我在回答中提到的。我的应用程序中的FPGA有4条以上的中断线直接连接到CPU(在我的例子中是C6713)。所以我可以优先考虑我想首先服务的中断。这实际上是一个非常健壮和灵活的设计。你应该进一步了解这一点。这些设计案例提供了非常有趣的案例研究,甚至可以帮助您的专业人员在您的产品中采用某些标准设计。是的,这是一种非常有趣且更快的方式来完成IO操作。你有一个好的文档或者一些我可以用来了解这个设计的东西吗?你混淆了两个不相关的问题,中断和内存映射。中断和内存映射I/O不是相互排斥的。您认为中断处理程序如何检索“结果”?您正在比较中断驱动I/O和轮询I/O。这也不是现代或旧处理器如何工作的问题,所有处理器都可以使用这两种方式;这是一个软件设计决策,而不是架构约束。你真的偏离了轨道。