UART (FPGA에 삽입 됨)를 통해 문자열을 보내고받는 드라이버를 작성하려고합니다. 다음은 UART 용 레지스터 맵의 그림입니다. 문자열을 보내는 함수를 작성할 수있었습니다. 상태 레지스터에서 전송 읽기 비트 (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"라는 단어를 콘솔에 출력합니다. 그런 다음 a
b
Ctrl - @
을 입력하고 콘솔에 ab
을 표시 할 것으로 예상했지만 작동하지 않습니다.
내가 멍청한 짓을하고 있니?
감사
int main(void)
{
char output[] = "Test";
char input[2];
putstring(output);
getstring(input);
putstring(input);
return 0;
}
동일한 질문을 여러 번하지 마십시오. 질문에 추가 할 정보가 있으면 질문을 편집하십시오. – duskwuff