2017-03-09 15 views
-1

UART (FPGA에 삽입 됨)를 통해 문자열을 보내고받는 드라이버를 작성하려고합니다. 다음은 UART 용 레지스터 맵의 그림입니다. enter image description here 문자열을 보내는 함수를 작성할 수있었습니다. 상태 레지스터에서 전송 읽기 비트 (trdy)를 확인하고 설정되면 txdata 레지스터에 데이터를 저장합니다.레지스터 맵을 사용하여 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