當前位置:首頁 > 單片機 > 單片機
[導讀]IIC是Philips推出的芯片間串行傳輸總線,它以二根連線實現完善的全雙工同步數據傳送,可以極方便地構成多機系統(tǒng)和外圍器件擴展系統(tǒng)。由于其接口簡單靈活,很多外圍器件均提供了IIC接口,如手機、平板常用的重力傳感器

IIC是Philips推出的芯片間串行傳輸總線,它以二根連線實現完善的全雙工同步數據傳送,可以極方便地構成多機系統(tǒng)和外圍器件擴展系統(tǒng)。由于其接口簡單靈活,很多外圍器件均提供了IIC接口,如手機、平板常用的重力傳感器、地磁感應、陀螺儀、電容屏接口等均是采用IIC接口的。這些器件采用IIC接口可減少芯片封裝的引腳,使之更小型化,同時也可以降低布線難度,這對于手機、平板這些PCB芯片集成度相當高的產品來說是很有必要的。筆者此處就s3c2416的IIC接口應用作一個簡單的介紹。

1. IIC總線概述

IIC總線物理上包括兩條總線線路,一條串行數據線SDA,一條串行時鐘線SCL。為了使各個IIC設備線與相連在總線上,IIC總線接口均采用開集電極或開漏輸出。因此,在IIC總線中是必須接上拉電阻的,上拉電阻的大小通常為1k~10k。上拉電阻小了,則IIC總線功耗增加,上拉電阻大了,負載能力弱,并且影響總線的允許傳輸速率。

IIC總線可構成多主和主從系統(tǒng),在多主系統(tǒng)結構中,系統(tǒng)通過硬件或軟件仲裁獲得總線控制使用權。應用系統(tǒng)中IIC總線多采用主從結構,即總線上只有一個主控節(jié)點,總線上的其他設備都作為從設備。由于IIC通信使用7比特地址空間和16個保留地址,因此理論上同一總線能夠支持的最大通信結點數為112個。但實際應用時,應盡可能地減小總線上的通信結點數,以增強總線的穩(wěn)定性。因為通信結點的引入,同時也會引入寄生電容,而IIC總線結點數量受到總線最大電容400pF的限制??偩€的傳輸速率為100Kbit/s(標準模式),400Kbit/s(快速模式),1Mbit/s(快速附加模式),3.4Mbit/s(高速模式)。

其它的總線時序等請參考相關的IIC總線標準,筆者在此不再詳述。

2. IIC驅動實現

s3c2416具有一路多主IIC串行接口,可作為主機,也可作為從機。對于IIC的操作,s3c2416的spec給出了非常詳細的編程步驟,見下圖:

圖2-1 主機發(fā)送操作



圖2-2 主機接收操作


圖2-3 從機發(fā)送操作



圖2-4 從機接收操作

此處主要介紹s3c2416 IIC外設作為主機的編程實現。IIC外設首先應進行初始化,包括引腳配置成IIC功能引腳,設置IIC的時鐘等。對于外設通信,推薦用中斷的方式進行收發(fā)數據,因為外設通信相對于cpu執(zhí)行速度都是極其慢的,用查詢的方法會讓cpu進入空等狀態(tài),在大量數據要通過外設收發(fā)時,將造成cpu效率及其低下。一方面其它任務需要cpu執(zhí)行,另一方面cpu在空等外設收發(fā)數據的完成。因此筆者采用的是中斷方式進行IIC通信,需要在初始化函數中注冊相應的IIC中斷處理函數,并開啟中斷。異常處理在啟動代碼中的Exception.c統(tǒng)一處理,把IIC中斷處理函數注冊進中斷向量表中,并編寫IIC中斷處理即可。在有操作系統(tǒng)應用中,用中斷的方式讓cpu等待或接收信號量來完成IIC的通信,可以讓cpu資源得到充分的利用。

IIC模塊中應提供最基本的底層IIC讀和IIC寫這兩個功能函數實現,以供上層調用。IIC_WriteBytes用來向某一從機(SlaveAdd)中相應內部地址(WriteAddr)進行寫數據,待寫數據在pData中,寫入長度為Length。函數原型如下:

intIIC_WriteBytes(unsigned char SlaveAddr, unsignedchar WriteAddr, unsigned char *pData, int Length)

IIC_ReadBytes用來從某一從機(SlaveAdd)中相應內部地址(ReadAddr)進行讀數據,讀取的數據存放在pData中,讀取長度為Length。函數原型如下:

intIIC_ReadBytes(unsigned char SlaveAddr, unsignedchar ReadAddr, unsigned char *pData, intLength)

IIC模塊實現IIC.c內容如下:

#include"s3c2416.h"

#include"IIC.h"

#include"Exception.h"

#define IIC_ReadMode 1 // 連續(xù)讀數據模式

#define IIC_WriteMode 2 // 連續(xù)寫數據模式

#defineIIC_ReadSlaveMode 3 // 讀從機地址模式

#defineIIC_WriteSlaveMode 4 // 寫從機地址模式

// IIC狀態(tài),記錄總線接口出錯的信息

static volatile intIIC_Status;

// 跟蹤IIC的狀態(tài)轉移,在中斷中需確定IIC的狀態(tài),確定寫或讀

static volatile intIIC_Mode;

// 上層應用請求通過IIC接口發(fā)送或接收的數據長度計數

static volatile intIIC_DataCount;

// 數據發(fā)送或接收的存放位置

static volatile unsigned char *pIIC_Data;

static void Delay_us(unsigned int nCount)

{

//延時1us,共延時nCount(R0) us

__asm__ __volatile__ (

"Delay1:nt"

"LDR R1, =100nt" // Arm clock為400M

"Delay2:nt"

"SUBS R1, R1, #1nt" // 一個Arm clock

"BNE Delay2nt" // 跳轉會清流水線,3個Arm clock

"SUBS R0, R0, #1nt" // 調用者確保nCount不為0

"BNE Delay1nt"

"BX LRnt"

);

}

static void IIC_IRQ()

{

unsigned char Status;

Status = rIICSTAT;

if (Status & (1<<3)) {

// bus arbitration is failed

IIC_Status "= ArbitrationFailed;

}

if (Status & (1<<2)) {

// a slave address is matched withIICADD

IIC_Status |= AddressMatche;

}

if (Status & (1<<1)) {

// a slave address is 0000000b

IIC_Status |= AddressZeros;

}

if (Status & (1<<0)) {

// ACK isn't received

IIC_Status |= NoAck;

}

switch (IIC_Mode) {

case IIC_ReadMode:

IIC_DataCount--;// 讀了一字節(jié),讀計數減1

if (IIC_DataCount == 1) {

// 讀最后一個數據,主機不應應答,不然從機再發(fā)送數據,應直接停止總線

*pIIC_Data = rIICDS;

pIIC_Data++;

rIICCON &= ~(1 <<7); // 讀最后一字節(jié)禁止主機應答

rIICCON &= ~(1<< 4); // 恢復操作,讀下一個數據

} else if(IIC_DataCount == 0) {

*pIIC_Data =rIICDS; // 所有數據接收完

// 若有操作系統(tǒng),應用在數據等待發(fā)送完時通過信號量

// 或標志等待而掛起OSSemPend(ucos),這樣不會讓cpu查詢

// 等待,極大提高效率。發(fā)送信號量或標志,喚醒等待的

// 應用OSSemPost(ucos)

} else { // 數據未接收完

*pIIC_Data = rIICDS;

pIIC_Data++;

rIICCON &= ~(1<< 4);// 恢復操作,連續(xù)讀下一個數據

}

break;

case IIC_WriteMode:

IIC_DataCount--;// 寫了一字節(jié),寫計數減1

if (IIC_DataCount != 0){

pIIC_Data++; // 數據未寫完,寫下一數據

rIICDS =*pIIC_Data;

rIICCON &= ~(1<< 4); // 恢復操作,連續(xù)下一個數據

} els

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉