《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > MAX1202在嵌入式系統中的驅動程序設計及應用
MAX1202在嵌入式系統中的驅動程序設計及應用
2014年微型機與應用第24期
陳 晨,王進華
(福州大學 電氣工程與自動化學院,福建 福州 350108)
摘要: 首先介紹了MAX1202的基本性能和特點,詳細闡述了MAX1202在嵌入式Linux中驅動程序的實現方法,最后介紹了編寫應用程序測試驅動程序的基本方法,為嵌入式Linux系統下的驅動設計提供一個模板。
Abstract:
Key words :

  摘  要: 首先介紹了MAX1202的基本性能和特點,詳細闡述了MAX1202在嵌入式Linux驅動程序的實現方法,最后介紹了編寫應用程序測試驅動程序的基本方法,為嵌入式Linux系統下的驅動設計提供一個模板。

  關鍵詞: MAX1202;驅動程序;A/D轉換;嵌入式Linux

0 引言

  科技的進步使智能化設備越來越多地應用到工業生產、農業種植、醫療衛生、航天設備甚至是居民的日常生活中,智能化設備要處理一些環境中的物理量就需要使用相關傳感器將其轉化成電量,如電壓、電流等。但是這些量要送給處理器處理,則必須要通過模/數轉換器進行轉換。

  本文中采用MAX1202模/數轉換器和友善之臂的Micro2440開發板,開發板使用三星公司的s3c2440的ARM9微處理器。在Linux系統中開發MAX1202驅動程序并編寫應用程序進行驅動程序的測試。

1 芯片介紹

  MAX1202是一款8通道12位串行A/D轉換器。串行接口工作頻率最高可以達到2 MHz[1]。工作采用單端+5 V供電或雙端±5 V供電。內部有一個8通道的多路轉換器、高帶寬的跟蹤/保持電路以及高轉換速度和低功耗的串行接口,芯片提供了符合SPI通信標準的SPI接口,以便于編程實現數據的轉換。

  其典型應用電路如圖1所示。

001.jpg

2 驅動程序設計

  Linux驅動程序使用module_init宏中所定義的初始化函數注冊該驅動及初始化硬件設備;使用module_exit宏中定義的注銷函數注銷設備,釋放相關資源。

  結構struct file_operations列出了設備驅動程序可供應用程序調用的所有函數。其中的成員都是函數指針,指向該函數的入口執行位置,當應用程序調用open、read、write等函數時,驅動程序會通過該結構找到對應應該執行的M1202函數,進而根據傳入的參數執行,以響應應用程序的調用。驅動程序的編寫主要就在于file_operations結構體中各驅動函數的實現,并不是每一個函數都要實現[2],對于不需要實現的函數可以賦值為空,也可以在函數實現中直接返回0,或直接調用系統默認的實現函數。MAX1202的file_operations結構體定義如下:

  static const struct file_operations M1202_fops=

  {

  .owner=THIS_MODULE,

  .open=M1202_open,

  .read=M1202_read,

  .write=M1202_write,

  .ioctl=NULL,

  };

  2.1 模塊初始化函數M1202_init

  在驅動加載時,系統進程會通過module_init(M1202_init)宏找到所定義的驅動初始化函數M1202_init(),進行驅動程序的加載。主設備號可以自已定義,向函數MKDEV(M1202_major,0)傳遞主次設備號產生dev_t類型的devno結構[3];也可以由alloc_chrdev_region(&devno,0,1,M1202_name)函數自動分配主設備號;本例中自己定義主設備號,然后由register_chrdev_region(devno,1,M1202_name)函數在Linux中為驅動程序獲取設備編號;接著就是向Linux內核注冊字符設備,指出該驅動可提供給應用程序的接口結構。實現代碼如下:

  cdev_init(&M1202Cdev,&M1202_fops);

  M1202Cdev.owner=THIS_MODULE;

  M1202Cdev.ops=& M1202_fops;

  cdev_add(&M1202Cdev,devno,1);

  代碼中省去了錯誤調試信息。

  2.2 設備打開函數M1202_open

  s3c2440芯片配備了2組SPI接口[4],Micro2440開發板引出了一組SPI1,對應是PA7、PA8、PA9、PA10引腳,這是一組可以復用的端口,既可以用中斷、普通端口,也可以用于SPI通信。MAX1202在外部時鐘模式下的工作時序如圖2所示。

002.jpg

  查看MAX1202在外部時鐘模式下的工作時序可以發現,在控制字送入的8個時鐘后,芯片即開始了邊輸出邊轉換的過程,相比較內部時鐘模式的轉換完成后再讀取輸出結果而言,有著更快的轉換效率,故采用外部時鐘模式。在控制字輸出后,轉換結果緊跟著輸出,為了減少頻繁對寄存器的操作,降低編程的難度,采用普通輸出端口輪流輸出高低電平的方法模擬主SPI設備的時鐘輸出。使用s3c2410_gpio_cfgpin(S3C2410_GPG11,S3C2410_GPG11_OUTP);將GPG11端配置成輸出端口用于輸出MAX1202工作時所需的片選信號;類似地用s3c2410_gpio_cfgpin()函數配置GPG6、GPG7端為輸出端,分別用于產生MAX1202的控制字輸入與時鐘輸入;使用s3c2410_gpio_cfgpin(S3C2410_GPG5,S3C2410_GPG5_INP);將GPG5端口配置成輸入端口,用于讀取MAX1202的Dout端的輸出結果。在MAX1202正式工作前需將片選端CS端置為1,相應地有s3c2410_gpio_setpin(S3C2410_GPG3,1);函數;另外三個端口s3c2410_gpio_setpin函數配置為0。這些就是open函數所需要完成的端口配置。

  2.3 寫函數M1202_write

  設備打開后,每次轉換之前,需要向MAX1202寫控制字,以設置MAX1202選通的工作通道、時鐘模式、信號輸入模式等。MAX1202控制字格式如表1所示。

004.jpg

  Bit7:起始位一般選擇1,用于標識控制字的開始;

  Bit6~Bit4:是8路通道的選擇,在單端模式下,依據8421編碼,000對應第0通道CH0,001對應第1通道CH1,010對應第2通道CH2,以此類推;

  Bit3:為信號的單雙極性選擇位,這里選擇1,單極性;

  Bit2:為信號輸入方式選擇位,這里選擇1,單端輸入;

  Bit1~Bit0:時鐘和斷電模式選擇位,這里選擇11,外部時鐘。

  驅動屬于內核的一部分,而應用程序屬于用戶空間,內核空間和用戶空間的數據不能共享,數據的傳輸需要使用特定的函數copy_from_user()和copy_to_user()。因此,由應用程序傳入的控制字信息需要使用copy_from_user()傳入內核空間。使用循環移位和與操作,輪流讀取8位控制字的每一位,由s3c2410_gpio_setpin(S3C2410_GPG6,X)函數將各位值輸出到MAX1202得DIN端,在時鐘的下降沿由MAX1202讀取,X代表了要傳輸的一位值。

  2.4 讀函數M1202_read

  在外部時鐘模式下,控制字輸入完后即可在緊接著的16個時鐘周期內讀取轉換結果,這16位轉換結果的最低4位為無效位,均為0,雖然無效,但必須在時鐘的作用下讀取出來,不然會影響到下一次的轉換結果,故函數讀取16位后左移4位用于消除低4位的無效位。while函數的執行條件控制讀取次數為16次,s3c2410_gpio_getpin(S3C2410_GPG5)用于從MAX1202的DOUT端讀入當前時鐘下的輸出值。讀取結束后,要使用copy_to_user()函數將得到的結果傳遞到用戶空間,以供顯示或處理。

  2.5 模塊卸載函數M1202_exit

  模塊卸載函數首先要刪除字符設備,然后釋放占用的驅動設備號,以供其他的設備使用。

  cdev_del(&M1202Cdev);

  unregister_chrdev_region(MKDEV(M1202_major,0),1);

3 MAX1202在嵌入式系統中的應用

  3.1 設備驅動的加載

  Linux下的驅動有靜態加載和動態加載兩種方式[5]。靜態加載將驅動程序編譯到內核里,系統啟動后直接可以由應用程序調用,但每次修改驅動程序都必須重新編譯內核,較麻煩。動態加載是在系統啟動后使用insmod命令,把編譯好的M1202.ko文件加載到系統中,不需要時可以使用rmmod命令卸載。但是在重新開機之后,該驅動就沒了,需要重新加載。故靜態加載適合于驅動開發完成后的產品量化;而動態加載適合于驅動開發過程中頻繁的修改。

  在開發板中驅動的動態加載方法:

  #cd/lib/modules/2.6.32.3-FriendlyARM

  #insmod M1202.ko

  #mknod/dev/M1202 c 55 0

  在Linux中,設備被當做文件一樣處理,任何可用設備在/dev/目錄下都會有一個對應的設備文件,使用mknod命令創建設備節點,在應用程序中即可像操作文件一樣操作該設備。

  3.2 數據采集

  驅動加載并且創建了設備節點后就可以編寫應用程序進行電壓數據的采集。

  使用open函數以只讀的方式打開已經創建了的M1202節點即打開了MAX1202硬件。傳入控制字0x8F給write函數,開啟通道0的轉換,使用單極性單端輸入外部時鐘模式,read函數將轉換結果保存到指針num所指向的地址中,然后就可以打印或者處理轉換結果,最后像關閉文件一樣使用close()函數關閉設備。使用交叉編譯指令#arm-linux-gcc╞o M1202test M1202test.c編譯后生成應用程序文件M1202test,通過串口導入Micro2440中或將應用程序文件放到網絡根文件系統中,#chmod+x M1202test增加文件的可執行權限,#./M1202test執行可執行文件,即可對通道0引腳的數據進行采集轉換。

  部分應用程序如下:

  int fd=open(“/dev/M1202”,0_RDWR);

  int ctlword=0x8F;

  write(fd,ctlword,1);

  read(fd,&num,2);

  printf(“num=%d\n”,num);

  close(fd);

  在實際使用中可以使用for(int i=0,i<8,i++)和ctlword=ctlword|(i<<4);改變控制字的Bit6-Bit4位,循環采集引腳0-7端輸入的電壓,或者根據需要使用其中部分引腳。經測試,A/D轉換結果較好,在轉換誤差范圍內。

4 結論

  隨著智能化設備的發展,嵌入式系統將涉及生活中的方方面面。本文詳細介紹了MAX1202在嵌入式Linux系統中的驅動程序的開發方法,對于相關驅動程序的開發有一定的參考價值,且該MAX1202的A/D實現方法也可以應用到一些工程實際中去。

  參考文獻

  [1] 蔣雙梅,高敦堂,都思丹.8通道12位串行A/D轉換器MAX1202及其應用[J].微電子學,2000,30(6):437-440.

  [2] 韋東山.嵌入式Linux應用開發完全手冊(第1版)[M].北京:人民郵電出版社,2008.

  [3] 付興武,張軍,王洋.基于SPI總線協議的字符設備驅動程序[J].計算機系統應用,2013,22(2):146-150.

  [4] 楊小容,陳建政.串口AD嵌入式Linux驅動實現[J].中國測試,2010,36(2):84-87.

  [5] 黃智偉,鄧月明,王彥.ARM9嵌入式系統設計基礎教程(第1版)[M].北京:北京航空航天大學出版社,2008.


此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲欧洲精品成人久久奇米网| 亚洲国产精品一区二区www在线| 欧美激情二区三区| 欧美一级二级三级蜜桃| 亚洲黄色在线看| 欧美日韩中文字幕在线视频| 欧美伊人久久久久久久久影院| 欧美四级伦理在线| 国产日韩在线亚洲字幕中文| 久久一区二区三区av| 欧美女激情福利| 国产精品一卡| 久久免费高清| 久久伊伊香蕉| 性8sex亚洲区入口| 日韩系列在线| 久久免费视频在线观看| 亚洲国产精品123| 亚洲尤物视频网| 在线亚洲精品| 久久久噜噜噜久久中文字免| 欧美色视频一区| 激情亚洲一区二区三区四区| 亚洲免费高清视频| 国语自产精品视频在线看抢先版结局| 欧美人与性动交α欧美精品济南到| 亚洲国产天堂久久国产91| 国自产拍偷拍福利精品免费一| 国产精品私人影院| 欧美极品在线视频| 国产三区二区一区久久| 一区二区三区日韩| 久久亚洲国产精品一区二区| 老司机午夜精品视频在线观看| 亚洲国产精品日韩| 亚洲国产一成人久久精品| 欧美一级在线亚洲天堂| 亚洲欧洲日本在线| 亚洲国产成人午夜在线一区| 国产精品一区二区三区乱码| 国际精品欧美精品| 在线观看中文字幕不卡| 久久国产精品久久久久久| 精品成人国产在线观看男人呻吟| 午夜精品999| 国产一区二区激情| 亚洲美女少妇无套啪啪呻吟| 欧美另类亚洲| 免费人成精品欧美精品| 蜜臀av国产精品久久久久| 噜噜噜91成人网| 免费在线视频一区| 欧美色区777第一页| 国产精品日韩在线一区| 国模 一区 二区 三区| 狠狠色伊人亚洲综合网站色| 国产麻豆精品theporn| 欧美日韩成人在线| 国产精品视频在线观看| 欧美色区777第一页| 欧美国产欧美亚洲国产日韩mv天天看完整| 在线观看福利一区| 国产午夜精品理论片a级大结局| 久久精品盗摄| 欧美日韩日日夜夜| 在线观看日韩一区| 亚洲天堂av电影| 国产精品视频在线观看| 欧美成人午夜免费视在线看片| 国产日韩在线视频| 欧美成在线观看| 欧美h视频在线| 久久久亚洲欧洲日产国码αv| 国产伦精品一区| 91久久精品国产91久久| 国产精品综合色区在线观看| 日韩午夜在线观看视频| 1204国产成人精品视频| 亚洲欧美综合v| 国产日韩一区| 亚洲国产第一| 午夜影视日本亚洲欧洲精品| 久久亚洲精品欧美| 国语自产偷拍精品视频偷| 国产综合久久久久影院| 久久精品成人欧美大片古装| 久久久精品国产免大香伊| 国产精品夜色7777狼人| 久久精品免视看| 另类成人小视频在线| 狠狠色丁香婷婷综合| 激情小说另类小说亚洲欧美| 在线观看视频一区| 欧美日韩小视频| 老司机成人网| 欧美一区二区三区啪啪| 午夜一区在线| 亚洲精品乱码视频| 91久久在线| 久久疯狂做爰流白浆xx| 一区二区高清| 一区二区三区在线不卡| 欧美精品一区视频| 国产精品美女久久久| 久久国产一二区| 影音先锋久久| 久久精品视频亚洲| 久久国内精品自在自线400部| 国产一区二区欧美| 亚洲精品免费观看| 久久精品国产成人| 欧美电影在线观看完整版| 国产美女精品人人做人人爽| 欧美视频在线观看视频极品| 在线免费不卡视频| 欧美高清视频一区| 亚洲国产成人精品视频| 亚洲免费观看高清在线观看| 欧美日本在线看| 国产乱码精品一区二区三区五月婷| 欧美人妖另类| 亚洲小少妇裸体bbw| 国产一区二区三区四区五区美女| 久久夜色精品国产噜噜av| 国产亚洲欧美一区二区| 亚洲第一网站| 欧美在线亚洲综合一区| 国产精品videossex久久发布| 狠狠网亚洲精品| 亚洲深夜av| 亚洲激情电影中文字幕| 亚洲调教视频在线观看| 欧美国产国产综合| 亚洲黄色视屏| 国产精品成人国产乱一区| 亚洲国产欧美不卡在线观看| 欧美精品情趣视频| 国产精品国产三级国产专区53| 久久免费高清| 欧美午夜精品久久久久久久| 欧美一区二区在线免费观看| 麻豆91精品91久久久的内涵| 欧美视频久久| 国产精品久久久久久超碰| 国产精品亚发布| 久久综合亚洲社区| 欧美+亚洲+精品+三区| 亚洲精品一区二区三区在线观看| 欧美亚洲免费电影| 国产在线高清精品| 怡红院精品视频在线观看极品| 欧美一区二区视频网站| 欧美va日韩va| 国产欧美日韩视频一区二区三区| 免费久久久一本精品久久区| 国产精品视屏| 久久免费视频在线观看| 欧美日韩国产综合一区二区| 在线一区二区三区四区| 久久久久久高潮国产精品视| 伊人成人在线| 韩国视频理论视频久久| 久久国产精品亚洲77777| 欧美成人在线影院| 亚洲黄色成人| 欧美日韩国产在线播放网站| 亚洲欧美日韩在线高清直播| 亚洲精品一区在线| 亚洲欧美中文另类| 中文国产一区| 国产区亚洲区欧美区| 久久夜色精品国产噜噜av| 欧美国产日韩免费| 欧美成人一区在线| 在线精品视频免费观看| 国产伦理精品不卡| 欧美高清视频免费观看| 精品动漫3d一区二区三区| 国产精品久久久99| 欧美亚洲专区| 久久精品国产久精国产思思| 欧美精品久久99| 六月婷婷一区| 欧美日韩免费观看一区=区三区| 国产日韩一区二区三区在线| 国产精品久久久久久久一区探花| 国产一区999| 欧美激情第三页| 欧美视频日韩| 亚洲欧洲一区二区三区| 小黄鸭视频精品导航| 免费在线观看成人av| 欧美黄免费看| 国产精品视频yy9299一区| 欧美精品久久99久久在免费线| 欧美日韩精品一区二区天天拍小说| 鲁大师影院一区二区三区| 国产精品久久久久一区二区三区| 亚洲美女在线观看| 亚洲精品一区二区网址| 欧美日本在线观看| 亚洲免费不卡| 国产精品成人观看视频国产奇米| 欧美日韩亚洲一区三区| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美视频在线观看一区二区| 正在播放欧美一区| 欧美日韩裸体免费视频| 久久精品亚洲一区二区三区浴池| 欧美日韩一区在线视频| 久久男人资源视频| 亚洲欧美中文日韩v在线观看| 亚洲第一主播视频| 欧美私人网站| 国产日韩欧美精品| 亚洲欧美日韩国产中文在线| 久久综合九色综合久99| 一本色道久久综合亚洲精品婷婷| 午夜精品亚洲一区二区三区嫩草| 欧美精品高清视频| 国产精品久久久久7777婷婷| 99这里只有久久精品视频| 久久久青草婷婷精品综合日韩| 老司机67194精品线观看| 激情婷婷久久| 久久久久久自在自线| 欧美伊人久久久久久午夜久久久久| 激情五月***国产精品| 国产精品香蕉在线观看| 亚洲美女色禁图| 欧美视频免费看| 亚洲精品免费一二三区| 国产精品一区视频| 欧美亚洲专区| 国产一区二区中文| 国产亚洲一区二区在线观看| 久久久久久网站| 久久av在线| 先锋a资源在线看亚洲| 亚洲综合欧美| 欧美18av| 91久久亚洲| 永久域名在线精品| 亚洲级视频在线观看免费1级| 国产欧美一区二区三区久久人妖| 在线视频免费在线观看一区二区| 久久福利毛片| 久久久久久久综合色一本| 久久久91精品国产一区二区三区| 亚洲特级毛片| 免费欧美视频| 精品91视频| 亚洲欧洲中文日韩久久av乱码| 在线成人激情黄色| 国产毛片精品视频| 久久久久久久性| 亚洲少妇最新在线视频| 一本色道久久综合精品竹菊| 久热成人在线视频| 伊人久久久大香线蕉综合直播| 好看的亚洲午夜视频在线| 亚洲女女做受ⅹxx高潮| 免费在线观看一区二区| 欧美日韩岛国| 亚洲一级电影| 亚洲国产99精品国自产| 在线观看视频免费一区二区三区| 亚洲小视频在线观看| 日韩五码在线| 在线免费观看成人网| 亚洲午夜激情| 久久久99国产精品免费| 极品尤物一区二区三区| 日韩一区二区精品| 亚洲一区日韩在线| 麻豆精品一区二区av白丝在线| 久久夜色精品国产亚洲aⅴ| 韩国av一区二区三区四区| 欧美激情综合五月色丁香| 国产视频亚洲精品| 国产精品欧美风情| 在线综合+亚洲+欧美中文字幕| 99国产精品| 欧美午夜一区二区福利视频| 欧美激情在线免费观看| 欧美午夜激情在线| 国产精品久久久久久久久久久久| 在线亚洲免费视频| 久久综合网色—综合色88| 亚洲一区二区动漫| 免费日韩精品中文字幕视频在线| 欧美日韩精品一区视频| 国产午夜亚洲精品羞羞网站| 午夜精品影院| 亚洲高清av| 玖玖综合伊人| 老鸭窝毛片一区二区三区| 一本一本大道香蕉久在线精品| 亚洲男人的天堂在线aⅴ视频| 欧美国产精品日韩| 99国产精品视频免费观看一公开| 久久综合九色99| 亚洲在线电影| 国产精品视频一二| 在线亚洲美日韩| 久久精品国产精品| 国产专区欧美精品| 欧美一区二区三区电影在线观看| 亚洲综合色丁香婷婷六月图片| 欧美日本视频在线| 欧美一区1区三区3区公司| av不卡在线观看| 国产精品视频自拍| 欧美日韩一区二区在线视频| 欧美性感一类影片在线播放| 亚洲欧洲在线播放| 久久久久久999| 国产精品国产自产拍高清av王其| 欧美日韩在线不卡| 国产精品网站视频| 国产精品99久久久久久有的能看| 久久精品九九| 亚洲人人精品| 亚洲视频在线一区观看| 国产精品一区在线播放| 国产精品极品美女粉嫩高清在线| 国产精品揄拍500视频| 欧美国产精品va在线观看|