我试图编写一个驱动程序来发送并通过UART接收字符串(在fpga上实现)。以下是UART的寄存器映射图。 我已经能够写一个函数来发送一个字符串。它检查状态寄存器中的发送读位(trdy),如果它被置位,则将数据放入txdata寄存器。驱动程序使用寄存器映射在c上通过uart读取数据上的字符串
#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;
}
请不要多次提问相同的问题。如果您有添加到问题的信息,请编辑您的问题。 – duskwuff