- 论坛徽章:
- 0
|
基于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;
}
} |
|