取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
sss
Observer
Observer
226 次查看
注册日期: ‎09-12-2020

ZYNQ在JTAG在线调试下如何使CPU1进入WFE状态?

看了很多复位CPU1的帖子,基本都是以下代码:
/* Assert and deassert cpu1 reset and clkstop using above sequence*/

RegVal = Xil_In32(A9_CPU_RST_CTRL);

RegVal |= A9_RST1_MASK;

Xil_Out32(A9_CPU_RST_CTRL, RegVal);

RegVal |= A9_CLKSTOP1_MASK;

Xil_Out32(A9_CPU_RST_CTRL, RegVal);

RegVal &= ~A9_RST1_MASK;

Xil_Out32(A9_CPU_RST_CTRL, RegVal);

RegVal &= ~A9_CLKSTOP1_MASK;

Xil_Out32(A9_CPU_RST_CTRL, RegVal);

 

/* lock the slcr register access */

Xil_Out32(XSLCR_LOCK_ADDR, XSLCR_LOCK_CODE);
运用了这段代码后,然而并没有达到理想效果,理想效果可以举个例子:应该是在JTAG调试后,
int main()
{
/*在没有复位CPU1前,即没用上面那段代码前*/
这时CPU0翻转LED1;CPU2翻转LED2,并打印hello world。
/*当运用上面那段代码后*/
这时理想效果是CPU0没受影响,一直亮着LED1;CPU1应该重新翻转LED2,并再次打印hello world。
}
问题来了,它并没有达到理想效果,CPU1会卡住了,即停止翻转LED2,且没有打印信息。
在上面那段代码设置断点后它会出现下图所示情况,

sss_0-1613998128500.png

 

sss_0-1613997846912.png

 

可以看到它虽然似乎已经复位了,但是却达不到我说的理想效果,所以我的想法是
希望复位后它进入WFE状态,再通过sev唤醒它,但是我不知道如何在JTAG在线调试下使CPU1进入WFE状态,或者说我的这一系列操作有问题,
请各位坛友指教!

0 项奖励
回复
4 回复数
yzhang
Xilinx Employee
Xilinx Employee
170 次查看
注册日期: ‎05-11-2010

根据UG585 v1.12.2 table 3-9 里的描述,cpu1复位后处于下面状态。

Kept in a WFE state while executing code located at address 0xFFFFFE00 to 0xFFFFFFF0

0xFFFFFE00 to 0xFFFFFFF0这段代码是循环代码,如果你还想cpu1再次进入WFE状态,就不要破坏掉这段代码。另外cpu1复位后再次启动需要重新执行L1cache和MMU table的初始化,即cpu1 app elf刚开始的那段代码。

0 项奖励
回复
sss
Observer
Observer
163 次查看
注册日期: ‎09-12-2020

@yzhang 

在复位后你确定它已经保持WFE状态?我尝试过了在复位后往0xFFFFFFF0写入cpu1 app elf的地址并发送sev唤醒它,可是并没什么用,CPU1仍会卡住或者说没有任何状态显示。

还有你说的“cpu1 app elf刚开始的那段代码”这里具体是指哪段代码,能否答疑一下,谢谢!

0 项奖励
回复
yzhang
Xilinx Employee
Xilinx Employee
153 次查看
注册日期: ‎05-11-2010

“cpu1 app elf刚开始的那段代码”就是cpu1 app elf在sdk里打开后看到的代码。UG585里关于cpu software reset后的状态描述可能不太确切。参考下面这个article。

https://www.xilinx.com/support/answers/53828.html

如果OCM的地址译码被fsbl变化了,可以参考这个帖子里的方法。

https://forums.xilinx.com/t5/Embedded-Linux/how-to-reset-CPU1-in-AMP-petalinux-bare-metal/m-p/998636#M35243

 

0 项奖励
回复
sss
Observer
Observer
116 次查看
注册日期: ‎09-12-2020

@yzhang 

你好,实在不好意思哈,我还是不是很清楚你说的“cpu1 app elf刚开始的那段代码”,是下图这段吗?

sss_0-1614082905125.png

如果是这段的话怎么加到main函数里?

同时,我也有试过你说的文章里的方法,具体如下:

sss_1-1614083271217.png

最后CPU1还是会卡住,LED2也停止了翻转,也没有再次打印信息。

 

 

0 项奖励
回复