




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
前 編寫目 適用范 相 SPI模塊介 功能介 硬件介 源碼結構介 配置介 SPI常用數(shù)據(jù)結構描 SPI設備驅動開發(fā) 了解SPI設備驅動在A31平臺上的AllwinnerA31平臺A31平臺SPI設備驅動開發(fā)對SPI設備的讀寫操作給予SPI總線通過四條線完成MCU與各種器件的通訊,這四條線分別是:(SCLK(MOSI數(shù)據(jù)線(MISO、從機片選線(SS。位。因此,在主機發(fā)送完一個字節(jié)后,從器件接收到的數(shù)據(jù)被移入到換。主機的SPI時鐘信號(SCLK)使傳輸同步,SPI總線的結構如圖1所圖1SPI總線接口根據(jù)時鐘極性(CPOL)及時鐘相位(CPHA)的不同組合成4種工作模式,分別是:SPI0模式,SPI1模式,SPI2模式SPI3模式。其中使用最廣泛的是SPI0模式和SPI3模式,詳見表1。SPILeading000101210311CPOL:CPOLCPHA:CPHA0時,表示在時鐘的第一個跳變2SPI4Linux驅動位linux-3.3\drivers\spi\spi-sun6i.c中sys_config.fex配置說=====其中,若使用哪一組spi總線,將對應的spi_used置為1config配置說明對于SPI總線控制器的配置,可通過命令makeARCH=arm 4SPIsupportSUN6ISPIController選項,可選擇直接編譯進內核,也可以選擇編譯成模塊。如圖5所示:5SUN6ISPIControllerdrivers/spi下的文spi-sun6i.c,是基sun6i平臺實SPI總線控制器驅動。它的職責是為系統(tǒng)中4條SPI總線實現(xiàn)相應的讀寫方法,但是控制UserAppAppAppKernelSPIHUserAppAppAppKernelSPIHardwSPImaster0(SPI0)SPImaster1(SPI1)SPImaster2(SPI2)SPImaster3(SPI3)SPIdeviceSPIdevice SPIdeviceSPIdeviceSPIdevice SPIdeviceSPIspidspidspid6SPIstructspi_masterstructspi_masterstructdevicedev;s16bus_num;u16num_chipselect;u16dma_alignment;u16mode_bits;u16/*/*#defineSPI_MASTER_HALF_DUPLEX#defineSPI_MASTER_NO_RXBIT(1)#defineSPI_MASTER_NO_TXBIT(2)spinlock_tbus_lock_spinlock;structmutexbus_lock_mutex;boolbus_lock_flag;/*can'tdofullduplex/*can'tdobufferread/*can'tdobufferwrite/*根據(jù)spi/*添加消息到隊列的方法。這個函數(shù)不可睡眠,它的職責是安排發(fā)生的傳送并且 的回調函數(shù)complete()*//*cleanupspidev_release函數(shù)中被調用,spidev_releasespi}spi_master對應于一個SPI控制器,spi_master 過程中會掃描spi_register_board_info的信息,為每一個與本總線相同的信息建立一個spi_device。2)structstructspi_transferconstvoid*tx_buf;/*要寫入設備的數(shù)據(jù)(必須是dma_safe),或者為NULL*/void*rx_buf;/*要 的數(shù)據(jù)緩沖(必須是dma_safe),或者為NULL*/unsignedlen;/*tx和rx的大小(字節(jié)數(shù)),他們總是相等的*/dma_addr_ttx_dma; /*tx的dma地址*/dma_addr_t /*rx的dma地址 影響此次傳輸之后的片選,指示本次transfer結束之后是否要重新片選并調setup改變設置unsignedu8bits_per_word;/*0,使用默認值u16個傳輸或者結束整個消息u32/*此次傳輸結束和片選改變之間的延時,之后就會/*通信時鐘,如果是0,使用默認值structlist_headspi_transfer用于描述SPI傳輸,而一次完整的SPI傳輸過程可能不只包含1spi_transfer,它可能包含多個spi_transferspi_transfer最終通過spi_message組織在一起。structstructspi_message/*struct unsignedis_dma_mapped:1;void*context;unsigned/*/*DMA/*/*/*intstatus; /*0*/structlist_headqueue;void執(zhí)行總是按照FIFO的順序。structstructspi_devicestructdevice structspi_master /*/*spi/*極性/*/*SPI_MODE_1(0|SPI_CPHA)SPI_MODE_2(SPI_CPOL|0) /*/*/*SPI_READYspi_device對應于真實的物理設備,每個SPI設備都需要spi_device來char/*/*私有數(shù)據(jù),會被設置到spi_device.dev.platform_data*/constvoid*platform_data;/*私有數(shù)據(jù),會被設置到spi_device.controller_data*/void*controller_data;intu16bus_num;u16/*/*SPI/*SPI/*u8
/*spi_board_info用于 序號、片選序號、比特率、SPI傳輸模式等。structstructspi_driverconststructspi_device_id/*與spidevice匹配成功后調用,對設備和私有數(shù)據(jù)進行初始化*/ (*probe)(structspi_device*spi);/*解除spi_devicespi_driverprobe(*remove)(structspi_device/*/* (*resume)(structspi_device*spi); /**/structdevice_driverdriver;spi_driver主要提供驅動模型下的綁定方法和電源管理接口其成員是和spi_devicespi_register_board_info中的對應的spi_spi_register_driver(structspi_driver thedrivertoinit= init< initRegisteraspidevicedrivertospisub-staticinlinevoidspi_unregister_driver(structspi_driver thedrivertoUnregisteraspidevicedriverfromspisub-staticinlinevoidspi_set_drvdata(structspi_device*spi,void handletospiSetprivatedatatospistaticinlinevoid*spi_get_drvdata(structspi_device handletospiTheresultofgetspidevicedriverGetprivatedataGetprivatedatafromspistaticinlineintspi_write(structspi_device*spi,constu8*buf,size_t devicetowhichdatawillbewritten;bufdatabuffer; databufferwrite= writethebuffer< negativeerrorSPIsynchronousstaticinlineintspi_read(structspi_device*spi,u8*buf,size_t devicefromwhichdatawillberead; databuffer; databufferread= readthebuffer< negativeerrorSPIsynchronousstaticinlinessize_tspi_w8r8(structspi_device*spi,u8 devicewithwhichdatawillbeexchanged;cmdcommandtobewrittenbeforedataisreadback;execute> theeightbitnumberreturnedbythe< negativeerrorSPIsynchronous8bitwritefollowedby8bitstaticinlinessize_tspi_w8r16(structspi_device*spi,u8 devicewithwhichdatawillbeexchanged;cmdcommandtobewrittenbeforedataisreadback;execute> thesixteenbitnumberreturnedbythe< negativeerrorSPIsynchronous8bitwritefollowedby16bitintspi_write_then_read(structspi_device*spi,constu8*txbuf,unsignedn_tx,*rxbuf,unsignedspidevicewithwhichdatawillbeexchanged;txbufdatatobewritten(neednotbedma-safe);n_txsizeoftxbuf,inbytes;rxbufbufferintowhichdatawillberead(neednotbedma-safe);n_rxsizeofrxbuf,inbytesexecute= < negativeerrorSPIsynchronouswritefollowedbystaticinlinevoidspi_message_init(structspi_message thepointerto Init staticinlinevoidspi_message_add_tail(structspi_transfer*t,structttmthepointertospithepointerto;Addspitransferto #include<linux/spi.h>#include<linux/kernel.h>#include<linux/moduleh>#include<linux/init.h>{structdemo structxxxx_platform_data /**/pdata=&spi->dev.platform_data;if(!pdata)return-/*demodemo=kzalloc(sizeof*demo,GFP_KERNEL);if(!demo)return-ENOMEM;/*return}static {return}staticstructspi_driverspi_driver_demo= = = = =}static init{return}static exit{}MODULE_DESCRIPTION("SPIdevicedriverdemo");static
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 6 Food (教學設計)-2024-2025學年人教精通版(2024)英語三年級上冊
- 中學聯(lián)盟浙江省蒼南縣龍港鎮(zhèn)第一中學人教版七年級歷史與社會下冊教學設計:7.2 傳媒的行程
- 16 田忌賽馬 教學設計-2023-2024學年語文五年級下冊統(tǒng)編版
- 市場風險對沖工具應用-深度研究
- 湖南國防工業(yè)職業(yè)技術學院《中外影視文學》2023-2024學年第二學期期末試卷
- 南京信息職業(yè)技術學院《日語視聽說(三)》2023-2024學年第二學期期末試卷
- 河南省鄭州市重點中學2025屆高三下-第九次質量檢測試題英語試題試卷含解析
- 無錫職業(yè)技術學院《流行音樂經典作品分析(2)》2023-2024學年第二學期期末試卷
- 黑龍江林業(yè)職業(yè)技術學院《工程斷裂力學》2023-2024學年第二學期期末試卷
- 廣州東華職業(yè)學院《汽車車身制造工藝學》2023-2024學年第二學期期末試卷
- GB/T 33365-2016鋼筋混凝土用鋼筋焊接網(wǎng)試驗方法
- GB/T 16799-2018家具用皮革
- GB/T 14541-2017電廠用礦物渦輪機油維護管理導則
- GB 10133-2014食品安全國家標準水產調味品
- 講題比賽游戲中的必勝策略問題-(取棋子游戲)課件
- 旅游學概論李天元版復習總結
- 人教版八年級上歷史思維導圖課件
- 重慶大學介紹課件
- 江蘇省南京市2020年中考英語試題
- 《電氣裝配車間生產工序流程卡》中英文對譯版
- 四年級下冊英語課件:Unit 4 There are seven days in a week-Lesson 19人教精通版
評論
0/150
提交評論