免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2589 | 回复: 4
打印 上一主题 下一主题

请教串口UART1驱动的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-16 16:38 |只看该作者 |倒序浏览
基于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;
        }
}

论坛徽章:
0
2 [报告]
发表于 2008-12-16 16:38 |只看该作者
那个int i 忘了去掉了,没作用的

论坛徽章:
0
3 [报告]
发表于 2008-12-16 17:30 |只看该作者




  1. #define UFSTAT1                (*(volatile unsigned *)0x50004018)
  2. #define UTXH1                 (*(volatile unsigned char *)0x50004020)

  3. void uart1_write_char(char ch)
  4. {
  5.         // 等待发送缓冲区为空
  6.         while(UFSTAT1 & 0x200)
  7.         {
  8.                 ;
  9.         }
  10.         UTXH1 = ch;
  11. }

  12. ssize_t uart1_write(struct file *filp, const char __user *buff, size_t count, loff_t *offp)
  13. {
  14.         char* kb=kmalloc(count,GFP_KERNEL);
  15.         copy_from_user(kb,buff,count);
  16.         for(;count>0;count--)
  17.         {
  18.                 uart1_write_char(*kb++);
  19.         }
  20.         kfree(kb);
  21. }

复制代码

论坛徽章:
0
4 [报告]
发表于 2008-12-16 17:46 |只看该作者
哎 搞懂了 程序都写错了!亏我想了一天班
不好意思啊

论坛徽章:
0
5 [报告]
发表于 2008-12-16 21:22 |只看该作者

回复 #4 zhulinfeiba 的帖子

呵呵,要从逻辑上进行验证
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP