国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

ARM-Linux下SPI設備的添加與驅(qū)動實現(xiàn)※

2012-09-25 03:00:12怯肇乾陳永超
關(guān)鍵詞:驅(qū)動程序觸摸屏中斷

怯肇乾,陳永超

(北京新大陸有限公司,北 京100044)

1 SPI總線設備驅(qū)動及其實現(xiàn)分析

ARM-Linux操作系統(tǒng)下,SPI總線操作,自上而下分為3個層次:平臺依賴層、硬件抽象層和用戶接口層。平臺依賴層對應微處理器里集成的一個或多個SPI主機控制器,包括平臺設備(Platform Device)和平臺驅(qū)動程序,每種處理器平臺都有自己特定的SPI控制器驅(qū)動,屬于平臺移植相關(guān)層,主要是按照核心層定義的接口實現(xiàn)具體的spi_master。硬件抽象層提供核心數(shù)據(jù)結(jié)構(gòu)的定義、SPI控制器驅(qū)動和設備驅(qū)動的注冊、注銷管理,它面向平臺依賴層屏蔽實際總線控制器的差異,定義了統(tǒng)一的訪問策略和接口。面向用戶接口層提供統(tǒng)一的接口,以便SPI設備驅(qū)動通過總線控制器進行數(shù)據(jù)收發(fā),其主體框架程序是GPIO模擬SPI時序spi_bitbang.c和可進行同/異步消息傳輸?shù)炔僮鞯膕pi.c。用戶接口層即設備驅(qū)動層,為用戶提供了通過SPI總線訪問具體設備的接口,包括SPI設備和SPI驅(qū)動程序。ARM-Linux下SPI總線的層次結(jié)構(gòu)圖如圖1所示。

圖1 ARM-Linux下SPI總線的層次結(jié)構(gòu)圖

嵌入式ARM-Linux操作系統(tǒng)對SPI總線提供完整而成熟的硬件抽象層和通用的SPI驅(qū)動spi_driver。針對具體的ARM內(nèi)核微處理器體系,如Samsung公司基于Cortex-A8的S5PV110/S5PV210、TI公司基于 Cortex-A8的AM3515/AM3715、Freescale公 司 基 于 Cortex-A8 的i.MX515/i.MX535等,半導體廠商通常提供其SPI控制器驅(qū)動的platform_driver和對應的platform_device配置,還有通用spi_driver對應的spi_device配置。platform_device配置定義SPI主機信號與從機的片選信號和中斷信號。spi_device配置指定具體SPI設備對應的SPI主機號、采用的SPI通信模式與傳輸速度和其使用的中斷等。platform_device和spi_device配置通常定義在平臺匹配文件 mach_xxx.c,如 mach_smdkc110.c。

所以,在ARM-Linux中添加SPI設備,可以借用SPI通用驅(qū)動快速實現(xiàn),可以為其編寫特定的SPI驅(qū)動。ARM-Linux設備驅(qū)動通常采用靜態(tài)加載操作,它有兩種方式:適配(adapter)和探測(probe),大多數(shù)設備驅(qū)動越來越趨向探測方式,也可以采用動態(tài)加載方式編寫簡易的SPI“設備-驅(qū)動”。SPI時序可以選擇由微處理器集成的SPI總線控制器產(chǎn)生,也可以選擇由微處理器的通用輸入/輸出口GPIO模擬產(chǎn)生。

2 借用通用spi-dev.c驅(qū)動新設備

對于一些常規(guī)的SPI設備,如存儲器、溫度傳感器等,可以將其連接到選定的SPI主機控制器總線上,借用系統(tǒng)提供的通用spi-dev.c程序直接實現(xiàn)串行通信操作。需要做的是在平臺匹配文件mach_xxx.c中添加或修改片選、中斷信號,指定SPI的工作模式、傳輸速度、主機編號、中斷編號等關(guān)鍵信息,相關(guān)的代碼添加與變化如下(其中粗體部分為需要添加或修改的):

3 為新設備編寫probe方式驅(qū)動

probe方式的驅(qū)動會根據(jù)事先的配置安排加載并通過探測初始化進而啟用硬件設備。它以xxx_driver框架作統(tǒng)領(lǐng),以xxx_probe函數(shù)完成設備的探測與初始化,以xxx_remove函數(shù)完成設備的去除。相應的設備操作配置靠mach_xxx.c文件指定。這里以SPI接口的4線電阻式觸摸屏控制器驅(qū)動設計為例加以說明。該設備既是SPI設備,也是輸入設備。

mach_xxx.c中需要增加的SPI設備信息如下:

設備驅(qū)動程序,通過硬件中斷以消息傳遞形式異步完成數(shù)據(jù)采集并形成公共信息廣播給上層應用系統(tǒng)。由于中斷中不能展開SPI通信進程,這里采用了異步傳輸和“自旋鎖”機制,由回調(diào)函數(shù)完成數(shù)據(jù)處理和上傳。限于篇幅,沒有考慮“去抖”濾波。主要代碼略——編者注。

4 簡易“設備-驅(qū)動”型設備驅(qū)動設計

動態(tài)加載形式的設備驅(qū)動便于調(diào)試、用時掛載,不用隨時缷載,因而廣泛采用。特別稱之為簡易“設備-驅(qū)動”型設備驅(qū)動。上述觸摸屏驅(qū)動程序很容易變成這種形式,不同之處在于需要在初始化時完成xxx_probe函數(shù)功能和mach_xxx.c中SPI設備的配置,在缷載時完成xxx_remove函數(shù)功能。主要程序代碼略——編者注。

5 GPIO模擬SPI設備驅(qū)動快速實現(xiàn)

選擇GPIO端口模擬SPI總線驅(qū)動SPI設備,雖然對于系統(tǒng)整體效率不高,但是直截了當,易于操作實現(xiàn)??梢圆捎肁RM-Linux已有的GPIO模擬程序,也可以選擇GPIO自行獨立設計。這里仍以上述觸摸屏為例,自選GPIO模擬SPI時序,對動態(tài)加載形式的字符型SPI輸入的簡易“設備-驅(qū)動”設計加以說明。通過系統(tǒng)定時器進行了去抖,并對測量結(jié)果剪切和均值濾波進行處理(主要程序代碼略——編者注)。

編者注:本文為期刊縮略版,全文見本刊網(wǎng)站www.mesnet.com.cn。

[1]怯肇乾.基于底層硬體的軟件設計[M].北京:航空航天大學出版社,2008.

[2]宋寶華.Linux設備驅(qū)動開發(fā)詳解[M].北京:人民郵電出版社,2008.

[3]劉紅波.Linux下 SPI驅(qū)動開發(fā)[EB/OL].[2011-12].http://www.linuxidc.com/Linux/2011-09/41981p2.html.

[4]CSDN博客.PowerPC+Linux2.6.25平臺下的SPI驅(qū)動架構(gòu)分析[EB/OL].[2011-12].http://blog.csdn.net/sailor_8318/article/details/5977733.

[5]博客園.移植 ADS7846驅(qū)動到 Tiny6410[EB/OL].[2011-12].http://www.cnblogs.com/liu_xf/archive/2011/06/22/2086750.html.

[6]王選民,李明利,張利川,等.基于ADS7846的電阻式觸摸屏接口設計[J].現(xiàn)代電子技術(shù),2010(11).

猜你喜歡
驅(qū)動程序觸摸屏中斷
PLC和觸摸屏在衛(wèi)生間控制系統(tǒng)的應用
皮膚“長”出觸摸屏
跟蹤導練(二)(5)
千里移防,衛(wèi)勤保障不中斷
解放軍健康(2017年5期)2017-08-01 06:27:44
投射式多點觸控電容觸摸屏
河南科技(2014年12期)2014-02-27 14:10:32
觸摸屏項目移植在自動化系統(tǒng)升級中的應用
AT89C51與中斷有關(guān)的寄存器功能表解
FPGA內(nèi)嵌PowerPC的中斷響應分析
微處理機(2012年4期)2012-06-13 11:32:24
驅(qū)動程序更新與推薦
驅(qū)動程序更新與推薦
利辛县| 新蔡县| 益阳市| 三明市| 谢通门县| 百色市| 平顺县| 孙吴县| 临夏县| 石嘴山市| 建昌县| 漠河县| 大连市| 大同县| 嘉义市| 桂林市| 池州市| 榆社县| 府谷县| 噶尔县| 纳雍县| 沂源县| 无为县| 甘谷县| 陆良县| 宁化县| 岚皋县| 阜新市| 泸西县| 时尚| 巩义市| 遵义县| 哈密市| 游戏| 轮台县| 佛坪县| 平谷区| 乐东| 营山县| 开封县| 长治市|