亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 2603 | 回復(fù): 4
打印 上一主題 下一主題

請(qǐng)教串口UART1驅(qū)動(dòng)的問(wèn)題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2008-12-16 16:38 |只看該作者 |倒序?yàn)g覽
基于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;
        }
}

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2008-12-16 16:38 |只看該作者
那個(gè)int i 忘了去掉了,沒(méi)作用的

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 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.         // 等待發(fā)送緩沖區(qū)為空
  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. }

復(fù)制代碼

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2008-12-16 17:46 |只看該作者
哎 搞懂了 程序都寫(xiě)錯(cuò)了!虧我想了一天班
不好意思啊

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2008-12-16 21:22 |只看該作者

回復(fù) #4 zhulinfeiba 的帖子

呵呵,要從邏輯上進(jìn)行驗(yàn)證
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP