[转帖]用编程方式重新启动多处理器系统的推荐方法是什么?
编程方式重新启动多处理器系统(固件升级后)推荐的方法是什么?在单处理器系统是简单的复位开关,但据我所知它的一大堆更复杂的多处理器系统。仅仅使用一个输出端口来驱动,所述JTAG的方式相同的复位电路的最简单的方法是什么?
回答:
你可以通过写它的PLL CTRL寄存器(寄存器6)重新启动本地的瓷砖。你通常会想读寄存器和写回相同的值。
你也可以通过开关写一个远程tile PLL控制寄存器。下面我有一些示例代码,以供您参考:
/* Note, this function is prototyped in xs1.h only from 13 tools onwards */
unsigned get_tile_id(tileref);
extern tileref tile[];
unsigned int localTileId = get_local_tile_id();
unsigned int tileId;
/* Reset all remote tiles */
for(int i = 0; i < tileArrayLength; i++)
{
/* Cannot cast tileref to unsigned! */
tileId = get_tile_id(tile[i]);
/* Do not reboot local tile yet! */
if(localTileId != tileId)
{
read_sswitch_reg(tileId, 6, pllVal);
write_sswitch_reg_no_ack(tileId, 6, pllVal);
}
}
/* Finally reboot this tile! */
read_sswitch_reg(localTileId, 6, pllVal);
write_sswitch_reg_no_ack(localTileId, 6, pllVal);
在12工具中要找到平铺阵列的长度,你可以使用下面的技巧:
/* Find size of tile array - note in future tools versions this will be available from platform.h */
asm volatile ("ldc %0, tile.globound":"=r"(tileArrayLength));
回答2:
你可以使用一个输出端口驱动多tile系统的复位电路重新启动,在相同的是为JTAG一样。
发表时间:2014年8月19日15:11:44