驱动程序使用寄存器映射在c中通过uart读取数据的字符串

时间:2017-03-09 10:11:32

标签: c driver fpga cpu-registers uart

我正在尝试编写一个驱动程序来发送和接收UART上的字符串(在fpga上表示)。这是UART寄存器映射的图片。 enter image description here 我已经能够写一个函数来发送一个字符串。它检查状态寄存器中的发送读取位(trdy),如果已设置,则将数据放入txdata寄存器。

#define UART_BASE 0x00021000

int putstring(char *str) {

    volatile uint32_t *uart = (volatile uint32_t*) UART_BASE;

    while (1)
    {
        while (*str != '\0')
        {
            while ((uart[2] & (1<<6)) == 0);
             uart[1] = *str;
             str++;
          }
       }
}

我的问题是我现在正在尝试读取字符串,但我正在努力解决逻辑问题。我希望它继续读取字符,直到用户点击Enter。这是一个菜单。

我想知道是否有人可以提供建议?

void getstring(char *str) {

volatile uint32_t *uart = (volatile uint32_t*) UART_BASE;

char c = 0;
do
{
    while ((uart[2] & (1<<5)) == 0);
    c = uart[0];
    *str++ = c;
}
while (c!='\0');


}

这是我的主要功能。它将“test”输出到控制台。然后我希望输入a b Ctrl - @然后我希望它在控制台上显示ab但它不起作用。

我做了一些愚蠢的错事吗?

由于

int main(void)
{
    char output[] = "Test";
    char input[2];

    putstring(output);

    getstring(input);

    putstring(input);

    return 0;
}

1 个答案:

答案 0 :(得分:0)

这应该读取str的字符串;直到符号&#39; \ 0&#39;接收。

char c = 0;
do
{
      while ((uart[2] & (1<<5)) == 0);
         c = uart[0];
         *str++ = c;
} while (c!='\0');