<strike id="kiyse"></strike>
  • <tr id="kiyse"></tr>
  • <strike id="kiyse"></strike><samp id="kiyse"><tbody id="kiyse"></tbody></samp>
    <strike id="kiyse"><s id="kiyse"></s></strike>
    <tr id="kiyse"></tr>
    <noframes id="kiyse"><code id="kiyse"></code></noframes>
    <th id="kiyse"></th>
    <samp id="kiyse"></samp>
  • <th id="kiyse"><s id="kiyse"></s></th>
  • EM9280 Linux下AD驅動的應用

     2013-5-8              

    1、Linux驅動程序調用方法概述

            在Linux環境中,通過驅動程序來操作相應硬件接口,對于應用程序來說就是打開特定文件名稱的文件,然后通過常規的對文件讀寫或控制的方法,來實現對硬件接口的訪問。在嵌入式系統中,對硬件的讀寫通常采用ioctl函數的形式,其典型的流程如下:

     


    流程實現功能實現函數備注
    第一步打開文件  fd = open(devname, …);  特定設備文件名稱
    第二步訪問接口

      rc = ioctl(fd, cmd, …);

      rc = read(fd, buf, size);

      rc = write(fd, buf, size);

      可能調用多次,多種cmd
    第三步關閉文件  close(fd);  不再操作,則關閉


     

            其中ioctl(…)的基本定義為:

            int ioctl(int fd, int cmd, unsigned long arg);

            輸入參數 fd: 為打開文件獲得的文件描述符
                             cmd: 操作命令碼,在EM9280_drivers.h頭文件中以定義
                             arg: 需要傳遞的參數指針,不同的命令必須嚴格匹配相應的參數類型

            返回值 = 0: 調用成功
                        = EBADF: 非法文件描述符
                        = EFAULT: arg指向不可訪問的內存空間 
                        = EINVAL: 非法的cmd或arg參數
                        = ENOTTY: 文件描述符未指向特殊的字符設備

     

    2、EM9280 AD驅動的應用

            EM9280共有2路低速的模擬AD通道AIN1和AIN2,輸入量程為0 – 3.6V,AD分辨率12-bit。所謂低速通道,表示這兩個通道只能用于外部的直流或慢變化類型的信號。除此之外,EM9280還可提供對輸入的+5V電源電壓、+3.3V電源電壓以及核心CPU基片溫度的監測。

     

            EM9280 AD驅動是以模塊(module)形式提供給客戶,相應的驅動文件放在根文件系統中:/lib/modules/2.6.35.3/em9280_ad.ko,EM9280 AD驅動所對應的設備文件名稱為“/dev/em9280_ad”。

     

            首先需要加載em9280_ad驅動:
            #>insmod /lib/ modules/2.6.35.3/em9280_ad.ko

     

            然后應用程序可打開AD驅動程序對應的設備文件“/dev/em9280_ad”,可多次調用read( )來讀取各類數據。read( )函數需要帶上如下結構數據:

     

            struct daq_info
            {
                    unsigned int cmd; // 命令碼 = 0, 1, 2, ....
                    unsigned int data; // 返回的AD數據
                    char unit[16]; // 返回的單位字串: 'mV', 'Kalvin'等 
            } ;

     

            其中cmd參數用于定義AD通道:
            0 ---- AD采集通道1
            1 ---- AD采集通道2 
            2 ---- +5V電源電壓
            3 ---- +3.3V電源電壓
            6 ---- 核心CPU基片溫度

     

            注意返回的溫度參數均為開氏溫度,轉換成攝氏溫度,大致減去273即可。在此基礎上,應用程序的典型代碼如下:

     

            int main(int argc, char** argv)
            {
                    int fd;
                    int i1, rc;
                    int nChIndex;
                    struct daq_info ad;

                    printf('Driver em9280_ad test v1.0\n');

                    nChIndex = 1;
                    if(argc > 1)
                    {
                            nChIndex = atoi( argv[1] );
                    }

                    fd = open('/dev/em9280_ad', O_RDWR);
                    printf('open file = %d\n', fd);
                    if( fd<0 )
                    {
                            return -1;
                    }

                    ad.cmd = nChIndex;

                    for( i1=0; i1<20; i1++)
                    {
                            rc = read(fd, (void*)&ad, sizeof(ad) );
                            printf( 'nValue = %d (%s)\n', ad.data, ad.unit );
                            sleep(1);
                    }

                    close(fd);
                    printf('close file\n');
                    return 0;
            }

    四虎8848精品永久在线观看| 亚洲精品无码成人AAA片| 99久久亚洲精品无码毛片| 国产亚洲高清在线精品不卡| 国产精品亚洲自在线播放页码| 91精品国产自产在线观看| 97久久精品午夜一区二区| 国模吧一区二区三区精品视频| 久久精品国产清自在天天线| 国产精品夜夜春夜夜爽久久小| 久久99精品九九九久久婷婷| 精品国产一区二区三区av片| 久久精品免费一区二区| 久久精品国产亚洲av麻| 91精品国产福利尤物| 亚洲国产精品一区二区三区久久| 国产精品久久久久乳精品爆| 日本娇小videos精品| 人妻少妇精品视频二区 | 国产网红无码精品视频| 四虎永久在线精品免费一区二区| 亚洲av无码成人精品区一本二本 | 国产在线精品美女观看| 老司机67194精品线观看| 国产午夜无码精品免费看| 国产香蕉国产精品偷在线| 国产精品无码亚洲一区二区三区| 中文字幕色婷婷在线精品中 | 国产精品人人做人人爽人人添| 国产精品亚洲一区二区三区久久 | 欧美成人aaa片一区国产精品| 免费91麻豆精品国产自产在线观看| 国产乱码精品一区二区三| 国产精品玖玖美女张开腿让男人桶爽免费看 | 国产乱码精品一区二区三区中文| 久久精品亚洲男人的天堂| 狠狠色伊人久久精品综合网| 国产国拍亚洲精品福利| 国产精品久久久久一区二区三区| 久久久精品久久久久影院| 在线精品视频一区二区|