我有一个用 C 语言在 Microblaze 微处理器上设计状态机的课程。我遇到的问题是我必须改变某个画面。假设我在 FPGA 上按 BTNL;我必须在 5 秒内看到一张风景照片,在 3 秒后我必须让那张照片闪烁。同时,时间 5s -> 0s 必须显示在 7 段显示器上。这是检测到按钮并且必须显示闪烁模式的情况。中断每 0.004 秒发生一次,微处理器的时钟为 100MHz。
for(j=0; j<=5secs; j++)
{
if(j>3secs)
{
if(counter == sec){
counter=0;
if(temp==white){ //white background
temp=background;
}
else temp=white;
}else counter++;
XGpio_DiscreteWrite(®ION[4],1,temp);
}
else XGpio_DiscreteWrite(®ION[4],1,temp);
if(j==5secs)
states = IDLE;
}
我的主要问题是在 7 段显示器上显示数字。当我把这个displayNumber()
功能放在箱子里时,整个东西一旦上线就冻结了displayNumber()
。我知道嵌套for
循环会花费大量时间和精力,我认为这可能会导致问题,但我找不到可行的解决方案。任何想法或建议都非常感谢。
另一件事是我尝试使用标志,但由于中断处理它不起作用。
编辑:我不想复制/粘贴我的问题的解决方案。整个事情非常庞大,我的意思是 verilog 项目以及在 c 中完成的其他功能的文件。我没想到你会跑代码并重现整个东西,因为我已经被学校提供了 Verilog 项目,所以你必须生成一个比特流,然后上传并在板上运行整个东西。我在这里只是在寻找有关您将如何改进这一点的建议,您是否遇到过 FPGA 的这种行为,有什么想法。
感谢您花时间阅读问题!