作者: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处理系统软件复位控制信号。
代码实现
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是很好的资料,在需要解决问题的时候是需要详细解析的。只是你的英文就需要好好学习啦!