11 EDK  – 如何配置VxWorks映像以使用非零地址的存储器?-Altera-Intel社区-FPGA CPLD-ChipDebug

11 EDK – 如何配置VxWorks映像以使用非零地址的存储器?

问题描述

关键字:双处理器,共享内存,RTOS,中断,VxWorks

我正在尝试基于Xilinx应用笔记996中提供的设计,在ML507上为双PowerPC / MicroBlaze设计创建VxWorks映像。

如果在硬件中我将DDR2 SDRAM的地址范围设置为0x0到0x1000 0000并通过修改与硬件配置相对应的config.h和makefile来配置BSP,我可以毫无问题地运行VxWorks。在我们的其他设计中,DDR存储器都设置为位于地址0x0,所以它们也没问题。

但是采用这种双处理器设计,我们需要将DDR2 SDRAM设置为从0x1000 0000开始。按照配置BSP的相同步骤,但VxWorks在这种情况下不起作用。我们发现问题似乎与中断处理有关。我们如何纠正这个?

解决/修复方法

这是中断向量表的问题。以下信息来自VxWorks Architecture Supplement文档。

所有PowerPC处理器的异常向量表都位于物理上

地址为零。 VxWorks确实支持向量表的不同虚拟地址

在PowerPC 440处理器上。

在大多数PowerPC处理器上,除了PowerPC 440和MPC85xx,MSRIP位

确定中断向量表所在的位置。 。的异常前缀

不支持0xfff00000,对应于MSRIP = 1。 MSRIP位必须

指定地址0。

因此,基于此描述,中断向量表确实需要位于地址0x0,或者需要通过启用虚拟寻址来解析。

另一方面,有一种更简单的方法来解决这个问题。

如果DDR存储器在地址0x0定义,VxWorks工作正常,但仅适用于这种双处理器设计,内存不能在地址0x0的原因是因为MicroBlaze在地址0x0定义了它的引导向量。但是,MPMC允许为不同的PIM定义不同的地址,因此PowerPC和MicroBlaze可以具有与外部存储器不同的地址映射。这样,DDR存储器可以保存在PPC的地址0x0,并为MB分配不同的地址,因此我们不必担心将VxWorks设置为使用非零地址的存储器。

请登录后发表评论

    没有回复内容