首页 > 解决方案 > 如何使用指针正确访问点阵 MachX02 SRAM 地址

问题描述

我使用 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 来调试我的代码。那永远不会触发。

标签: cfpgalattice-diamond

解决方案


推荐阅读