基于嵌入式Linux的ARM/DSP多機I2C通信
在Linux內(nèi)核源代碼中drivers目錄下的i2c_dev.c文件,是通用的I2C總線設備驅(qū)動文件,為應用程序提供open()、write()、read()、ioctl()和close()等操作接口來訪問設備。應用層可以借用這些接口訪問掛接在適配器上的I2C總線設備的存儲空間或寄存器,并控制I2C總線設備的工作方式。
2.1.3 S3C2440的I2C總線驅(qū)動及設備驅(qū)動
S3C2440內(nèi)部的I2C總線控制器通過4個寄存器實現(xiàn)對通信的控制,分別是I2C控制寄存器(I2CCON)、I2C狀態(tài)寄存器(I2CSTAT)、I2C收發(fā)數(shù)據(jù)移位寄存器(I2CDS)、I2C地址寄存器(I2CADD)。
按照Linux中I2C總線框架要求,S3C2440的I2C總線驅(qū)動設計主要完成以下工作:設計i2c_adapter_s3c_init()模板加載函數(shù)和對應于i2c_adapter_s3c_exit()模板卸載函數(shù);設計i2c_adapter_s3c_xfer()模板S3C2440適配器通信方法函數(shù)。
i2c_adapter_s3c_init()通過注冊s3c2440_i2c_driver結(jié)構(gòu)體實現(xiàn)總線驅(qū)動的平臺注冊,s3c2440_i2c_driver結(jié)構(gòu)體包含了具體適配器的probe()函數(shù)、remove()函數(shù)、resume()函數(shù)指針等信息。代碼如下:
完成了S3C2440的I2C總線適配器驅(qū)動注冊后,就可以將具體設備驅(qū)動注冊到該總線平臺上,實現(xiàn)I2C總線數(shù)據(jù)通信。i2c_dev.c文件是內(nèi)核源碼提供的通用I2C總線設備驅(qū)動文件,針對每個I2C總線適配器生成一個主設備號為89的設備文件,設備驅(qū)動模塊加載流程如圖6所示。完成加載后,驅(qū)動提供i2cdev_read()、i2cdev_write()、i2cdev_ioctl()函數(shù)來對應用戶空間的read()、write()、ioctl()函數(shù),供用戶使用。用戶通過這些接口函數(shù)實現(xiàn)I2C總線數(shù)據(jù)的讀寫功能。本文引用地址:http://www.ex-cimer.com/article/149119.htm
2.2 DSP數(shù)據(jù)接收中斷程序設計
通過配置F28015的I2C模塊寄存器,設置I2C模塊為從工作方式,同時利用I2C總線中斷響應程序?qū)崿F(xiàn)對總線上數(shù)據(jù)的接收和發(fā)送,進而完成數(shù)據(jù)通信。F28015產(chǎn)生了I2C總線中斷后,就執(zhí)行中斷服務程序,圖7為I2C總線中斷服務程序流程。
linux相關文章:linux教程
評論