检查THRE是否通过串口发送字符

时间:2013-05-08 16:56:09

标签: c linux uart

我正在尝试使用以下命令将字符串发送到串行端口:

#define UART    0x03f8
...
#define UART_LSR_THRE 0x20
...
void UART_send(unsigned char *data){
     int i = 0, k = strlen(data);
     printk("UART_send invoked, data is %s and k is %d\n", data, k);
     while(i < k){
       while( !(inb(UART + UART_LSR_THRE)) ){
             printk("called\n");
             schedule();
       }
       if(i < k){
             outb(data[i++], (UART + UART_TX));
       }
    }
}

例如,在尝试编写ABCDEF时,有时会跳过字母或多次打印它们。我的猜测是我没有正确地验证THRE的状态,因为它不仅是错误的结果,而while()在那里似乎没有做任何事情。有什么想法吗?

0 个答案:

没有答案