我正在尝试编写一个驱动程序来发送和接收UART上的字符串(在fpga上表示)。这是UART寄存器映射的图片。 我已经能够写一个函数来发送一个字符串。它检查状态寄存器中的发送读取位(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;
}
答案 0 :(得分:0)
这应该读取str的字符串;直到符号&#39; \ 0&#39;接收。
char c = 0;
do
{
while ((uart[2] & (1<<5)) == 0);
c = uart[0];
*str++ = c;
} while (c!='\0');