- 論壇徽章:
- 0
|
基于S3c2410,linux2.6內(nèi)核,自己寫(xiě)驅(qū)動(dòng)模塊實(shí)現(xiàn)UART1的簡(jiǎn)單通信(不要中斷或DMA)。下面是我寫(xiě)的驅(qū)動(dòng)模塊中的write函數(shù),val保存的是從UTRSTAT寄存器中讀取的數(shù)據(jù),while (!val & 0x4)意思是發(fā)送數(shù)據(jù)直到傳輸buffer寄存器為空。但是感覺(jué)我的數(shù)據(jù)發(fā)不出去呢,因?yàn)関al的值一直是0(也就是傳輸buffer非空)。程序就一直在這個(gè)while()里循環(huán),請(qǐng)問(wèn)哪位前輩知道是什么原因嗎?我的這個(gè)程序本身有沒(méi)有問(wèn)題?
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;
}
} |
|