嵌入式課程設(shè)計---i2c 總線接口設(shè)計_第1頁
已閱讀1頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論