版主: 51FPGA

分享到:
共1条 1/1 1   

QSPI 线性模式例子只能运行一次,设置为IO模式可以反复运行

    [您是本帖的第1183位阅读者]
xilinx论坛
我是MM
高级会员

最后登陆时间:2015-03-19 10:58:07

直达楼层
1# 发表于 2015-06-21 21:58:22

QSPI 线性模式例子只能运行一次,设置为IO模式可以反复运行

14.4带有一个QSPI工作在线性模式的例子,xqspips_flash_lqspi_example.c。它先假设QSPI工作在IO模式,读取QSPI的ID,再向QSPI写入数据,然后设置QSPI工作在线性模式,读取数据,并和写入的数据做校验。第一次运行正常。

如果单板不下电,第二次运行时,QSPI还工作在线性模式,读取ID的操作就不能完成,一直在循环,测试就会失败。

为了让QSPI测试程序可以多次运行,最好在程序结束前,重新设置其工作模式。设置工作模式的代码是:

XQspiPs_SetOptions(QspiInstancePtr, XQSPIPS_FORCE_SSELECT_OPTION |
XQSPIPS_MANUAL_START_OPTION |
XQSPIPS_HOLD_B_DRIVE_OPTION );
u32Option = XQspiPs_GetOptions( QspiInstancePtr );
xil_printf("QSPI option: 0x%x before exit.\n\r", u32Option );
ControlReg = XQspiPs_ReadReg(QspiInstancePtr->Config.BaseAddress,
XQSPIPS_CR_OFFSET);
LinearControlReg = XQspiPs_ReadReg(QspiInstancePtr->Config.BaseAddress,
XQSPIPS_LQSPI_CR_OFFSET);
xil_printf("ControlReg: 0x%08x, LinearControlReg: 0x%08x, .\r\n", ControlReg, LinearControlReg);

 

或者在进入测试时,检查QSPI的工作模式。如果没有工作在IO模式,则强制设置成IO模式。代码如下:

ControlReg = XQspiPs_ReadReg(QspiInstancePtr->Config.BaseAddress,
XQSPIPS_CR_OFFSET);
LinearControlReg = XQspiPs_ReadReg(QspiInstancePtr->Config.BaseAddress,
XQSPIPS_LQSPI_CR_OFFSET);
xil_printf("ControlReg: 0x%08x, LinearControlReg: 0x%08x, .\r\n", ControlReg, LinearControlReg);

if ((LinearControlReg & XQSPIPS_LQSPI_CR_LINEAR_MASK) != 0) {
xil_printf("QSPI works as linear mode before.\r\n");
LinearControlReg &= 0x7fffffff;
XQspiPs_WriteReg(QspiInstancePtr->Config.BaseAddress,
XQSPIPS_LQSPI_CR_OFFSET, LinearControlReg);
}

共1条 1/1 1   
快速回复主题
  • 匿名不能发帖!请先 [ 登陆 注册 ]