91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

利用I2C總線實現ARM9與DSP之間的數據通信

電子設計 ? 來源:郭婷 ? 作者:電子設計 ? 2019-07-23 08:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

引言

在很多嵌入式控制系統中,系統既要完成大量的信息采集和復雜的算法,又要實現精確的控制功能。采用運行有嵌入式Linux操作系統ARM9微控制器完成信號采集及實現上層控制算法,并向DSP芯片發送上層算法得到控制參數,DSP芯片根據獲得的參數和下層控制算法實現精確、可靠的閉環控制。

1 多機系統組成

該多機控制系統以ARM9微控制器s3c2440為核心,采用I2C總線掛載多個DSP芯片TMS320F28015作為協控制器,構成整個控制系統的核心。

1.1 S3C2440及TMS320F28015簡介

Samsung公司的處理器S3C2440是內部集成了ARM公司ARM920T處理器內核的32位微控制器,資源豐富,帶獨立的16 KB的指令Cache和16 KB數據Cache,最高主頻可達400 MHz.它擁有130個通用I/O、24個外部中斷源以及豐富的外部接口能實現各種功能,包括支持多主功能的I2C總線接口、3路URAT、2路SPI、攝像頭接口等。

TMS320F28015(以下簡稱F28015)是TI公司的32位處理器,它具有強大的控制和信號處理能力,能夠實現復雜的控制算法。片上整合了Flash存儲器、I2C總線模塊、快速的A/D轉換器、增強的CAN總線模塊、事件管理器、正交編碼電路接口及多通道緩沖串口等外設,此種整合能夠方便地實現功能的擴展。同時,快速的中斷響應使它能夠保護關鍵的寄存器并快速(更小的中斷延時)地響應外部異步事件。

1.2 I2C總線接口

I2C總線是一種用于IC器件之間連接的串行總線,采用SDA(數據線)和SCL(時鐘線)兩線連接每個帶有I2C總線接口的器件或模塊。串行的8位雙向數據傳輸率在標準模式下可達100 kb/s,快速模式下可達400 kb/s.多個微控制器可以通過I2C總線接口非常方便地連接在一起構成系統,并根據地址識別每個器件。這種總線結構的連線和連接引腳少,器件間總線簡單,結構緊湊。因此其構成系統的成本較低,并且在總線上增加器件不會影響系統的正常工作,所有的I2C總線器件共用一套總線,因此其系統修改和可擴展性好。

總線必須由主機(通常為微控制器)控制,主機產生串行時鐘( SCL) 控制總線的數據傳輸,并產生起始和停止條件。SDA 線上的數據狀態僅在SCL為低電平的期間才能改變,SCL為高電平的期間,SDA 狀態的改變被用來表示起始和停止條件。I2C總線起始和停止時序如圖1所示。

利用I2C總線實現ARM9與DSP之間的數據通信

1.3 硬件電路

S3C2440和F28015自身均集成了I2C總線模塊,支持多主設備I2C總線串行接口,可以方便地掛接到I2C總線上。因此,兩者之間的I2C總線接口電路的設計變得十分簡單,只要將兩者的對應引腳I2C_CLK(對應I2C總線中的SCL線)和I2C_SDA(對應I2C總線中的DATA線)連接起來即可。S3C2440和TMS320F28015的硬件接口電路如圖2所示。

利用I2C總線實現ARM9與DSP之間的數據通信

圖2 S3C2440和TMS320F28015的硬件接口

電路S3C2440的PA55和PA56引腳分別對應I2C_SDA和I2C_CLK,而F28015的GPIO32和GPIO33也可以分別復用為I2C_SDA和I2C_CLK.考慮到阻抗不匹配等因素會影響總線數據傳輸效果,因此在將兩塊芯片的I2C_DATA和I2C_CLK引腳直連時,在直連線路上各串聯一個小電阻。

I2C_SDA和I2C_CLK是雙向電路,必須都通過一個電流源或上拉電阻連接到正電源電壓上。由于S3C2440和F28015的輸出高電平均為3.3 V,所以在硬件設計時將I2C_SDA和I2C_CLK總線通過上拉電阻連接到了3.3 V的VCC電源上。

2 ARM和DSP通信軟件設計

運行Linux操作系統的ARM微控制器作為主控制器,在數據管理及多任務調度等方面有顯著優勢,可以很好地組織外圍器件采集的數據;主要實現對系統的整體控制,并通過總線設備驅動程序控制I2C總線模塊,通過主機尋址實現向I2C總線上掛載的下層DSP的數據收發。為保證數據通信的實時性,F28015通過中斷響應的方式實現數據接收和發送。

2.1 ARM9平臺的嵌入式Linux的I2C總線驅動設計

2.1.1 I2C總線讀寫時序

ARM9微控制器作為主機向從機DSP寫數據,首先向從機發送啟動信號,然后發送7位從機地址和1位寫標志位,再等待從機的應答信號。在收到應答信號后,主機發送數據給從機,再次等待應答信號。當主機收到應答信號之后再次發送數據。之后,主機等待從機的應答信號,如此直到數據發送完成,主機發送停止信號。I2C總線寫數據幀格式如圖3所示。

利用I2C總線實現ARM9與DSP之間的數據通信

圖3 I2C總線寫數據幀格式

主模式下讀數據,是指每次從指定的位置讀取一個或多個字節數據。主機首先向從機發送啟動信號,然后發送 7位從機地址和1位讀標志位,等待從機應答。當收到從機的應答信號后,主機準備接收從機發送的數據,接收完成后發送一個應答信號,如此直到數據接收完成,主機發送一個停止信號。圖4為I2C總線讀數據幀格式。

利用I2C總線實現ARM9與DSP之間的數據通信

圖4 I2C總線讀數據幀格式

2.1.2 Linux下I2C總線驅動程序概述

Linux系統的I2C總線驅動采用體系化結構設計,包括I2C總線適配器驅動和I2C總線設備驅動??偩€驅動實現對I2C總線適配器(S3C2440的I2C總線模塊)的控制,設備驅動實現對具體設備(F28015的I2C總線模塊)的讀寫控制。圖5為總體驅動框架,可以分為三個層次:

① I2C框架。內核中i2c.h和i2c?core.c為I2C總線框架的主體,提供了核心數據結構的定義、I2C總線適配器驅動和設備驅動的注冊、注銷管理、I2C總線通信方法上層的、與具體適配器無關的代碼、檢測設備地址的上層代碼等。i2c?dev.c用于創建I2C總線適配器的設備節點,提供I2C總線設備訪問方法等。

② I2C總線適配器驅動。定義描述具體I2C總線適配器的數據結構,實現在具體I2C總線適配器上的I2C總線通信方法。

③ I2C總線設備驅動。定義描述具體設備的數據結構,借助I2C總線框架的相關函數實現設備的注冊,并為用戶提供上層應用程序編程接口。

利用I2C總線實現ARM9與DSP之間的數據通信

圖5 總體驅動框架

Linux的I2C總線驅動框架中的主要數據結構包括: i2c_driver、i2c_client、i2c_adapter和 i2c_algorithm,它們被定義在內核中的i2c. h頭文件中。i2c_adapter對應于物理上的一個適配器,而i2c_algorithm對應一套通信方法,用來為適配器提供通信函數。i2c_algorithm中的關鍵函數master_xfer()用于產生I2C總線訪問周期需要的信號,以i2c_msg(即I2C總線消息)為單位。該結構體原型如下:

struct i2c_msg{

_ _u16 addr;/*設備地址*/

_ _u16 flags;/*標志*/

_ _u16 len;/*消息長度*/

_ _u8 *buf;/*消息數據*/

};

i2c_driver對應一套驅動方法,是用于輔助作用的數據結構。i2c_client對應于真實的物理設備,每個I2C總線設備都需要一個i2c_client來描述。i2c_adapter和i2c_client的關系與I2C總線硬件體系中適配器和設備關系一致,即i2c_client依附于i2c_adapter.

利用I2C總線實現ARM9與DSP之間的數據通信

圖6 設備驅動模塊加載流程

在Linux內核源代碼中drivers目錄下的i2c_dev.c文件,是通用的I2C總線設備驅動文件,為應用程序提供open()、write()、read )、ioctl()和close()等操作接口來訪問設備。應用層可以借用這些接口訪問掛接在適配器上的I2C總線設備的存儲空間或寄存器,并控制I2C總線設備的工作方式。

2.1.3 S3C2440的I2C總線驅動

設備驅動S3C2440內部的I2C總線控制器通過4個寄存器實現對通信的控制,分別是I2C控制寄存器(I2CCON)、I2C狀態寄存器(I2CSTAT)、I2C收發數據移位寄存器(I2CDS)、I2C地址寄存器(I2CADD)。

按照Linux中I2C總線框架要求,S3C2440的I2C總線驅動設計主要完成以下工作:設計i2c_adapter_s3c_init()模板加載函數和對應于i2c_adapter_s3c_exit()模板卸載函數;設計i2c_adapter_s3c_xfer()模板S3C2440適配器通信方法函數。

i2c_adapter_s3c_init()通過注冊s3c2440_i2c_driver結構體實現總線驅動的平臺注冊,s3c2440_i2c_driver結構體包含了具體適配器的probe()函數、remove()函數、resume()函數指針等信息。代碼如下:

static int _ _init i2c_adap_s3c_init(){

int ret;

ret=platform_driver_regisiter(&s3c2440_i2c_driver);//注冊platform_driver結構體

if(ret==0){//注冊失敗

ret=platform_driver_regisiter(&s3c2440_i2c_driver);

if(ret)

platform_driver_unregisiter (&s3c2440_i2c_driver);

}

return ret;

}

static struct platform_driver s3c2440_i2c_driver={

.probe=s3c24xx_i2c_probe,

.remove=s3c24xx_i2c_remove,

.resume=s3c24xx_i2c_resume,

.driver={

.owner=THIS MODULE,

.name=“s3c2440?i2c”,

},

} ;

完成了S3C2440的I2C總線適配器驅動注冊后,就可以將具體設備驅動注冊到該總線平臺上,實現I2C總線數據通信。i2c_dev.c文件是內核源碼提供的通用I2C總線設備驅動文件,針對每個I2C總線適配器生成一個主設備號為89的設備文件,設備驅動模塊加載流程如圖6所示。完成加載后,驅動提供i2cdev_read()、i2cdev_write()、i2cdev_ioctl()函數來對應用戶空間的read()、write()、ioctl()函數,供用戶使用。用戶通過這些接口函數實現I2C總線數據的讀寫功能。

2.2 DSP數據接收中斷程序設計

利用I2C總線實現ARM9與DSP之間的數據通信

圖7 I2C總線中斷服務程序流程

通過配置F28015的I2C模塊寄存器,設置I2C模塊為從工作方式,同時利用I2C總線中斷響應程序實現對總線上數據的接收和發送,進而完成數據通信。F28015產生了I2C總線中斷后,就執行中斷服務程序,圖7為I2C總線中斷服務程序流程。

中斷服務程序通過查詢狀態寄存器(I2CSTR)標志位,得出中斷類型碼,然后調用相應的子程序,完成數據接收發送。代碼如下:

interrupt void i2c_int1a_isr(void) {//I2CA的中斷響應函數

Uint16 IntSource;// 讀取中斷碼

IntSource=I2caRegs.I2CISRC.bit.INTCODE & 0x7;//I2CA中斷源,讀后3位

switch(IntSource){//依中斷源而確定相關接收和發送策略

case I2C_NO_ISRC://=0

case I2C_ARB_ISRC://=1

case I2C_NACK_ISRC: //=2

case I2C_ARDY_ISRC: //=3

case I2C_SCD_ISRC://=6

case I2C_AAS_ISRC://=7

break;

case I2C_RX_ISRC://=4,接收數據已準備好

DataReceive();//調用數據接收子函數接收數據

break;

case I2C_TX_ISRC://=5,發送數據已準備好

DataTransmit();//調用數據發送子函數接收數據

break;

default:

asm(“ESTOP0”); //無效數據,則停止

}

PieCtrlRegs.PIEACK.all=PIEACK_GROUP8;

}

F28015中的數據接收子程序和數據發送子程序是在I2C總線的中斷服務程序中根據不同的狀態碼進行調用,它們是整個通信程序的核心部分。數據接收子程序和數據發送子程序的流程如圖8所示。

利用I2C總線實現ARM9與DSP之間的數據通信

圖8 數據接收和發送子程序

3 測試結果

通過NFS文件系統將編譯成模塊的I2C的總線驅動和設備驅動加載到運行Linux操作系統的S3C2440平臺上(先加載總線驅動),再將F28015的測試程序燒寫到RAM中。運行F28015等待I2C總線上的數據,再執行Linux系統中的I2C總線測試程序。測試結果顯示,芯片通過I2C總線接口完成了數據通信,具有良好的實時性和可靠性。

4 結論

該設計利用I2C總線實現了ARM9微控制器與DSP芯片間實時可靠的數據通信。ARM9微控制器結合Linux操作系統作為上層控制核心,DSP芯片實現下層控制算法,可充分發揮ARM9微控制器在數據采集和任務管理等方面的優勢以及DSP芯片在算法實現和底層控制的長處。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7954

    瀏覽量

    155181
  • dsp
    dsp
    +關注

    關注

    556

    文章

    8158

    瀏覽量

    357733
  • I2C總線
    +關注

    關注

    8

    文章

    408

    瀏覽量

    62204
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    通過長距離I2C總線實現模擬信號數字傳輸

    內部集成電路總線I2C)是一種同步串行數據通信總線,其中由主器件發起通信,從器件通過尋址機制加以控制。
    發表于 01-12 10:46 ?5387次閱讀
    通過長距離<b class='flag-5'>I2C</b><b class='flag-5'>總線</b><b class='flag-5'>實現</b>模擬信號數字傳輸

    使用GPIO模擬I2C總線進行通信

    會在設備廠商的規格說明書中給出。2. 數據傳輸階段I2C總線數據通信是以字節(8位)作為基本單位在SDA上進行串行傳輸的。一個字節的傳輸需
    發表于 02-02 15:31

    ARMDSP數據通信有什么方法?

    提供良好的人機交互、任務管理、網絡通信等方面功能。因此,發揮DSPARM處理器各自的優勢,采用ARM+DSP結構的設計方案已成為嵌入式系統的研究熱點,倍受關注。通過嵌入式機器視覺系統
    發表于 10-31 06:17

    怎么設計一種基于ARM9 S3C2410A的智能車載系統?

    本文設計一種基于ARM9 S3C2410A的智能車載系統,它能夠通過GPS全球定位系統和GPRS無線通信技術,實現車輛定位以及車輛與控制中心之間
    發表于 05-17 06:03

    分享一款不錯的Linux操作系統下的ARM/DSP多機I2C通信設計方案

    本文利用I2C總線實現ARM9微控制器與DSP芯片間實時可靠的
    發表于 05-25 06:01

    如何實現ARM體系結構的處理器與DSP數據通信?

    如何實現在Linux操作系統下ARM體系結構的處理器與DSP數據通信?
    發表于 05-28 06:11

    如何利用雙口RAM實現DSP與單片機高速數據通信?

    本文介紹了一種利用雙口RAM實現DSP與單片機高速數據通信的方法,給出了它們之間的接口電路以及軟件實現
    發表于 06-03 06:18

    MAX517與單片機的I2C總線數據通信

    摘要:介紹了I2C總線的特點及數據通信的基本協議,并以AT89C51單片機與美國MAXIM公司的8位電壓輸出DAC數模轉換器MAX517之間
    發表于 03-11 11:50 ?2320次閱讀
    MAX517與單片機的<b class='flag-5'>I2C</b><b class='flag-5'>總線</b><b class='flag-5'>數據通信</b>

    什么是數據通信

    什么是數據通信 數據通信是依照一定的通信協議,利用數據傳輸技術在兩個終端之間傳遞
    發表于 06-14 22:32 ?4101次閱讀

    DSP/BIOS環境下的數據通信

    DSP/BIOS環境下的數據通信原理 摘要:討論和比較DSP/BIOS環境下的各種通信方式,給出利用PIP管道對象進行
    發表于 03-04 17:29 ?979次閱讀
    <b class='flag-5'>DSP</b>/BIOS環境下的<b class='flag-5'>數據通信</b>

    基于CPLD的I2C總線接口設計

    在電路設計中,I2C總線是比較常用的兩線式串行通信方式,大多數的CPU都擅長于并口操作,不具備直接操作I2C總線接口的能力。為了使不具備
    發表于 02-12 16:11 ?95次下載
    基于CPLD的<b class='flag-5'>I2C</b><b class='flag-5'>總線</b>接口設計

    雙端口RAM實現ARMDSP高速數據通信設計

    本文通過使用IDT70261雙端口RAM,實現ARM與TMS320C6211 DSP之間的高速實時數據
    發表于 07-27 11:33 ?4506次閱讀
    雙端口RAM<b class='flag-5'>實現</b><b class='flag-5'>ARM</b>與<b class='flag-5'>DSP</b>高速<b class='flag-5'>數據通信</b>設計

    ARM/DSP多機I2C通信解析

    上層算法得到控制參數,DSP芯片根據獲得的參數和下層控制算法實現精確、可靠的閉環控制。 1 多機系統組成 該多機控制系統以ARM9微控制器S3C2440為核心,采用
    發表于 10-19 11:33 ?0次下載
    <b class='flag-5'>ARM</b>/<b class='flag-5'>DSP</b>多機<b class='flag-5'>I2C</b><b class='flag-5'>通信</b>解析

    I2C總線的基本通信總結

    在電子設計開發中I2C大家已經很熟悉了,每一種電子產品小到電子開關,大到衛星通信都會利用I2C總線。據統計
    的頭像 發表于 08-26 14:08 ?1.9w次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>總線</b>的基本<b class='flag-5'>通信</b>總結

    I2C總線通信原理 如何設計I2C總線電路

    I2C總線通信原理 I2C(Inter-Integrated Circuit)總線是一種用于集成電路之間
    的頭像 發表于 01-31 15:01 ?1142次閱讀
    主站蜘蛛池模板: 国模私拍在线视频 | 国产高清不卡一区二区 | 色网站在线播放 | 欧美色视频网站 | 午夜免费啪视频 | 婷婷综合激情 | avhd101天天看新片 | 亚洲欧洲一区二区三区在线 | 一级毛片在线看在线播放 | 特级毛片免费视频观看 | 青草午夜精品视频在线观看 | 偷偷要色偷偷 | 亚洲人色大成年网站在线观看 | 亚洲国产日韩女人aaaaaa毛片在线 | 日本成人黄色网址 | 加勒比一本一道在线 | 毛片黄| 高h视频网站 | 伊人www | 97干干 | 国产欧美高清 | 黄色高清视频网站 | 婷婷色网站 | 久久国产精品99久久久久久牛牛 | 日本三级欧美三级香港黄 | 失禁h啪肉尿出来高h男男 | 亚洲春色在线 | 成人欧美另类人妖 | 午夜福利123 | 韩日一级毛片 | 美女毛片视频 | 亚洲精品二区中文字幕 | 高h办公室 | 日黄网站 | 一级全免费视频播放 | 与子乱刺激对白在线播放 | 亚洲va久久久噜噜噜久久天堂 | 久久久久久人精品免费费看 | 四虎影视在线影院在线观看 | 中文字幕视频二区 | 日日摸夜夜添免费毛片小说 |