问题描述
关键字:双处理器,共享内存,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设置为使用非零地址的存储器。
没有回复内容