<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于uclinux 的CAN總線嵌入式驅(qū)動編程

          基于uclinux 的CAN總線嵌入式驅(qū)動編程

          作者: 時間:2013-04-06 來源:網(wǎng)絡(luò) 收藏

            模塊首先對引用的庫函數(shù)進行申明,并且定義:
            #define IOPMOD (*(volatile unsigned *)0x3ff5000)
            #define IOPDATA (*(volatile unsigned *)0x3ff5008)
            #define IOPCON (*(volatile unsigned *)0x3ff5004)
            #define EXTDBWTH(*(volatile unsigned *)0x3ff5
            #define SYSCFG(*(volatile unsigned *)0x
            主要有以下幾個模塊:
            void can_init(void)
            {
            SYSCFG =SYSCFG 0x0fffffffd;
            EXTDBWTH =EXTDBWTH 0x00ff0ff;
            IOPMOD=0xf0ff;
            IOPDATA=0x6000; 寄存器地址0,MOD寄存器
            IOPDATA= IO_PDATA0xdfff; ALE=0 配置MOD寄存器
            IOPDATA= IO_PDATA|0x3f; ; 復(fù)位模式、使能
            IOPDATA=0x6006; ;寄存器地址6,總線定時器0寄存器
            IOPDATA=IO_PDATA0xdfff; ALE=0配置寄存器
            IOPDATA= IO_PDATA|0x3f; 跳轉(zhuǎn)寬度、波特率設(shè)置
            ……;配置總線定時器1、驗收代碼寄存器等
            IOPDATA=0x6000; SJA1000 寄存器地址0,MOD寄存器
            IOPDATA=IO_PDATA0xdfff; ALE=0配置MOD寄存器
            IOPDATA= IO_PDATA0xfe;寫復(fù)位位,進入工作模式
            result = register_chrdev(254,"can",can_fops);申請主設(shè)備號
            if (result0) {
            printk(KERN_WARNING "CAN:can’t getmajor ", result);
            return result;
            }
            在該驅(qū)動程序中,定義結(jié)構(gòu)變量can_fops為應(yīng)用程序訪問內(nèi)核的接口:
            static struct file_operations can_fops = {
            read: can_read,
            write: can_write,
            open: can_open,
            release: can_release,
            }; 
            static int can_release(struct inode *inode, struct file *file)
            {
            MOD_DEC_USE_COUNT; ;用戶減計數(shù)
            Return 0;
            }
            static int can_open(struct inode *inode,struct file *file)
            {
            Scull_Dev *dev;
            Int num = NUM(inode->i_rdev); 設(shè)備號
            Int type = TYPE(inode->i_rdev); 設(shè)備類型
            If (num>=scull_nr_devs) return -ENODEV;
            dev = scull_devices[num];
            flip->private_data = dev;
            MOD_INC_USE_COUNT; 用戶數(shù)人工計數(shù)
            IOPCON=0x16; //xIRQ0
            disable_irq(INT_can);
            if(request_irq(INT_can, can_rx,
            SA_INTERRUPT, "can rx isr","can")) {
            printk("s3c4510-can: Can't get irq %d",
            INT_sja1000);
            return -EAGAIN;
            }
            printk("can has get irq 0");
            enable_irq(INT_can);
            …… ; 配置SJA1000內(nèi)部中斷及屏蔽寄存器
            return 0;
            }

            7 結(jié)束語

            本文介紹了在嵌入式系統(tǒng)中的驅(qū)動編程,對技術(shù)在嵌入式系統(tǒng)中的應(yīng)用進行了探索.本設(shè)計已在通信用逆變電源遠程監(jiān)控系統(tǒng)中應(yīng)用.

          參考文獻:

          [1].S3C4510Bdatasheethttp://www.dzsc.com/datasheet/S3C4510B_59.html.
          [2].RISCdatasheethttp://www.dzsc.com/datasheet/RISC_1189725.html.
          [3].SJA1000datasheethttp://www.dzsc.com/datasheet/SJA1000_609075.html.
          [4].PCA82C200datasheethttp://www.dzsc.com/datasheet/PCA82C200_554.html.
          [5].p12datasheethttp://www.dzsc.com/datasheet/p12_2043488.html.
          [6].p13datasheethttp://www.dzsc.com/datasheet/p13_2043489.html.
          [7].p15datasheethttp://www.dzsc.com/datasheet/p15_1204152.html.


          上一頁 1 2 3 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();