版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 《 I2C總線接口設(shè)計 》</p><p><b> 課程設(shè)計報告</b></p><p> 系 別: 信息科學(xué)與技術(shù)系 </p><p> 專業(yè)班級: 電信0801班 </p><p> ?。ㄕn程設(shè)計時間:2011年12月26日——2012年0
2、1月06日)</p><p> ARM嵌入式系統(tǒng)課程設(shè)計任務(wù)書</p><p><b> 目 錄</b></p><p><b> 1.引言5</b></p><p> 2.課程設(shè)計目的6</p><p> 3.課程設(shè)計題目描述和要求6</p&g
3、t;<p> 4.課程設(shè)計報告內(nèi)容7</p><p> 4.1實驗原理7</p><p> 4.2程序流程圖11</p><p> 4.3主程序代碼12</p><p> 5.調(diào)試過程及總結(jié)23</p><p> 6.參考文獻24</p><p>
4、;<b> 引言</b></p><p> IIC即I2C,是一種總線結(jié)構(gòu)。是作為英特爾IC 的互補,這種總線類型是由菲利浦半導(dǎo)體公司在八十年代初設(shè)計出來的,主要是用來連接整體電路(ICS) ,IIC是一種多向控制總線,也就是說多個芯片可以連接到同一總線結(jié)構(gòu)下,同時每個芯片都可以作為實施數(shù)據(jù)傳輸?shù)目刂圃础_@種方式簡化了信號傳輸總線。例如:內(nèi)存中的SPD信息,通過IIC,與BX芯
5、片組聯(lián)系,IIC 存在于英特爾PIIX4結(jié)構(gòu)體系中。</p><p> 隨著大規(guī)模集成電路技術(shù)的發(fā)展,把CPU和一個單獨工作系統(tǒng)所必需的ROM、RAM、I/O端口、A/D、D/A等外圍電路集成在一個單片內(nèi)而制成的單片機或微控制器愈來愈方便。目前,世界上許多公司生產(chǎn)單片機,品種很多。其中包括各種字長的CPU,各種容量的ROM、RAM以及功能各異的I/O接口電路等等,但是,單片機的品種規(guī)格仍然有限,所以只能選用某種
6、單片機來進行擴展。擴展的方法有兩種:一種是并行總線,另一種是串行總線。由于串行總線的連線少,結(jié)構(gòu)簡單,往往不用專門的母板和插座而直接用導(dǎo)線連接各個設(shè)備。因此,采用串行線可大大簡化系統(tǒng)的硬件設(shè)計。PHILIPS公司早在十幾年前就推出了I2C串行總線,利用該總線可實現(xiàn)多主機系統(tǒng)所需的裁決和高低速設(shè)備同步等功能。因此,這是一種高性能的串行總線。</p><p> I2C總線是各種總線中使用信號線最少,并具有自動尋址、
7、多主機時鐘同步和仲裁等功能的總線。因此,使用I2C總線設(shè)計計算機系統(tǒng)十分方便靈活,體積也小,因而在各類實際應(yīng)用中得到廣泛應(yīng)用。</p><p> 飛利浦電子公司日前推出新型二選一I2C主選擇器,可以使兩個I2C主設(shè)備中的任何一個與共享資源連接,廣泛適用于從MP3播放器到服務(wù)器等計算、通信和網(wǎng)絡(luò)應(yīng)用領(lǐng)域,從而使制造商和終端用戶從中獲益。PCA9541可以使兩個I2C主設(shè)備在互不連接的情況下與同一個從設(shè)備相連接,從
8、而簡化了設(shè)計的復(fù)雜性。此外,新產(chǎn)品以單器件替代了I2C多個主設(shè)備應(yīng)用中的多個芯片,有效節(jié)省了系統(tǒng)成本。</p><p><b> 課程設(shè)計目的</b></p><p> 通過實驗掌握I2C 串行數(shù)據(jù)通信協(xié)議的使用。</p><p> 掌握EEPROM 器件的讀/寫方法。</p><p> 通過實驗掌握S3C44B
9、0X或者S3C2440A 處理器的I2C 控制器的使</p><p> 課程設(shè)計題目描述和要求</p><p> IIC是PHILPS公司開發(fā)的串行總線,用于連接微處理器及其外圍設(shè)備,具有如下特點:</p><p> 只有兩條總線線路,串行數(shù)據(jù)線SDA、串行時鐘線SCL;</p><p> 每個連接到總線的器件都可以用軟件根據(jù)它唯一地
10、址來識別;</p><p> 傳輸數(shù)據(jù)間是簡單的主從關(guān)系;</p><p> 主機可以用作主機發(fā)送器或主機接收器;</p><p> 多主機總線,可以檢測沖突;</p><p> 連接到同一總線上的IC數(shù)量只受到總線的最大電容400pF的限制;</p><p> 要求編寫程序?qū)嶒灠迳?EEPROM 器件24
11、C08 進行讀/寫訪問。實現(xiàn)從同一地址寫入再讀出數(shù)據(jù),并進行比較,以檢測EEPROM 器件24C08 和處理器I2C 接口的工作是否正常。</p><p> 使用實驗板和板上的IIC EEPROM芯片,實現(xiàn)對EEPROM的讀寫;</p><p> 完成實驗方案的設(shè)計,根據(jù)原理圖完成硬件的搭建;</p><p> 可選容量為256字節(jié)、1K字節(jié);</p&g
12、t;<p> 實現(xiàn)字節(jié)寫、頁寫、當(dāng)前地址讀、隨機地址讀等功能,并封裝成一個個可供用戶調(diào)用的函數(shù);</p><p><b> 顯示功能:</b></p><p> ?、侔炎x寫的數(shù)據(jù)通過串口傳到PC機用超級終端(或串口助手)顯示,要求顯示班級、姓名和學(xué)號;</p><p> ②如果用ARM7的開發(fā)板,要求把讀取的數(shù)據(jù)用數(shù)碼管顯示
13、,其中能力強的同學(xué)可以通用點陣顯示班級和學(xué)號;</p><p> ?、廴绻肁RM9的開發(fā)板,要求用液晶屏顯示班級姓名和學(xué)號,以及讀取的數(shù)字。</p><p> 在實驗完成的基礎(chǔ)上完成課程設(shè)計報告的撰寫,按照模板的格式書寫,要求有軟件流程圖和調(diào)試過程。</p><p><b> 課程設(shè)計報告內(nèi)容</b></p><p&g
14、t;<b> 實驗原理</b></p><p> I2C 接口以及EEPROM</p><p> I2C 總線為同步串行數(shù)據(jù)傳輸總線,其標(biāo)準(zhǔn)總線傳輸速率為100kb/s,增強總線可達400kb/s,總線驅(qū)動能力為400pF。I2C 總線可構(gòu)成多主和主從系統(tǒng)。在多主系統(tǒng)結(jié)構(gòu)中,系統(tǒng)通過硬件或軟件仲裁獲得總線控制使用權(quán)。應(yīng)用系統(tǒng)中I2C 總線多采用主動結(jié)構(gòu),即總線上
15、只有一個主控節(jié)點,總線上的其他設(shè)備都作為從設(shè)備。I2C 總線上的設(shè)備尋址由器件地質(zhì)界現(xiàn)決定,并且通過訪問地址最低位來控制讀/寫方向。</p><p> 目前,通用存儲器芯片多位 EEPROM,其常用的協(xié)議主要有兩線串行連接協(xié)議(I2C)和三線串行連接協(xié)議。帶I2C總線接口的EEPROM 有許多型號,其中AT24CXXX 系列使用十分普遍,產(chǎn)品包括AT2401/02/04/08/等,其容量(字節(jié)數(shù)ⅹ頁)分別為12
16、8ⅹ8/256ⅹ8/512ⅹ8/1024ⅹ8/2048ⅹ,適用于2∽5V 的低電壓操作,具有低功耗和高可靠性等優(yōu)點。</p><p> AT24 系列存儲器芯片采用COMS 工藝制造,內(nèi)置有高壓泵,可在單電壓供電條件下工作,其標(biāo)準(zhǔn)封裝為8 引腳DIP 封裝形式,如圖1-1 所示。</p><p> 圖1-1 AT24 標(biāo)準(zhǔn)封裝引腳圖</p><p> 各引腳的
17、功能說明如下:</p><p> SCL :串行時鐘。遵循ISO/IEC7816 同步協(xié)議;漏極開路,需要上拉電阻;在該引腳的上升沿,系統(tǒng)將數(shù)據(jù)輸入到每個EEPROM 器件,在下降沿輸出。</p><p> SDA :串行數(shù)據(jù)線。漏極開路,需要上拉電阻;雙向串行數(shù)據(jù)線,漏極開路,可與其他開路器件“線或”。</p><p> A0,A1,A2 :器件/頁面尋址地
18、址輸入端。在AT24C01/02 中,引腳被硬連接。其他AT24Cxx均可接尋址地址線。</p><p> WP :讀/寫保護。接低電平時可對整片空間進行讀/寫;接高電平時不能對受保護區(qū)進行讀/ 寫。</p><p> VCC/GND :+5V 的工作電壓。</p><p> I2C 總線的讀/寫控制邏輯</p><p> ? 開始條
19、件(START_C),當(dāng)SCL 為高電平時,SDA 由高轉(zhuǎn)低,即為開始。</p><p> ? 停止條件(STOP_C),當(dāng)SCL 為高電平時,SDA 由低轉(zhuǎn)為高,即為停止。</p><p> ? 確認信號(ACK),在接受方應(yīng)答下,每收到一個字節(jié)后便將SDA 電平拉低,表示確認。</p><p> ? 數(shù)據(jù)傳送(Read/Write),I2C 總線啟動或應(yīng)答
20、后,在SCL 高電平期間,數(shù)據(jù)串行傳送;在SCL 低電平期間,數(shù)據(jù)準(zhǔn)備,并允許SDA 線上數(shù)據(jù)電平變換??偩€以字節(jié)(8位)位單位傳送數(shù)據(jù),且高有效位(MSB)在前。I2C 數(shù)據(jù)傳送時序如圖1-2 所示。</p><p> 圖1-2 I2C 總線信號的時序</p><p> S3C44B0X 處理器I2C 接口</p><p> S3C44B0X I2C 接口
21、簡介</p><p> S3C44B0X 處理器為用戶進行應(yīng)用設(shè)計提供了支持多主總線的I2C 接口,處理器提供符合I2C 協(xié)議的設(shè)備連接的雙向數(shù)據(jù)線IICSDA 和IICSCL。在IICSCL 高電平期間,IICSDA 的下降沿啟動,上升沿停止。S3C44B0X 處理器可以支持主發(fā)送,主接受,從發(fā)送,從接受4 種工作模式。在主發(fā)送模式下,處理器通過I2C 接口與外部串行器件進行數(shù)據(jù)傳送,需要用到如下寄存器。&l
22、t;/p><p> I2C 總線控制寄存器IICCON</p><p> ACK Enable 0: 禁止產(chǎn)生ACK 信號;1:允許產(chǎn)生ACK 信號。</p><p> Tx CLK Select 0: IICCLK=fMCLK/16; 1:IICCLK= fMCLK/512.</p><p> Tx/Rx Int
23、errupt 0: 禁止Tx/Rx 中斷; 1:允許Tx/Rx 中斷。</p><p> INT_PND 寫0:清除中斷標(biāo)志并重新啟動I2C 總線寫操作;讀1:中斷標(biāo)志置位。</p><p> Tx Clock Value I2C發(fā)送加載初始數(shù)據(jù),決定發(fā)送頻率。</p><p> (2) I2C 總線狀態(tài)寄存器IICSTAT&
24、lt;/p><p> Mode_s 00: 從接受; 10:主接受;01:從發(fā)送;11:主發(fā)送。</p><p> Cond_s 寫0:產(chǎn)生STOP_C 信號;讀1:I2C 總線空閑。</p><p> SOE 0:禁止Tx/Rx 信號傳輸;1:允許Tx/Rx 信號傳輸。</p><p>
25、; ASF 0:I2C 總線仲裁成功;1:仲裁不成功,I2C 總線不能工作。</p><p> ASS 作為從設(shè)備時,為0:檢測到START_C 或STOP_C 信號;為1:接受地址。</p><p> AZS 作為從設(shè)備時,為0:收到START_C 或STOP_C 信號;為1:I2C 總線地址為0。</p>
26、<p> LRB 接收到的最低數(shù)據(jù)位。為0:接受到ACK 信號;為1:未接受到ACK 信號。</p><p> (3) I2C 總線地址寄存器IICADD</p><p> SlvADDR 位【7:1】是從設(shè)備的設(shè)備地址和頁面地址;位0 是讀/寫控制(0 為寫;1 為讀)。當(dāng)SOE=0 時,可對SlvADDR 進行讀|寫。</p>
27、<p> (4) I2C 總線發(fā)送/接受移位寄存器IICDS</p><p> ShitDATA 位【7:1】存放I2C 總線要移位傳輸或接受的數(shù)據(jù)。當(dāng)SOE=1 時,可對ShitDATA 進行讀/寫。</p><p> I2C 控制器內(nèi)部控制邏輯框圖如圖1-7 所示</p><p> 圖1-7 I2C 控制器邏輯框圖</p&
28、gt;<p> 使用S3C44B0X I2C 總線讀/寫方法</p><p> 單字節(jié)寫操作(R/W=0) Addr:設(shè)備,頁面及訪問地址</p><p> 同一頁面的多字節(jié)寫操作(R/W) OPADDR:設(shè)備及頁面地址(高7 位)</p><p> 單字節(jié)讀串行存儲器件(R/W=1)
29、 Addr:設(shè)備,頁面及訪問地址</p><p> 同一頁面的多字節(jié)讀操作(R/W=1) Addr:設(shè)備,頁面及訪問地址</p><p> 注:P&R=OPADDRR_R=1010xxx(字節(jié)高7 位)R,重新啟動讀操作。</p><p><b> 程序流程圖:</b></p><p>
30、;<b> 主程序代碼:</b></p><p> #include "option.h"</p><p> #include "def.h"</p><p> #include "44b.h"</p><p> #include "44bl
31、ib.h"</p><p> #define WRDATA (1)</p><p> #define POLLACK (2)</p><p> #define RDDATA (3)</p><p> #define SETRDADDR (4)</p><p> #defi
32、ne IICBUFSIZE 0x20</p><p> void disnum(U32 data);</p><p> void Isr_Init(void);</p><p> void HaltUndef(void);</p><p> void HaltSwi(void);</p><p> void
33、HaltPabort(void); </p><p> void HaltDabort(void);</p><p> void Rd24C080(U32 slvAddr,U32 addr,U8 *data);</p><p> void Wr24C080(U32 slvAddr,U32 addr,U8 data);</p><p
34、> U8 _iicData[IICBUFSIZE];</p><p> volatile int _iicDataCount;</p><p> volatile int _iicStatus;</p><p> volatile int _iicMode;</p><p> volatile U16 * LedDBuffer
35、 = (volatile U16 *)(0x2000000);</p><p> volatile U16 * LedSBuffer = (volatile U16 *)(0x2000000);</p><p> static U8 SHOWDATA[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x3
36、9,0x5E,0x79,0x71};數(shù)碼管上的字模0—F</p><p> int _iicPt;</p><p> void __irq IicInt(void);</p><p> void Main(void)</p><p><b> {</b></p><p> unsigne
37、d int i,j,y,m;</p><p> static U8 data[256];</p><p> unsigned char *src, *dst;</p><p> unsigned int memSum;</p><p> rSYSCFG=SYSCFG_8KB;</p><p> #if (PL
38、LON==1)</p><p> ChangePllValue(PLL_M,PLL_P,PLL_S);</p><p><b> #endif</b></p><p> Isr_Init();</p><p> Port_Init();</p><p> Uart_Init(0,1152
39、00);波特率</p><p> Uart_Select(0);</p><p> Delay(0); //calibrate Delay()</p><p> Led_Display(7);</p><p> Delay(1000); //calibrate Delay()</p><p> Led_D
40、isplay(0);</p><p> Delay(5000); //calibrate Delay()</p><p> Led_Display(7);</p><p> Uart_Printf("[IIC Test using KS24C02]\n");</p><p> pISR_IIC=(unsigned
41、)IicInt;</p><p> rINTMSK=~(BIT_GLOBAL|BIT_IIC);</p><p> rIICCON=(1<<7)|(0<<6)|(1<<5)|(0xf);</p><p> //Enable interrupt, IICCLK=MCLK/16, Enable ACK</p>&l
42、t;p> //40Mhz/16/(15+1) = 257Khz</p><p> rIICADD=0x10; // S3C44B0X slave address</p><p> rIICSTAT=0x10;</p><p> Uart_Printf("陳哲\n");在終端上顯示祁恒</p><p>
43、 Uart_Printf("電信0801\n");在終端上顯示電信0801</p><p> for(y=0;y<100;y++)</p><p><b> { </b></p><p> *LedDBuffer=((~(1<<0))<<8)+SHOWDATA[0]; 在數(shù)碼管上顯示0&
44、lt;/p><p> Delay(50);</p><p> *LedDBuffer=((~(1<<1))<<8)+SHOWDATA[8]; 在數(shù)碼管上顯示8</p><p> Delay(50);</p><p> *LedDBuffer=((~(1<<2))<<8)+SHOWDATA[0
45、]; 在數(shù)碼管上顯示0</p><p> Delay(50);</p><p> *LedDBuffer=((~(1<<3))<<8)+SHOWDATA[1]; 在數(shù)碼管上顯示1</p><p> Delay(50);</p><p> }在數(shù)碼管上顯示0801</p><p> Ua
46、rt_Printf("2008\n");</p><p> for (m=0;m<100;m++)</p><p> {*LedDBuffer=((~(1<<0))<<8)+SHOWDATA[2]; 在數(shù)碼管上顯示2</p><p> Delay(50);</p><p> *LedD
47、Buffer=((~(1<<1))<<8)+SHOWDATA[0]; 在數(shù)碼管上顯示0</p><p> Delay(50);</p><p> *LedDBuffer=((~(1<<2))<<8)+SHOWDATA[0]; 在數(shù)碼管上顯示0</p><p> Delay(50);</p><
48、p> *LedDBuffer=((~(1<<3))<<8)+SHOWDATA[8]; 在數(shù)碼管上顯示8</p><p> Delay(50);</p><p><b> } </b></p><p> Uart_Printf("1186\n");</p><p>
49、 for (m=0;m<100;m++)</p><p> {*LedDBuffer=((~(1<<0))<<8)+SHOWDATA[1]; 在數(shù)碼管上顯示1</p><p> Delay(50);</p><p> *LedDBuffer=((~(1<<1))<<8)+SHOWDATA[1]; 在數(shù)碼管
50、上顯示1</p><p> Delay(50);</p><p> *LedDBuffer=((~(1<<2))<<8)+SHOWDATA[8]; 在數(shù)碼管上顯示8</p><p> Delay(50);</p><p> *LedDBuffer=((~(1<<3))<<8)+SHOWD
51、ATA[6]; 在數(shù)碼管上顯示6</p><p> Delay(50);</p><p><b> }</b></p><p> Uart_Printf("032\n");</p><p> for (m=0;m<100;m++)</p><p> {*LedD
52、Buffer=((~(1<<0))<<8)+SHOWDATA[0];在數(shù)碼管上顯示0</p><p> Delay(50);</p><p> *LedDBuffer=((~(1<<1))<<8)+SHOWDATA[3]; 在數(shù)碼管上顯示3</p><p> Delay(50);</p><p
53、> *LedDBuffer=((~(1<<2))<<8)+SHOWDATA[2]; 在數(shù)碼管上顯示2</p><p> Delay(50);</p><p><b> } </b></p><p> Uart_Printf("Write test data into KS24C080\n"
54、;);寫數(shù)據(jù)</p><p> for(i=0;i<256;i++)</p><p> Wr24C080(0xa0,(U8)i,i);調(diào)用寫數(shù)據(jù)</p><p> for(i=0;i<256;i++)</p><p> data[i]=0;</p><p> Uart_Printf("R
55、ead test data from KS24C080\n");讀數(shù)據(jù)</p><p> for(i=0;i<256;i++)</p><p> Rd24C080(0xa0,(U8)i,&(data[i])); 調(diào)用讀函數(shù)</p><p> for(i=0;i<256;i++)</p><p> {Uar
56、t_Printf("%2x ",data[i]);</p><p> disnum(data[i]);</p><p> Uart_Printf("\n");</p><p><b> }</b></p><p><b> }</b></p>
57、;<p> void disnum (U32 data)</p><p> { U8 num[2]={0};</p><p><b> int j,m;</b></p><p> num[0]=data/16; //十位</p><p> num[1]=data%16; //個位</
58、p><p> for(m=0;m<100;m++)</p><p><b> {</b></p><p> for(j=0;j<2;j++)</p><p><b> {</b></p><p> *LedDBuffer=((~(1<<j))&l
59、t;<8)+SHOWDATA[num[j]];//點亮第j個數(shù)碼管,顯示num[j]的值 </p><p> Delay(50);</p><p><b> }</b></p><p><b> }</b>
60、;</p><p><b> }</b></p><p> void Wr24C080(U32 slvAddr,U32 addr,U8 data)</p><p><b> {</b></p><p> _iicMode=WRDATA;</p><p><b&g
61、t; _iicPt=0;</b></p><p> _iicData[0]=(U8)addr;</p><p> _iicData[1]=data;</p><p> _iicDataCount=2;</p><p> rIICDS=slvAddr;//0xa0</p><p> rIICSTA
62、T=0xf0; //MasTx,Start</p><p> //Clearing the pending bit isn't needed because the pending bit has been cleared.</p><p> while(_iicDataCount!=-1);</p><p> _iicMode=POLLACK;<
63、;/p><p><b> while(1)</b></p><p><b> {</b></p><p> rIICDS=slvAddr;</p><p> _iicStatus=0x100;</p><p> rIICSTAT=0xf0; //MasTx,Start&
64、lt;/p><p> rIICCON=0xaf; //resumes IIC operation. </p><p> while(_iicStatus==0x100);</p><p> if(!(_iicStatus&0x1))</p><p> break; // when ACK is received</p>
65、;<p><b> }</b></p><p> rIICSTAT=0xd0; //stop MasTx condition </p><p> rIICCON=0xaf; //resumes IIC operation. </p><p> Delay(1); //wait until stop condt
66、ion is in effect.</p><p> //write is completed.</p><p><b> }</b></p><p> void Rd24C080(U32 slvAddr,U32 addr,U8 *data)</p><p><b> {</b></p
67、><p> _iicMode=SETRDADDR;</p><p><b> _iicPt=0;</b></p><p> _iicData[0]=(U8)addr;</p><p> _iicDataCount=1;</p><p> rIICDS=slvAddr;</p>
68、<p> rIICSTAT=0xf0; //MasTx,Start </p><p> //Clearing the pending bit isn't needed because the pending bit has been cleared.</p><p> while(_iicDataCount!=-1);</p><p>
69、_iicMode=RDDATA;</p><p><b> _iicPt=0;</b></p><p> _iicDataCount=1;</p><p> rIICDS=slvAddr;</p><p> rIICSTAT=0xb0; //MasRx,Start</p><p> rI
70、ICCON=0xaf; //resumes IIC operation. </p><p> while(_iicDataCount!=-1);</p><p> *data=_iicData[1];</p><p><b> }</b></p><p> void __irq IicInt(void)&l
71、t;/p><p><b> {</b></p><p> U32 iicSt,i;</p><p> rI_ISPC=BIT_IIC;</p><p> iicSt=rIICSTAT; </p><p> if(iicSt&0x8){} // when bus arbitration
72、 is failed.</p><p> if(iicSt&0x4){} // when a slave address is matched with IICADD</p><p> if(iicSt&0x2){} // when a slave address is 0000000b</p><p> if(iicSt&0x1){}
73、 // when ACK isn't received</p><p> switch(_iicMode)</p><p><b> {</b></p><p> case POLLACK:</p><p> _iicStatus=iicSt;</p><p><b>
74、 break;</b></p><p> case RDDATA:</p><p> if((_iicDataCount--)==0)</p><p><b> {</b></p><p> _iicData[_iicPt++]=rIICDS;</p><p> rIICST
75、AT=0x90; //stop MasRx condition </p><p> rIICCON=0xaf; //resumes IIC operation.</p><p> Delay(1);//wait until stop condtion is in effect.</p><p> //too long time... </p>
76、;<p> //The pending bit will not be set after issuing stop condition.</p><p> break; </p><p><b> } </b></p><p> _iicData[_iicPt++]=rIICDS;</p>
77、<p> //The last data has to be read with no ack.</p><p> if((_iicDataCount)==0)</p><p> rIICCON=0x2f;//resumes IIC operation with NOACK. </p><p><b> else </b>
78、</p><p> rIICCON=0xaf;//resumes IIC operation with ACK</p><p><b> break;</b></p><p> case WRDATA:</p><p> if((_iicDataCount--)==0)</p><p>
79、<b> {</b></p><p> rIICSTAT=0xd0;//stop MasTx condition </p><p> rIICCON=0xaf;//resumes IIC operation.</p><p> Delay(1);//wait until stop condtion is in effect.<
80、;/p><p> //The pending bit will not be set after issuing stop condition.</p><p> break; </p><p><b> }</b></p><p> rIICDS=_iicData[_iicPt++]; //_iicData
81、[0] has dummy.</p><p> for(i=0;i<10;i++); //for setup time until rising edge of IICSCL</p><p> rIICCON=0xaf; //resumes IIC operation.</p><p><b> break;</b>
82、</p><p> case SETRDADDR:</p><p> //Uart_Printf("[S%d]",_iicDataCount);</p><p> if((_iicDataCount--)==0)</p><p><b> {</b></p><p>
83、 break; //IIC operation is stopped because of IICCON[4] </p><p><b> }</b></p><p> rIICDS=_iicData[_iicPt++];</p><p> for(i=0;i<10;i++); //for setup time until
84、 rising edge of IICSCL</p><p> rIICCON=0xaf; //resumes IIC operation.</p><p><b> break;</b></p><p><b> default:</b></p><p><b> bre
85、ak; </b></p><p><b> }</b></p><p><b> }</b></p><p> /******************************************************************/</p><p> void
86、 Isr_Init(void)</p><p><b> {</b></p><p><b> U32 i;</b></p><p> pISR_UNDEF=(unsigned)HaltUndef;</p><p> pISR_SWI =(unsigned)HaltSwi;</p&g
87、t;<p> pISR_PABORT=(unsigned)HaltPabort;</p><p> pISR_DABORT=(unsigned)HaltDabort;</p><p> for(i=_RAM_STARTADDRESS;i<(_RAM_STARTADDRESS+0x20);i+=4)</p><p><b> {&
88、lt;/b></p><p> *((volatile unsigned *)i)=0xEA000000+0x1FFE;</p><p><b> }</b></p><p> rINTCON=0x5; // Non-vectored,IRQ enable,FIQ disable </p><p>
89、 rINTMOD=0x0; // All=IRQ mode</p><p> rINTMSK|=BIT_GLOBAL|BIT_EINT3; // All interrupt is masked.</p><p><b> }</b></p><p> void HaltUndef(void)</p><p&g
90、t;<b> {</b></p><p> Uart_Printf("Undefined instruction exception!!!\n");</p><p><b> while(1);</b></p><p><b> }</b></p><p
91、> void HaltSwi(void)</p><p><b> {</b></p><p> Uart_Printf("SWI exception!!!\n");</p><p><b> while(1);</b></p><p><b> }&l
92、t;/b></p><p> void HaltPabort(void)</p><p><b> {</b></p><p> Uart_Printf("Pabort exception!!!\n");</p><p><b> while(1);</b><
93、/p><p><b> }</b></p><p> void HaltDabort(void)</p><p><b> {</b></p><p> Uart_Printf("Dabort exception!!!\n");</p><p><
94、;b> while(1);</b></p><p><b> }</b></p><p><b> 調(diào)試過程及總結(jié)</b></p><p> 這次試驗涉及到了嵌入式的很多知識,比較困難。實驗的前幾天因為去外地找工作,所以沒有去,以為應(yīng)該蠻簡單的,但是事與愿違,在最后幾天里毫無頭緒的我只能在同學(xué)的幫
95、助下才調(diào)試出了試驗結(jié)果。</p><p> 慚愧的說,到現(xiàn)在軟件程序還是沒有完全理解,但是會繼續(xù)自己研究外加請教同學(xué),相信很快就能完全弄懂。</p><p> 雖然這次課程設(shè)計沒有很好的完成,有些遺憾,但是從中還是學(xué)到了不少知識,最后謝謝老師細心輔導(dǎo)。</p><p><b> 參考文獻</b></p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- i2c課程設(shè)計--基于arm的i2c接口設(shè)計
- arm課程設(shè)計--基于arm的i2c接口設(shè)計
- 基于fpga的i2c接口程序?qū)崿F(xiàn)課程設(shè)計
- 片上i2c總線設(shè)計
- 基于fpga的i2c串行總線接口電路設(shè)計
- 基于fpga課程設(shè)計--基于fpga的i2c接口程序?qū)崿F(xiàn)
- 片上I2C總線設(shè)計.pdf
- 基于dsp與cpld的i2c總線接口的設(shè)計與實現(xiàn)
- 嵌入式課程設(shè)計報告2
- 同步串行通訊I2C總線的設(shè)計.pdf
- 嵌入式課程設(shè)計報告 (2)
- 嵌入式課程設(shè)計
- 嵌入式課程設(shè)計
- i2c總線之(二)---時序
- 集成I2C總線接口的白光LED驅(qū)動芯片的研究與設(shè)計.pdf
- 嵌入式課程設(shè)計
- 嵌入式課程設(shè)計
- 嵌入式課程設(shè)計
- 嵌入式課程設(shè)計
- 基于I2C總線接口的低功耗10bit ADC的設(shè)計.pdf
評論
0/150
提交評論