Zynq 7000系列 PS 软件复位,原来是这么回事?

作者:WatchmanLee,ZYNQ微信公众号

复位系统

复位系统包括由硬件,看门狗定时器,JTAG控制器和软件产生的复位。

Zynq-7000 SoC器件中的每个模块和系统都包含一个由复位系统驱动的复位。

硬件复位由上电复位信号(PS_POR_B)和系统复位信号(PS_SRST_B)驱动。

看门狗定时器

PS 中有三个看门狗定时器,它们可以产生复位。

JTAG控制器可以生成一个重置,该重置仅重置PS的调试部分和系统级重置。

软件可以生成单个子模块重置或系统级别重置。

重置是由许多不同的来源引起的,并且到达许多不同的目的地。

本章确定所有重置,并说明其功能或提供指向另一章或另一文档的指针

重置系统的主要功能

1. 从硬件,看门狗定时器,JTAG控制器和软件收集复位

2. 驱动每个模块和子系统的复位

3. 是设备安全系统的组成部分

4. 执行三个阶段的序列:开机,内存清除和系统启用

系统软件复位

用户可以通过断言软件重置来重置整个系统。

通过断言PSS_RST_CTRL [SOFT_RST],整个系统被重置,最终结果与用户按下PS_SRST_B引脚(REBOOT_STATUS寄存器的值不同)。

就像其他系统重置一样,所有RAM都将清除,PL也将重置。

怎么实现呢?

Register SLCR_UNLOCK 写入解锁密钥0xDF0D,以允许写入slcr寄存器。

所有slcr寄存器0xF800_0000可以写入0xF800_0B74,直到使用锁定为止SLCR_LOCK寄存器。读该寄存器返回零。

Register PSS_RST_CTRL处理系统软件复位控制信号。

  • 0:无影响
  • 1:置位PS软件复位脉冲(整个系统时钟发生器除外)不需要写0,硬件每次写入1都会产生一个脉冲。
  • 代码实现

    1//PSS_RST_CTRL寄存器,绝对地址,
    2#define PSS_RST_CTRL_REG 0xF8000200
    3
    4//SLCR_UNLOCK寄存器,绝对地址,
    5#define SLCR_UNLOCK_ADDR 0xF8000008
    6
    7#define UNLOCK_KEY 0xDF0D //使能码
    8
    9#define PSS_RST_MASK 0x01 //复位码
    10
    11void PsSoftwareReset(void)
    12{
    13 Xil_Out32(SLCR_UNLOCK_ADDR, UNLOCK_KEY); //写使能
    14 Xil_Out32(PSS_RST_CTRL_REG, PSS_RST_MASK); //复位
    15}

    总结

    那么就实现了系统软件复位了,只要在需要的地方调用PsSoftwareReset()函数了。

    最后说下ug585是很好的资料,在需要解决问题的时候是需要详细解析的。只是你的英文就需要好好学习啦!

    最新文章

    最新文章