在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于Linux的現場總線無線通信卡的實現

            基于Linux的現場總線無線通信卡的實現

            作者: 時間:2009-04-07 來源:網絡 收藏

            3.2卡的軟件設計

              無線分散控制站中卡軟件開發(fā)操作系統(tǒng)。由于系統(tǒng)802.11b協(xié)議的無線已經很成熟了,而基于Linux操作系統(tǒng)的協(xié)議棧軟件移植也比較容易。因此,選擇Linux系統(tǒng)會有效的提高卡的開發(fā)周期。

              基于Linux的與有線的通信卡在協(xié)議棧和功能塊方面大致相同,僅需將應用程序向Linux系統(tǒng)上移植即可。但由于采用了Linux系統(tǒng)在與IO模塊控制卡通信的上就相對比較復雜了。與IO模塊控制卡通信的程序流程圖如下圖3-2所示:

            圖3-2 與IO模塊控制卡通信的程序流程圖

            3.3軟件中關鍵性問題的解決

              在Linux操作系統(tǒng)下對于中斷及其它系統(tǒng)資源的操作有特定的規(guī)范,如內核模式操作和用戶模式操作具有不同操作權限,內核空間與用戶空間也不能隨意互訪。導致如協(xié)議棧無法直接對雙端口RAM進行讀寫,也無法直接向I/O模塊控制卡收發(fā)中斷,在Linux系統(tǒng)下,只有在內核模式下才可以做到。那么,怎么樣將數據寫入到雙端口RAM中,然后發(fā)送中斷信號通知對方及如何響應對方的中斷并從雙端口RAM中讀數是軟件中的關鍵性問題。

            3.3.1發(fā)中斷與注冊中斷處理程序的實現

              由于發(fā)中斷與注冊中斷處理程序是對硬件直接操作,在Linux系統(tǒng)下用戶程序無法直接對其硬件進行操作。因此,必須編寫相應的內核模塊,在內核模塊中完成發(fā)中斷與注冊中斷處理程序的操作。在用戶程序中動態(tài)加載相應內核模塊來達到用戶程序發(fā)中斷與注冊中斷處理程序的效果。其注冊中斷處理程序的內核模塊關鍵性代碼如下:

              int init_module(void) //中斷注冊模塊初始化

              { …… /* 初始化設置 */

              AT91_SYS->AIC_SMR[25]|=0X20; //設置中斷下跳沿觸發(fā)

              if (request_irq(n, interrupt_program, INTERRUPT, IRQ1,NULL))

              // 請求分配中斷號為n的快速中斷處理

              // interrupt_program為指向處理這個中斷的中斷處理程序的指針

             ?。?……/*沒有申請成功 根據返回值進行出錯處理 * / }

              else

             ?。?printk(1> 注冊中斷成功 ! n);

              return 0;}

              init_waitqueue_head(my_queue);

             ?。?p>  void cleanup_module(void)

             ?。?…… /* 釋放資源 */

              free_irq(n,NULL); //釋放中斷線n

             ?。?p>  在用戶程序中發(fā)中斷時,通過調用system(send_riq)來動態(tài)執(zhí)行內核模塊程序來控制發(fā)送中斷的管腳的信號,從而實現在用戶程序發(fā)中斷的效果。其發(fā)中斷的內核模塊關鍵性代碼如下:

              AT91_SYS->PIOC_PER |= AT91C_PIO_PC15;//設置PC15IO使能

              AT91_SYS->PIOC_OER |= AT91C_PIO_PC15;//設置PC15輸出使能

              //發(fā)送一個方波中斷信號

              AT91_SYS->PIOC_CODR |= AT91C_PIO_PC15;

              for(i=1;i

              AT91_SYS->PIOC_SODR |= AT91C_PIO_PC15;

            3.3.2雙端口RAM的實現

              由于用戶程序不能直接對雙端口RAM進行讀寫,因此必須根據用戶程序的需要編寫雙端口RAM的,以內核模塊的形式動態(tài)加載到系統(tǒng)中去。Linux系統(tǒng)將所有設備都看做是文件,對設備的讀寫相當于對文件的讀寫。雙端口RAM驅動模塊加載后,用戶程序就可以像讀寫文件一樣,間接的對雙端口RAM進行讀寫了。其雙端口RAM驅動模塊的主要實現過程如下:

              static int write_dpram(struct file *file, const char *buf, u32 count, loff_t *f_pos)

             ?。?…… /* 寫初始化 */

              copy_from_user(wMessage,buf,count);

              …… /* 進行數據處理 */

              for (i=0;i

             ?。?writeb(wMessage[i], base+wadd);

              wadd++; }

              …… /*向IO模塊控制卡發(fā)中斷信號*/

             ?。?p>  static int read_dpram(struct file *file,char *buf,u32 count,loff_t *f_pos)

             ?。?…… /*讀函數則調用相應的readb( )和copy_to_user( )函數,與寫函數同理*/}

              static int open_dpram(struct inode *inode,struct file *file )

             ?。?…… /*初始化*/

              if (!request_mem_region(AT91_DPRAM,BUF_LEN*sizeof(u8),DEVICE_NAME))

             ?。?…… /*未申請到該內存空間時進行相應處理*/} //申請使用內存空間

              base =ioremap(AT91_DPRAM,BUF_LEN*sizeof(u8));//為設備內存區(qū)域分配虛擬地址

              …… /* 設置DPRAM讀寫時序*/

             ?。?p>  static int release_dpram(struct inode *inode,struct file *file )

             ?。?…… /* 釋放相應資iounmap( )和release_mem_region();}

              以上為DPRAM設備驅動的打開、讀寫、關閉函數的實現,然后通過以下標記化結構將其驅動的功能映射到前面的具體實現函數上:

              static struct file_operations test_fops = {

              read:read_dpram,

              write:write_dpram,

              open: open_dpram,

              release:release_dpram

             ?。?

            linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


            評論


            相關推薦

            技術專區(qū)

            關閉