嵌入式課程設(shè)計(jì)CZ_第1頁
嵌入式課程設(shè)計(jì)CZ_第2頁
嵌入式課程設(shè)計(jì)CZ_第3頁
嵌入式課程設(shè)計(jì)CZ_第4頁
嵌入式課程設(shè)計(jì)CZ_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 I2C總線接口設(shè)計(jì) 課程設(shè)計(jì)報(bào)告系 別: 信息科學(xué)與技術(shù)系 專業(yè)班級(jí): 電信0801班 學(xué)生姓名: 陳 哲 學(xué) 號(hào): 20081186032 指導(dǎo)教師: 韓 潔 (課程設(shè)計(jì)時(shí)間:2011年12月26日2012年01月06日)華中科技大學(xué)武昌分校ARM嵌入式系統(tǒng)課程設(shè)計(jì)任務(wù)書一、設(shè)計(jì)(調(diào)查報(bào)告/論文)題目課題:I2C 總線接口設(shè)計(jì)二、設(shè)計(jì)(調(diào)查報(bào)告/論文)主要內(nèi)容編寫程序?qū)?shí)驗(yàn)板上 EEPROM 器件24C08 進(jìn)行讀/寫訪問。實(shí)現(xiàn)從同一地址寫入再讀出數(shù)據(jù),并進(jìn)行比較,以檢測EEPROM 器件24C08 和處理器I2C 接口的工作是否正常。把讀寫的數(shù)據(jù)通過串口傳到PC機(jī)用超級(jí)終端(或串口助手)

2、顯示,把讀取的數(shù)據(jù)用數(shù)碼管顯示或者點(diǎn)陣或者液晶屏進(jìn)行顯示。三、原始資料開發(fā)板的原理圖和實(shí)驗(yàn)參考程序,參考實(shí)驗(yàn)講義和課設(shè)講義一塊ARM開發(fā)板和底板(未焊接)四、要求的設(shè)計(jì)(調(diào)查/論文)成果l 使用實(shí)驗(yàn)板和板上的IIC EEPROM芯片,實(shí)現(xiàn)對(duì)EEPROM的讀寫;l 完成實(shí)驗(yàn)方案的設(shè)計(jì),根據(jù)原理圖完成硬件的搭建;l 可選容量為256字節(jié)、1K字節(jié);l 實(shí)現(xiàn)字節(jié)寫、頁寫、當(dāng)前地址讀、隨機(jī)地址讀等功能,并封裝成一個(gè)個(gè)可供用戶調(diào)用的函數(shù);l 顯示功能:把讀寫的數(shù)據(jù)通過串口傳到PC機(jī)用超級(jí)終端(或串口助手)顯示,要求顯示班級(jí)、姓名和學(xué)號(hào);如果用ARM7的開發(fā)板,要求把讀取的數(shù)據(jù)用數(shù)碼管顯示,其中能力強(qiáng)的同

3、學(xué)可以通用點(diǎn)陣顯示班級(jí)和學(xué)號(hào);如果用ARM9的開發(fā)板,要求用液晶屏顯示班級(jí)姓名和學(xué)號(hào),以及讀取的數(shù)字。l 在實(shí)驗(yàn)完成的基礎(chǔ)上完成課程設(shè)計(jì)報(bào)告的撰寫,按照模板的格式書寫,要求有軟件流程圖和調(diào)試過程。五、進(jìn)程安排1準(zhǔn)備和審題,講解原理0.5天2系統(tǒng)分析13總體設(shè)計(jì)和硬件的完成1.54詳細(xì)設(shè)計(jì)(編寫代碼)25調(diào)試和測試36撰寫課程設(shè)計(jì)報(bào)告17課程設(shè)計(jì)成果驗(yàn)收0.58正式提交課程設(shè)計(jì)報(bào)告和系統(tǒng)源程序0.5六、主要參考資料嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書ARM課程設(shè)計(jì)講義I2C總線接口講義KS24c08芯片資料Arm開發(fā)板硬件原理圖和底板的硬件原理圖74Hc04、74HC573和74HC595芯片資料指導(dǎo)教師(簽名

4、): 20 年 月 日目 錄1.引言52.課程設(shè)計(jì)目的63.課程設(shè)計(jì)題目描述和要求64.課程設(shè)計(jì)報(bào)告內(nèi)容74.1實(shí)驗(yàn)原理74.2程序流程圖114.3主程序代碼125.調(diào)試過程及總結(jié)236.參考文獻(xiàn)241. 引言 IIC即I2C,是一種總線結(jié)構(gòu)。是作為英特爾IC 的互補(bǔ),這種總線類型是由菲利浦半導(dǎo)體公司在八十年代初設(shè)計(jì)出來的,主要是用來連接整體電路(ICS) ,IIC是一種多向控制總線,也就是說多個(gè)芯片可以連接到同一總線結(jié)構(gòu)下,同時(shí)每個(gè)芯片都可以作為實(shí)施數(shù)據(jù)傳輸?shù)目刂圃?。這種方式簡化了信號(hào)傳輸總線。例如:內(nèi)存中的SPD信息,通過IIC,與BX芯片組聯(lián)系,IIC 存在于英特爾PIIX4結(jié)

5、構(gòu)體系中。隨著大規(guī)模集成電路技術(shù)的發(fā)展,把CPU和一個(gè)單獨(dú)工作系統(tǒng)所必需的ROM、RAM、I/O端口、A/D、D/A等外圍電路集成在一個(gè)單片內(nèi)而制成的單片機(jī)或微控制器愈來愈方便。目前,世界上許多公司生產(chǎn)單片機(jī),品種很多。其中包括各種字長的CPU,各種容量的ROM、RAM以及功能各異的I/O接口電路等等,但是,單片機(jī)的品種規(guī)格仍然有限,所以只能選用某種單片機(jī)來進(jìn)行擴(kuò)展。擴(kuò)展的方法有兩種:一種是并行總線,另一種是串行總線。由于串行總線的連線少,結(jié)構(gòu)簡單,往往不用專門的母板和插座而直接用導(dǎo)線連接各個(gè)設(shè)備。因此,采用串行線可大大簡化系統(tǒng)的硬件設(shè)計(jì)。PHILIPS公司早在十幾年前就推出了I2C串行總線,

6、利用該總線可實(shí)現(xiàn)多主機(jī)系統(tǒng)所需的裁決和高低速設(shè)備同步等功能。因此,這是一種高性能的串行總線。I2C總線是各種總線中使用信號(hào)線最少,并具有自動(dòng)尋址、多主機(jī)時(shí)鐘同步和仲裁等功能的總線。因此,使用I2C總線設(shè)計(jì)計(jì)算機(jī)系統(tǒng)十分方便靈活,體積也小,因而在各類實(shí)際應(yīng)用中得到廣泛應(yīng)用。飛利浦電子公司日前推出新型二選一I2C主選擇器,可以使兩個(gè)I2C主設(shè)備中的任何一個(gè)與共享資源連接,廣泛適用于從MP3播放器到服務(wù)器等計(jì)算、通信和網(wǎng)絡(luò)應(yīng)用領(lǐng)域,從而使制造商和終端用戶從中獲益。PCA9541可以使兩個(gè)I2C主設(shè)備在互不連接的情況下與同一個(gè)從設(shè)備相連接,從而簡化了設(shè)計(jì)的復(fù)雜性。此外,新產(chǎn)品以單器件替代了I2C多個(gè)主

7、設(shè)備應(yīng)用中的多個(gè)芯片,有效節(jié)省了系統(tǒng)成本。2. 課程設(shè)計(jì)目的1) 通過實(shí)驗(yàn)掌握I2C 串行數(shù)據(jù)通信協(xié)議的使用。2) 掌握EEPROM 器件的讀/寫方法。3) 通過實(shí)驗(yàn)掌握S3C44B0X或者S3C2440A 處理器的I2C 控制器的使3. 課程設(shè)計(jì)題目描述和要求IIC是PHILPS公司開發(fā)的串行總線,用于連接微處理器及其外圍設(shè)備,具有如下特點(diǎn):1) 只有兩條總線線路,串行數(shù)據(jù)線SDA、串行時(shí)鐘線SCL;2) 每個(gè)連接到總線的器件都可以用軟件根據(jù)它唯一地址來識(shí)別;3) 傳輸數(shù)據(jù)間是簡單的主從關(guān)系;4) 主機(jī)可以用作主機(jī)發(fā)送器或主機(jī)接收器;5) 多主機(jī)總線,可以檢測沖突;6) 連接到同一總線上的I

8、C數(shù)量只受到總線的最大電容400pF的限制;要求編寫程序?qū)?shí)驗(yàn)板上 EEPROM 器件24C08 進(jìn)行讀/寫訪問。實(shí)現(xiàn)從同一地址寫入再讀出數(shù)據(jù),并進(jìn)行比較,以檢測EEPROM 器件24C08 和處理器I2C 接口的工作是否正常。1) 使用實(shí)驗(yàn)板和板上的IIC EEPROM芯片,實(shí)現(xiàn)對(duì)EEPROM的讀寫;2) 完成實(shí)驗(yàn)方案的設(shè)計(jì),根據(jù)原理圖完成硬件的搭建;3) 可選容量為256字節(jié)、1K字節(jié);4) 實(shí)現(xiàn)字節(jié)寫、頁寫、當(dāng)前地址讀、隨機(jī)地址讀等功能,并封裝成一個(gè)個(gè)可供用戶調(diào)用的函數(shù);5) 顯示功能:把讀寫的數(shù)據(jù)通過串口傳到PC機(jī)用超級(jí)終端(或串口助手)顯示,要求顯示班級(jí)、姓名和學(xué)號(hào);如果用ARM7的

9、開發(fā)板,要求把讀取的數(shù)據(jù)用數(shù)碼管顯示,其中能力強(qiáng)的同學(xué)可以通用點(diǎn)陣顯示班級(jí)和學(xué)號(hào);如果用ARM9的開發(fā)板,要求用液晶屏顯示班級(jí)姓名和學(xué)號(hào),以及讀取的數(shù)字。6) 在實(shí)驗(yàn)完成的基礎(chǔ)上完成課程設(shè)計(jì)報(bào)告的撰寫,按照模板的格式書寫,要求有軟件流程圖和調(diào)試過程。4. 課程設(shè)計(jì)報(bào)告內(nèi)容4.1 實(shí)驗(yàn)原理1) I2C 接口以及EEPROMI2C 總線為同步串行數(shù)據(jù)傳輸總線,其標(biāo)準(zhǔn)總線傳輸速率為100kb/s,增強(qiáng)總線可達(dá)400kb/s,總線驅(qū)動(dòng)能力為400pF。I2C 總線可構(gòu)成多主和主從系統(tǒng)。在多主系統(tǒng)結(jié)構(gòu)中,系統(tǒng)通過硬件或軟件仲裁獲得總線控制使用權(quán)。應(yīng)用系統(tǒng)中I2C 總線多采用主動(dòng)結(jié)構(gòu),即總線上只有一個(gè)主控

10、節(jié)點(diǎn),總線上的其他設(shè)備都作為從設(shè)備。I2C 總線上的設(shè)備尋址由器件地質(zhì)界現(xiàn)決定,并且通過訪問地址最低位來控制讀/寫方向。目前,通用存儲(chǔ)器芯片多位 EEPROM,其常用的協(xié)議主要有兩線串行連接協(xié)議(I2C)和三線串行連接協(xié)議。帶I2C總線接口的EEPROM 有許多型號(hào),其中AT24CXXX 系列使用十分普遍,產(chǎn)品包括AT2401/02/04/08/等,其容量(字節(jié)數(shù)頁)分別為1288/2568/5128/10248/2048,適用于25V 的低電壓操作,具有低功耗和高可靠性等優(yōu)點(diǎn)。AT24 系列存儲(chǔ)器芯片采用COMS 工藝制造,內(nèi)置有高壓泵,可在單電壓供電條件下工作,其標(biāo)準(zhǔn)封裝為8 引腳DIP

11、封裝形式,如圖1-1 所示。圖1-1 AT24 標(biāo)準(zhǔn)封裝引腳圖各引腳的功能說明如下:SCL :串行時(shí)鐘。遵循ISO/IEC7816 同步協(xié)議;漏極開路,需要上拉電阻;在該引腳的上升沿,系統(tǒng)將數(shù)據(jù)輸入到每個(gè)EEPROM 器件,在下降沿輸出。SDA :串行數(shù)據(jù)線。漏極開路,需要上拉電阻;雙向串行數(shù)據(jù)線,漏極開路,可與其他開路器件“線或”。A0,A1,A2 :器件/頁面尋址地址輸入端。在AT24C01/02 中,引腳被硬連接。其他AT24Cxx均可接尋址地址線。WP :讀/寫保護(hù)。接低電平時(shí)可對(duì)整片空間進(jìn)行讀/寫;接高電平時(shí)不能對(duì)受保護(hù)區(qū)進(jìn)行讀/ 寫。VCC/GND :5V 的工作電壓。2) I2C

12、 總線的讀/寫控制邏輯 開始條件(START_C),當(dāng)SCL 為高電平時(shí),SDA 由高轉(zhuǎn)低,即為開始。 停止條件(STOP_C),當(dāng)SCL 為高電平時(shí),SDA 由低轉(zhuǎn)為高,即為停止。 確認(rèn)信號(hào)(ACK),在接受方應(yīng)答下,每收到一個(gè)字節(jié)后便將SDA 電平拉低,表示確認(rèn)。 數(shù)據(jù)傳送(Read/Write),I2C 總線啟動(dòng)或應(yīng)答后,在SCL 高電平期間,數(shù)據(jù)串行傳送;在SCL 低電平期間,數(shù)據(jù)準(zhǔn)備,并允許SDA 線上數(shù)據(jù)電平變換??偩€以字節(jié)(8位)位單位傳送數(shù)據(jù),且高有效位(MSB)在前。I2C 數(shù)據(jù)傳送時(shí)序如圖1-2 所示。圖1-2 I2C 總線信號(hào)的時(shí)序3) S3C44B0X 處理器I2C 接

13、口A. S3C44B0X I2C 接口簡介S3C44B0X 處理器為用戶進(jìn)行應(yīng)用設(shè)計(jì)提供了支持多主總線的I2C 接口,處理器提供符合I2C 協(xié)議的設(shè)備連接的雙向數(shù)據(jù)線IICSDA 和IICSCL。在IICSCL 高電平期間,IICSDA 的下降沿啟動(dòng),上升沿停止。S3C44B0X 處理器可以支持主發(fā)送,主接受,從發(fā)送,從接受4 種工作模式。在主發(fā)送模式下,處理器通過I2C 接口與外部串行器件進(jìn)行數(shù)據(jù)傳送,需要用到如下寄存器。(1) I2C 總線控制寄存器IICCONACK Enable 0: 禁止產(chǎn)生ACK 信號(hào);1:允許產(chǎn)生ACK 信號(hào)。Tx CLK Select 0: IICCLK=fMC

14、LK/16; 1:IICCLK= fMCLK/512.Tx/Rx Interrupt 0: 禁止Tx/Rx 中斷; 1:允許Tx/Rx 中斷。INT_PND 寫0:清除中斷標(biāo)志并重新啟動(dòng)I2C 總線寫操作;讀1:中斷標(biāo)志置位。Tx Clock Value I2C發(fā)送加載初始數(shù)據(jù),決定發(fā)送頻率。(2) I2C 總線狀態(tài)寄存器IICSTATMode_s 00: 從接受; 10:主接受;01:從發(fā)送;11:主發(fā)送。Cond_s 寫0:產(chǎn)生STOP_C 信號(hào);讀1:I2C 總線空閑。SOE 0:禁止Tx/Rx 信號(hào)傳輸;1:允許Tx/Rx 信號(hào)傳輸。ASF 0:I2C 總線仲裁成功;1:仲裁不成功,I

15、2C 總線不能工作。ASS 作為從設(shè)備時(shí),為0:檢測到START_C 或STOP_C 信號(hào);為1:接受地址。AZS 作為從設(shè)備時(shí),為0:收到START_C 或STOP_C 信號(hào);為1:I2C 總線地址為0。LRB 接收到的最低數(shù)據(jù)位。為0:接受到ACK 信號(hào);為1:未接受到ACK 信號(hào)。(3) I2C 總線地址寄存器IICADDSlvADDR 位【7:1】是從設(shè)備的設(shè)備地址和頁面地址;位0 是讀/寫控制(0 為寫;1 為讀)。當(dāng)SOE=0 時(shí),可對(duì)SlvADDR 進(jìn)行讀|寫。(4) I2C 總線發(fā)送/接受移位寄存器IICDSShitDATA 位【7:1】存放I2C 總線要移位傳輸或接受的數(shù)據(jù)。

16、當(dāng)SOE=1 時(shí),可對(duì)ShitDATA 進(jìn)行讀/寫。I2C 控制器內(nèi)部控制邏輯框圖如圖1-7 所示圖1-7 I2C 控制器邏輯框圖B. 使用S3C44B0X I2C 總線讀/寫方法單字節(jié)寫操作(R/W=0) Addr:設(shè)備,頁面及訪問地址同一頁面的多字節(jié)寫操作(R/W) OPADDR:設(shè)備及頁面地址(高7 位)單字節(jié)讀串行存儲(chǔ)器件(R/W=1) Addr:設(shè)備,頁面及訪問地址同一頁面的多字節(jié)讀操作(R/W=1) Addr:設(shè)備,頁面及訪問地址注:P&R=OPADDRR_R=1010xxx(字節(jié)高7 位)R,重新啟動(dòng)讀操作。4.2 程序流程圖:4.3 主程序代碼:#include &qu

17、ot;option.h"#include "def.h"#include "44b.h"#include "44blib.h"#define WRDATA (1)#define POLLACK (2)#define RDDATA (3)#define SETRDADDR (4)#define IICBUFSIZE 0x20void disnum(U32 data);void Isr_Init(void);void HaltUndef(void);void HaltSwi(void);void HaltPabort(void)

18、; void HaltDabort(void);void Rd24C080(U32 slvAddr,U32 addr,U8 *data);void Wr24C080(U32 slvAddr,U32 addr,U8 data);U8 _iicDataIICBUFSIZE;volatile int _iicDataCount;volatile int _iicStatus;volatile int _iicMode;volatile U16 * LedDBuffer = (volatile U16 *)(0x2000000);volatile U16 * LedSBuffer = (volatil

19、e U16 *)(0x2000000);static U8 SHOWDATA16=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71;數(shù)碼管上的字模0Fint _iicPt;void _irq IicInt(void);void Main(void) unsigned int i,j,y,m; static U8 data256; unsigned char *src, *dst; unsigned int memSum; rSYSCFG=SYSCFG_8KB;#if (PLLON=1)

20、 ChangePllValue(PLL_M,PLL_P,PLL_S);#endif Isr_Init(); Port_Init(); Uart_Init(0,115200);波特率 Uart_Select(0); Delay(0); /calibrate Delay() Led_Display(7); Delay(1000); /calibrate Delay() Led_Display(0); Delay(5000); /calibrate Delay() Led_Display(7); Uart_Printf("IIC Test using KS24C02n"); pI

21、SR_IIC=(unsigned)IicInt; rINTMSK=(BIT_GLOBAL|BIT_IIC); rIICCON=(1<<7)|(0<<6)|(1<<5)|(0xf); /Enable interrupt, IICCLK=MCLK/16, Enable ACK /40Mhz/16/(15+1) = 257Khz rIICADD=0x10; / S3C44B0X slave address rIICSTAT=0x10; Uart_Printf("陳哲n");在終端上顯示祁恒 Uart_Printf("電信0801n&q

22、uot;);在終端上顯示電信0801 for(y=0;y<100;y+) *LedDBuffer=(1<<0)<<8)+SHOWDATA0; 在數(shù)碼管上顯示0 Delay(50); *LedDBuffer=(1<<1)<<8)+SHOWDATA8; 在數(shù)碼管上顯示8 Delay(50); *LedDBuffer=(1<<2)<<8)+SHOWDATA0; 在數(shù)碼管上顯示0 Delay(50); *LedDBuffer=(1<<3)<<8)+SHOWDATA1; 在數(shù)碼管上顯示1 Delay(5

23、0); 在數(shù)碼管上顯示0801 Uart_Printf("2008n"); for (m=0;m<100;m+) *LedDBuffer=(1<<0)<<8)+SHOWDATA2; 在數(shù)碼管上顯示2 Delay(50); *LedDBuffer=(1<<1)<<8)+SHOWDATA0; 在數(shù)碼管上顯示0 Delay(50); *LedDBuffer=(1<<2)<<8)+SHOWDATA0; 在數(shù)碼管上顯示0 Delay(50); *LedDBuffer=(1<<3)<<

24、8)+SHOWDATA8; 在數(shù)碼管上顯示8 Delay(50); Uart_Printf("1186n"); for (m=0;m<100;m+) *LedDBuffer=(1<<0)<<8)+SHOWDATA1; 在數(shù)碼管上顯示1 Delay(50); *LedDBuffer=(1<<1)<<8)+SHOWDATA1; 在數(shù)碼管上顯示1 Delay(50); *LedDBuffer=(1<<2)<<8)+SHOWDATA8; 在數(shù)碼管上顯示8 Delay(50); *LedDBuffer=(1

25、<<3)<<8)+SHOWDATA6; 在數(shù)碼管上顯示6 Delay(50); Uart_Printf("032n"); for (m=0;m<100;m+) *LedDBuffer=(1<<0)<<8)+SHOWDATA0;在數(shù)碼管上顯示0 Delay(50); *LedDBuffer=(1<<1)<<8)+SHOWDATA3; 在數(shù)碼管上顯示3 Delay(50); *LedDBuffer=(1<<2)<<8)+SHOWDATA2; 在數(shù)碼管上顯示2 Delay(50)

26、; Uart_Printf("Write test data into KS24C080n");寫數(shù)據(jù) for(i=0;i<256;i+)Wr24C080(0xa0,(U8)i,i);調(diào)用寫數(shù)據(jù) for(i=0;i<256;i+)datai=0; Uart_Printf("Read test data from KS24C080n");讀數(shù)據(jù) for(i=0;i<256;i+)Rd24C080(0xa0,(U8)i,&(datai); 調(diào)用讀函數(shù) for(i=0;i<256;i+) Uart_Printf("%2

27、x ",datai); disnum(datai); Uart_Printf("n"); void disnum (U32 data) U8 num2=0; int j,m; num0=data/16; /十位 num1=data%16; /個(gè)位 for(m=0;m<100;m+) for(j=0;j<2;j+) *LedDBuffer=(1<<j)<<8)+SHOWDATAnumj;/點(diǎn)亮第j個(gè)數(shù)碼管,顯示numj的值 Delay(50); void Wr24C080(U32 slvAddr,U32 addr,U8 data)

28、 _iicMode=WRDATA; _iicPt=0; _iicData0=(U8)addr; _iicData1=data; _iicDataCount=2; rIICDS=slvAddr;/0xa0 rIICSTAT=0xf0; /MasTx,Start /Clearing the pending bit isn't needed because the pending bit has been cleared. while(_iicDataCount!=-1); _iicMode=POLLACK; while(1) rIICDS=slvAddr;_iicStatus=0x100;

29、rIICSTAT=0xf0; /MasTx,StartrIICCON=0xaf; /resumes IIC operation. while(_iicStatus=0x100);if(!(_iicStatus&0x1) break; / when ACK is received rIICSTAT=0xd0; /stop MasTx condition rIICCON=0xaf; /resumes IIC operation. Delay(1); /wait until stop condtion is in effect. /write is completed.void Rd24C0

30、80(U32 slvAddr,U32 addr,U8 *data) _iicMode=SETRDADDR; _iicPt=0; _iicData0=(U8)addr; _iicDataCount=1; rIICDS=slvAddr; rIICSTAT=0xf0; /MasTx,Start /Clearing the pending bit isn't needed because the pending bit has been cleared. while(_iicDataCount!=-1); _iicMode=RDDATA; _iicPt=0; _iicDataCount=1;

31、rIICDS=slvAddr; rIICSTAT=0xb0; /MasRx,Start rIICCON=0xaf; /resumes IIC operation. while(_iicDataCount!=-1); *data=_iicData1;void _irq IicInt(void) U32 iicSt,i; rI_ISPC=BIT_IIC; iicSt=rIICSTAT; if(iicSt&0x8) / when bus arbitration is failed. if(iicSt&0x4) / when a slave address is matched wit

32、h IICADD if(iicSt&0x2) / when a slave address is 0000000b if(iicSt&0x1) / when ACK isn't received switch(_iicMode) case POLLACK: _iicStatus=iicSt; break;case RDDATA: if(_iicDataCount-)=0) _iicData_iicPt+=rIICDS; rIICSTAT=0x90; /stop MasRx condition rIICCON=0xaf; /resumes IIC operation.De

33、lay(1);/wait until stop condtion is in effect./too long time. /The pending bit will not be set after issuing stop condition.break; _iicData_iicPt+=rIICDS;/The last data has to be read with no ack. if(_iicDataCount)=0)rIICCON=0x2f;/resumes IIC operation with NOACK. else rIICCON=0xaf;/resumes IIC oper

34、ation with ACK break;case WRDATA: if(_iicDataCount-)=0) rIICSTAT=0xd0;/stop MasTx condition rIICCON=0xaf;/resumes IIC operation.Delay(1);/wait until stop condtion is in effect./The pending bit will not be set after issuing stop condition.break; rIICDS=_iicData_iicPt+; /_iicData0 has dummy. for(i=0;i<10;i+); /for setup time until rising edge of IICSCL rIICCON=0xaf; /resumes IIC operation. break;case SETRDADDR: /Uart_Printf("S%d",_iicDataCount); if(_iicDataCount-)=0) break; /IIC operation is stopped because of IICCON4 rIICDS=_iicData_iicPt+; for(i=0;i<10;i+); /for setup time

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論