ARM嵌入式系統(tǒng)課程設(shè)計I2C總線接口設(shè)計_第1頁
ARM嵌入式系統(tǒng)課程設(shè)計I2C總線接口設(shè)計_第2頁
ARM嵌入式系統(tǒng)課程設(shè)計I2C總線接口設(shè)計_第3頁
ARM嵌入式系統(tǒng)課程設(shè)計I2C總線接口設(shè)計_第4頁
ARM嵌入式系統(tǒng)課程設(shè)計I2C總線接口設(shè)計_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

3、m9的開發(fā)板,要求用液晶屏顯示班級姓名和學(xué)號,以及讀取的數(shù)字。l 在實驗完成的基礎(chǔ)上完成課程設(shè)計報告的撰寫,按照模板的格式書寫,要求有軟件流程圖和調(diào)試過程。五、進程安排1準(zhǔn)備和審題,講解原理0.5天2系統(tǒng)分析13總體設(shè)計和硬件的完成1.54詳細設(shè)計(編寫代碼)25調(diào)試和測試36撰寫課程設(shè)計報告17課程設(shè)計成果驗收0.58正式提交課程設(shè)計報告和系統(tǒng)源程序0.5六、主要參考資料嵌入式系統(tǒng)實驗指導(dǎo)書arm課程設(shè)計講義i2c總線接口講義ks24c08芯片資料arm開發(fā)板硬件原理圖和底板的硬件原理圖74hc04、74hc573和74hc595芯片資料指導(dǎo)教師(簽名): 20 年 月 日目 錄1.引言52

4、.課程設(shè)計目的63.課程設(shè)計題目描述和要求64.課程設(shè)計報告內(nèi)容74.1實驗原理74.2程序流程圖114.3主程序代碼125.調(diào)試過程及總結(jié)236.參考文獻241. 引言 iic即i2c,是一種總線結(jié)構(gòu)。是作為英特爾ic的互補,這種總線類型是由菲利浦半導(dǎo)體公司在八十年代初設(shè)計出來的,主要是用來連接整體電路(ics) ,iic是一種多向控制總線,也就是說多個芯片可以連接到同一總線結(jié)構(gòu)下,同時每個芯片都可以作為實施數(shù)據(jù)傳輸?shù)目刂圃?。這種方式簡化了信號傳輸總線。例如:內(nèi)存中的spd信息,通過iic,與bx芯片組聯(lián)系,iic 存在于英特爾piix4結(jié)構(gòu)體系中。隨著大規(guī)模集成電路技術(shù)的發(fā)展,把cpu和一

5、個單獨工作系統(tǒng)所必需的rom、ram、i/o端口、a/d、d/a等外圍電路集成在一個單片內(nèi)而制成的單片機或微控制器愈來愈方便。目前,世界上許多公司生產(chǎn)單片機,品種很多。其中包括各種字長的cpu,各種容量的rom、ram以及功能各異的i/o接口電路等等,但是,單片機的品種規(guī)格仍然有限,所以只能選用某種單片機來進行擴展。擴展的方法有兩種:一種是并行總線,另一種是串行總線。由于串行總線的連線少,結(jié)構(gòu)簡單,往往不用專門的母板和插座而直接用導(dǎo)線連接各個設(shè)備。因此,采用串行線可大大簡化系統(tǒng)的硬件設(shè)計。philips公司早在十幾年前就推出了i2c串行總線,利用該總線可實現(xiàn)多主機系統(tǒng)所需的裁決和高低速設(shè)備同步

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

7、設(shè)計目的1) 通過實驗掌握i2c 串行數(shù)據(jù)通信協(xié)議的使用。2) 掌握eeprom 器件的讀/寫方法。3) 通過實驗掌握s3c44b0x或者s3c2440a 處理器的i2c 控制器的使3. 課程設(shè)計題目描述和要求iic是philps公司開發(fā)的串行總線,用于連接微處理器及其外圍設(shè)備,具有如下特點:1) 只有兩條總線線路,串行數(shù)據(jù)線sda、串行時鐘線scl;2) 每個連接到總線的器件都可以用軟件根據(jù)它唯一地址來識別;3) 傳輸數(shù)據(jù)間是簡單的主從關(guān)系;4) 主機可以用作主機發(fā)送器或主機接收器;5) 多主機總線,可以檢測沖突;6) 連接到同一總線上的ic數(shù)量只受到總線的最大電容400pf的限制;要求編寫

8、程序?qū)嶒灠迳?eeprom 器件24c08 進行讀/寫訪問。實現(xiàn)從同一地址寫入再讀出數(shù)據(jù),并進行比較,以檢測eeprom 器件24c08 和處理器i2c 接口的工作是否正常。1) 使用實驗板和板上的iic eeprom芯片,實現(xiàn)對eeprom的讀寫;2) 完成實驗方案的設(shè)計,根據(jù)原理圖完成硬件的搭建;3) 可選容量為256字節(jié)、1k字節(jié);4) 實現(xiàn)字節(jié)寫、頁寫、當(dāng)前地址讀、隨機地址讀等功能,并封裝成一個個可供用戶調(diào)用的函數(shù);5) 顯示功能:把讀寫的數(shù)據(jù)通過串口傳到pc機用超級終端(或串口助手)顯示,要求顯示班級、姓名和學(xué)號;如果用arm7的開發(fā)板,要求把讀取的數(shù)據(jù)用數(shù)碼管顯示,其中能力強的同

9、學(xué)可以通用點陣顯示班級和學(xué)號;如果用arm9的開發(fā)板,要求用液晶屏顯示班級姓名和學(xué)號,以及讀取的數(shù)字。6) 在實驗完成的基礎(chǔ)上完成課程設(shè)計報告的撰寫,按照模板的格式書寫,要求有軟件流程圖和調(diào)試過程。4. 課程設(shè)計報告內(nèi)容4.1 實驗原理1) i2c 接口以及eepromi2c 總線為同步串行數(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),即總線上只有一個主控節(jié)點,總線上的其他設(shè)備都作為從設(shè)備。i2c 總線上的

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

11、封裝引腳圖各引腳的功能說明如下:scl :串行時鐘。遵循iso/iec7816 同步協(xié)議;漏極開路,需要上拉電阻;在該引腳的上升沿,系統(tǒng)將數(shù)據(jù)輸入到每個eeprom 器件,在下降沿輸出。sda :串行數(shù)據(jù)線。漏極開路,需要上拉電阻;雙向串行數(shù)據(jù)線,漏極開路,可與其他開路器件“線或”。a0,a1,a2 :器件/頁面尋址地址輸入端。在at24c01/02 中,引腳被硬連接。其他at24cxx均可接尋址地址線。wp :讀/寫保護。接低電平時可對整片空間進行讀/寫;接高電平時不能對受保護區(qū)進行讀/ 寫。vcc/gnd :5v 的工作電壓。2) i2c 總線的讀/寫控制邏輯 開始條件(start_c),

12、當(dāng)scl 為高電平時,sda 由高轉(zhuǎn)低,即為開始。 停止條件(stop_c),當(dāng)scl 為高電平時,sda 由低轉(zhuǎn)為高,即為停止。 確認信號(ack),在接受方應(yīng)答下,每收到一個字節(jié)后便將sda 電平拉低,表示確認。 數(shù)據(jù)傳送(read/write),i2c 總線啟動或應(yīng)答后,在scl 高電平期間,數(shù)據(jù)串行傳送;在scl 低電平期間,數(shù)據(jù)準(zhǔn)備,并允許sda 線上數(shù)據(jù)電平變換??偩€以字節(jié)(8位)位單位傳送數(shù)據(jù),且高有效位(msb)在前。i2c 數(shù)據(jù)傳送時序如圖1-2 所示。圖1-2 i2c 總線信號的時序3) s3c44b0x 處理器i2c 接口a. s3c44b0x i2c 接口簡介s3c44

13、b0x 處理器為用戶進行應(yīng)用設(shè)計提供了支持多主總線的i2c 接口,處理器提供符合i2c 協(xié)議的設(shè)備連接的雙向數(shù)據(jù)線iicsda 和iicscl。在iicscl 高電平期間,iicsda 的下降沿啟動,上升沿停止。s3c44b0x 處理器可以支持主發(fā)送,主接受,從發(fā)送,從接受4 種工作模式。在主發(fā)送模式下,處理器通過i2c 接口與外部串行器件進行數(shù)據(jù)傳送,需要用到如下寄存器。(1) i2c 總線控制寄存器iicconack enable 0: 禁止產(chǎn)生ack 信號;1:允許產(chǎn)生ack 信號。tx clk select 0: iicclk=fmclk/16; 1:iicclk= fmclk/512

14、.tx/rx interrupt 0: 禁止tx/rx 中斷; 1:允許tx/rx 中斷。int_pnd 寫0:清除中斷標(biāo)志并重新啟動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 信號;讀1:i2c 總線空閑。soe 0:禁止tx/rx 信號傳輸;1:允許tx/rx 信號傳輸。asf 0:i2c 總線仲裁成功;1:仲裁不成功,i2c 總線不能工作。ass 作為從設(shè)備時,為0:檢測

15、到start_c 或stop_c 信號;為1:接受地址。azs 作為從設(shè)備時,為0:收到start_c 或stop_c 信號;為1:i2c 總線地址為0。lrb 接收到的最低數(shù)據(jù)位。為0:接受到ack 信號;為1:未接受到ack 信號。(3) i2c 總線地址寄存器iicaddslvaddr 位【7:1】是從設(shè)備的設(shè)備地址和頁面地址;位0 是讀/寫控制(0 為寫;1 為讀)。當(dāng)soe=0 時,可對slvaddr 進行讀|寫。(4) i2c 總線發(fā)送/接受移位寄存器iicdsshitdata 位【7:1】存放i2c 總線要移位傳輸或接受的數(shù)據(jù)。當(dāng)soe=1 時,可對shitdata 進行讀/寫。

16、i2c 控制器內(nèi)部控制邏輯框圖如圖1-7 所示圖1-7 i2c 控制器邏輯框圖b. 使用s3c44b0x i2c 總線讀/寫方法單字節(jié)寫操作(r/w=0) addr:設(shè)備,頁面及訪問地址同一頁面的多字節(jié)寫操作(r/w) opaddr:設(shè)備及頁面地址(高7 位)單字節(jié)讀串行存儲器件(r/w=1) addr:設(shè)備,頁面及訪問地址同一頁面的多字節(jié)讀操作(r/w=1) addr:設(shè)備,頁面及訪問地址注:p&r=opaddrr_r=1010xxx(字節(jié)高7 位)r,重新啟動讀操作。4.2 程序流程圖:4.3 主程序代碼:#include option.h#include def.h#include 44

17、b.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); void haltdabort(void);void rd24c080(u32 slvaddr,u32 addr,u8 *data);void wr24

18、c080(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 = (volatile u16 *)(0x2000000);static u8 showdata16=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x

19、07,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) changepllvalue(pll_m,pll_p,pll_s);#endif isr_init(); port_init(); uart_init(0

20、,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); pisr_iic=(unsigned)iicint; rintmsk=(bit_global|bit_iic); riiccon=(17)|(06)|(15)|(0xf); /enab

21、le interrupt, iicclk=mclk/16, enable ack /40mhz/16/(15+1) = 257khz riicadd=0x10; / s3c44b0x slave address riicstat=0x10; uart_printf(陳哲n);在終端上顯示祁恒 uart_printf(電信0801n);在終端上顯示電信0801 for(y=0;y100;y+) *leddbuffer=(10)8)+showdata0; 在數(shù)碼管上顯示0 delay(50); *leddbuffer=(11)8)+showdata8; 在數(shù)碼管上顯示8 delay(50); *l

22、eddbuffer=(12)8)+showdata0; 在數(shù)碼管上顯示0 delay(50); *leddbuffer=(13)8)+showdata1; 在數(shù)碼管上顯示1 delay(50); 在數(shù)碼管上顯示0801 uart_printf(2008n); for (m=0;m100;m+) *leddbuffer=(10)8)+showdata2; 在數(shù)碼管上顯示2 delay(50); *leddbuffer=(11)8)+showdata0; 在數(shù)碼管上顯示0 delay(50); *leddbuffer=(12)8)+showdata0; 在數(shù)碼管上顯示0 delay(50); *l

23、eddbuffer=(13)8)+showdata8; 在數(shù)碼管上顯示8 delay(50); uart_printf(1186n); for (m=0;m100;m+) *leddbuffer=(10)8)+showdata1; 在數(shù)碼管上顯示1 delay(50); *leddbuffer=(11)8)+showdata1; 在數(shù)碼管上顯示1 delay(50); *leddbuffer=(12)8)+showdata8; 在數(shù)碼管上顯示8 delay(50); *leddbuffer=(13)8)+showdata6; 在數(shù)碼管上顯示6 delay(50); uart_printf(03

24、2n); for (m=0;m100;m+) *leddbuffer=(10)8)+showdata0;在數(shù)碼管上顯示0 delay(50); *leddbuffer=(11)8)+showdata3; 在數(shù)碼管上顯示3 delay(50); *leddbuffer=(12)8)+showdata2; 在數(shù)碼管上顯示2 delay(50); uart_printf(write test data into ks24c080n);寫數(shù)據(jù) for(i=0;i256;i+)wr24c080(0xa0,(u8)i,i);調(diào)用寫數(shù)據(jù) for(i=0;i256;i+)datai=0; uart_print

25、f(read test data from ks24c080n);讀數(shù)據(jù) for(i=0;i256;i+)rd24c080(0xa0,(u8)i,&(datai); 調(diào)用讀函數(shù) for(i=0;i256;i+) uart_printf(%2x ,datai); disnum(datai); uart_printf(n); void disnum (u32 data) u8 num2=0; int j,m; num0=data/16; /十位 num1=data%16; /個位 for(m=0;m100;m+) for(j=0;j2;j+) *leddbuffer=(1j)8)+showdata

26、numj;/點亮第j個數(shù)碼管,顯示numj的值 delay(50); void wr24c080(u32 slvaddr,u32 addr,u8 data) _iicmode=wrdata; _iicpt=0; _iicdata0=(u8)addr; _iicdata1=data; _iicdatacount=2; riicds=slvaddr;/0xa0 riicstat=0xf0; /mastx,start /clearing the pending bit isnt needed because the pending bit has been cleared. while(_iicda

27、tacount!=-1); _iicmode=pollack; while(1) riicds=slvaddr;_iicstatus=0x100;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); /w

28、ait until stop condtion is in effect. /write is completed.void rd24c080(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 isnt needed because the pending bit has been cleared. while(

29、_iicdatacount!=-1); _iicmode=rddata; _iicpt=0; _iicdatacount=1; 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 fai

30、led. if(iicst&0x4) / when a slave address is matched with iicadd if(iicst&0x2) / when a slave address is 0000000b if(iicst&0x1) / when ack isnt received switch(_iicmode) case pollack: _iicstatus=iicst; break;case rddata: if(_iicdatacount-)=0) _iicdata_iicpt+=riicds; riicstat=0x90; /stop masrx condit

31、ion riiccon=0xaf; /resumes iic operation.delay(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

32、 noack. else riiccon=0xaf;/resumes iic operation 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=_iicd

33、ata_iicpt+; /_iicdata0 has dummy. for(i=0;i10;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;i10;i+); /for setup time until rising e

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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

提交評論