2017-03-09 31 views
-1

我试图编写一个驱动程序来发送并通过UART接收字符串(在fpga上实现)。以下是UART的寄存器映射图。 enter image description here 我已经能够写一个函数来发送一个字符串。它检查状态寄存器中的发送读位(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”一词输出到控制台。然后我期待输入abCtrl - @然后我期待它在控制台上显示ab,但它不起作用。

我在做一些愚蠢的错误?

感谢

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

    putstring(output); 

    getstring(input); 

    putstring(input); 

    return 0; 
} 
+0

请不要多次提问相同的问题。如果您有添加到问题的信息,请编辑您的问题。 – duskwuff

回答

0

这应该读取的字符串为str;直到收到符号'\ 0'。

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

感谢您的帮助。我更新了我原来的问题。我试图在'main()'中同时使用'getstring()'和'putstring()'来在控制台上回显我的输入。有任何想法吗? – scalauser

相关问题