请教串口UART1驱动的问题
基于S3c2410,linux2.6内核,自己写驱动模块实现UART1的简单通信(不要中断或DMA)。下面是我写的驱动模块中的write函数,val保存的是从UTRSTAT寄存器中读取的数据,while (!val & 0x4)意思是发送数据直到传输buffer寄存器为空。但是感觉我的数据发不出去呢,因为val的值一直是0(也就是传输buffer非空)。程序就一直在这个while()里循环,请问哪位前辈知道是什么原因吗?我的这个程序本身有没有问题?
ssize_t uart1_write(struct file *filp, const char __user *buff, size_t count, loff_t *offp)
{
char kernel_buf;
int val,i;
struct scull_uart1_device *dev = (struct scull_uart1_device*)filp->private_data;
printk(KERN_INFO"user buf: %d\n", *buff);
val = __raw_readl(S3C2410_VA_UART1 + S3C2410_UTRSTAT);
while (!val & 0x4){
mdelay(500);
if (copy_from_user(&kernel_buf, buff, count)) {
printk(KERN_ALERT "Copy from user error.\n");
return -EFAULT;
}
printk(KERN_INFO"val = %d\n", val);
__raw_writel(kernel_buf, S3C2410_VA_UART1 + S3C2410_UTXH);
val = __raw_readl(S3C2410_VA_UART1 + S3C2410_UTRSTAT);
int i;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
那个int i 忘了去掉了,没作用的
复制代码
哎 搞懂了 程序都写错了!亏我想了一天班
不好意思啊
呵呵,要从逻辑上进行验证