我使用 Lattice Mico8 处理器作为我的 SoC 处理器,以及一个 UART 和一个 SRAM。我正在尝试创建一个软件来与我的 Verilog 代码对话。为此,我使用指针从 UART 获取值,存储在 SRAM 中,然后在硬件中检索。我用地址初始化指针,并根据需要递增。但是,我从 UART 获取的值似乎从未存储在 SRAM 地址中。我什至无法在拿到它后立即将其打印回来,即使我应用了一些延迟。我试图让指针指向另一个变量的地址,这样,我可以在得到它后打印回 UART。我在这里做错了什么吗?或者说SRAM有问题。我在需要帮助的地方发布了一小段代码。
void My_Funt (MicoUartCtx_t *pUart, int *sramaddr)
{
int loopvar;
char rcvdChar;
sramaddr =(int *)0x804;
for ( loopvar =0;loopvar<7;loopvar++)
{
MicoUart_getC (pUart, &rcvdChar);
if ( loopvar == 0 )
{
if ( ( rcvdChar == 0x2B)|( rcvdChar == 0x2D))
;
else
{
SendString (pUart, WRNG_MSG_1);
break;
}
}
else if ( loopvar == 4 )
{
if ( rcvdChar != 0x2E)
{
SendString (pUart, WRNG_MSG_1);
break;
}
}
else if ( ( loopvar == 6 ) || ( loopvar == 7 ) )
{
if ( rcvdChar == '\r') break;
else if ( ( (int)(rcvdChar) >= 48 )&&( (int)(rcvdChar) <= 57 ) )
;
else
{
SendString (pUart, WRNG_MSG_1);
break;
}
}
else
{
if ( ( (int)(rcvdChar) >= 48 )&&( (int)(rcvdChar) <= 57 ) )
;
else
{
SendString (pUart, WRNG_MSG_1);
break;
}
}
if ( rcvdChar == '\r') break;
*sramaddr = rcvdChar;
MicoUart_putC (pUart, rcvdChar);
MicoSleepMicroSecs (100)
MicoUart_putC (pUart, (char) *sramaddr); // this line was edited to test if the value was retrievable from the SRAM
sramaddr++;
}
sramaddr =(int *)0x810;
*sramaddr = loopvar;
}
至少我希望将值放在 UART 屏幕上,只是为了知道它在 SRAM 中。我尝试使用 Lattice Reveal System 通过将触发器设置为 SRAM 的 CS 来调试我的代码。那永远不会触发。