




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 i2c總線接口設計 課程設計報告系 別: 信息科學與技術系 專業(yè)班級: 電信0801班 學生姓名: 學 號: 指導教師: (課程設計時間:2011年12月26日2012年01月06日)華中科技大學武昌分校arm嵌入式系統(tǒng)課程設計任務書一、設計(調查報告/論文)題目課題:i2c 總線接口設計二、設計(調查報告/論文)主要內容編寫程序對實驗板上 eeprom 器件24c08 進行讀/寫訪問。實現(xiàn)從同一地址寫入再讀出數(shù)據(jù),并進行比較,以檢測eeprom 器件24c08 和處理器i2c 接口的工作是否正常。把讀寫的數(shù)據(jù)通過串口傳到pc機用超級終端(或串口助手)顯示,把讀取的數(shù)據(jù)用數(shù)碼管顯示或者點陣或
2、者液晶屏進行顯示。三、原始資料開發(fā)板的原理圖和實驗參考程序,參考實驗講義和課設講義一塊arm開發(fā)板和底板(未焊接)四、要求的設計(調查/論文)成果l 使用實驗板和板上的iic eeprom芯片,實現(xiàn)對eeprom的讀寫;l 完成實驗方案的設計,根據(jù)原理圖完成硬件的搭建;l 可選容量為256字節(jié)、1k字節(jié);l 實現(xiàn)字節(jié)寫、頁寫、當前地址讀、隨機地址讀等功能,并封裝成一個個可供用戶調用的函數(shù);l 顯示功能:把讀寫的數(shù)據(jù)通過串口傳到pc機用超級終端(或串口助手)顯示,要求顯示班級、姓名和學號;如果用arm7的開發(fā)板,要求把讀取的數(shù)據(jù)用數(shù)碼管顯示,其中能力強的同學可以通用點陣顯示班級和學號;如果用ar
3、m9的開發(fā)板,要求用液晶屏顯示班級姓名和學號,以及讀取的數(shù)字。l 在實驗完成的基礎上完成課程設計報告的撰寫,按照模板的格式書寫,要求有軟件流程圖和調試過程。五、進程安排1準備和審題,講解原理0.5天2系統(tǒng)分析13總體設計和硬件的完成1.54詳細設計(編寫代碼)25調試和測試36撰寫課程設計報告17課程設計成果驗收0.58正式提交課程設計報告和系統(tǒng)源程序0.5六、主要參考資料嵌入式系統(tǒng)實驗指導書arm課程設計講義i2c總線接口講義ks24c08芯片資料arm開發(fā)板硬件原理圖和底板的硬件原理圖74hc04、74hc573和74hc595芯片資料指導教師(簽名): 20 年 月 日目 錄1.引言52
4、.課程設計目的63.課程設計題目描述和要求64.課程設計報告內容74.1實驗原理74.2程序流程圖114.3主程序代碼125.調試過程及總結236.參考文獻241. 引言 iic即i2c,是一種總線結構。是作為英特爾ic的互補,這種總線類型是由菲利浦半導體公司在八十年代初設計出來的,主要是用來連接整體電路(ics) ,iic是一種多向控制總線,也就是說多個芯片可以連接到同一總線結構下,同時每個芯片都可以作為實施數(shù)據(jù)傳輸?shù)目刂圃础_@種方式簡化了信號傳輸總線。例如:內存中的spd信息,通過iic,與bx芯片組聯(lián)系,iic 存在于英特爾piix4結構體系中。隨著大規(guī)模集成電路技術的發(fā)展,把cpu和一
5、個單獨工作系統(tǒng)所必需的rom、ram、i/o端口、a/d、d/a等外圍電路集成在一個單片內而制成的單片機或微控制器愈來愈方便。目前,世界上許多公司生產單片機,品種很多。其中包括各種字長的cpu,各種容量的rom、ram以及功能各異的i/o接口電路等等,但是,單片機的品種規(guī)格仍然有限,所以只能選用某種單片機來進行擴展。擴展的方法有兩種:一種是并行總線,另一種是串行總線。由于串行總線的連線少,結構簡單,往往不用專門的母板和插座而直接用導線連接各個設備。因此,采用串行線可大大簡化系統(tǒng)的硬件設計。philips公司早在十幾年前就推出了i2c串行總線,利用該總線可實現(xiàn)多主機系統(tǒng)所需的裁決和高低速設備同步
6、等功能。因此,這是一種高性能的串行總線。i2c總線是各種總線中使用信號線最少,并具有自動尋址、多主機時鐘同步和仲裁等功能的總線。因此,使用i2c總線設計計算機系統(tǒng)十分方便靈活,體積也小,因而在各類實際應用中得到廣泛應用。飛利浦電子公司日前推出新型二選一i2c主選擇器,可以使兩個i2c主設備中的任何一個與共享資源連接,廣泛適用于從mp3播放器到服務器等計算、通信和網絡應用領域,從而使制造商和終端用戶從中獲益。pca9541可以使兩個i2c主設備在互不連接的情況下與同一個從設備相連接,從而簡化了設計的復雜性。此外,新產品以單器件替代了i2c多個主設備應用中的多個芯片,有效節(jié)省了系統(tǒng)成本。2. 課程
7、設計目的1) 通過實驗掌握i2c 串行數(shù)據(jù)通信協(xié)議的使用。2) 掌握eeprom 器件的讀/寫方法。3) 通過實驗掌握s3c44b0x或者s3c2440a 處理器的i2c 控制器的使3. 課程設計題目描述和要求iic是philps公司開發(fā)的串行總線,用于連接微處理器及其外圍設備,具有如下特點:1) 只有兩條總線線路,串行數(shù)據(jù)線sda、串行時鐘線scl;2) 每個連接到總線的器件都可以用軟件根據(jù)它唯一地址來識別;3) 傳輸數(shù)據(jù)間是簡單的主從關系;4) 主機可以用作主機發(fā)送器或主機接收器;5) 多主機總線,可以檢測沖突;6) 連接到同一總線上的ic數(shù)量只受到總線的最大電容400pf的限制;要求編寫
8、程序對實驗板上 eeprom 器件24c08 進行讀/寫訪問。實現(xiàn)從同一地址寫入再讀出數(shù)據(jù),并進行比較,以檢測eeprom 器件24c08 和處理器i2c 接口的工作是否正常。1) 使用實驗板和板上的iic eeprom芯片,實現(xiàn)對eeprom的讀寫;2) 完成實驗方案的設計,根據(jù)原理圖完成硬件的搭建;3) 可選容量為256字節(jié)、1k字節(jié);4) 實現(xiàn)字節(jié)寫、頁寫、當前地址讀、隨機地址讀等功能,并封裝成一個個可供用戶調用的函數(shù);5) 顯示功能:把讀寫的數(shù)據(jù)通過串口傳到pc機用超級終端(或串口助手)顯示,要求顯示班級、姓名和學號;如果用arm7的開發(fā)板,要求把讀取的數(shù)據(jù)用數(shù)碼管顯示,其中能力強的同
9、學可以通用點陣顯示班級和學號;如果用arm9的開發(fā)板,要求用液晶屏顯示班級姓名和學號,以及讀取的數(shù)字。6) 在實驗完成的基礎上完成課程設計報告的撰寫,按照模板的格式書寫,要求有軟件流程圖和調試過程。4. 課程設計報告內容4.1 實驗原理1) i2c 接口以及eepromi2c 總線為同步串行數(shù)據(jù)傳輸總線,其標準總線傳輸速率為100kb/s,增強總線可達400kb/s,總線驅動能力為400pf。i2c 總線可構成多主和主從系統(tǒng)。在多主系統(tǒng)結構中,系統(tǒng)通過硬件或軟件仲裁獲得總線控制使用權。應用系統(tǒng)中i2c 總線多采用主動結構,即總線上只有一個主控節(jié)點,總線上的其他設備都作為從設備。i2c 總線上的
10、設備尋址由器件地質界現(xiàn)決定,并且通過訪問地址最低位來控制讀/寫方向。目前,通用存儲器芯片多位 eeprom,其常用的協(xié)議主要有兩線串行連接協(xié)議(i2c)和三線串行連接協(xié)議。帶i2c總線接口的eeprom 有許多型號,其中at24cxxx 系列使用十分普遍,產品包括at2401/02/04/08/等,其容量(字節(jié)數(shù)頁)分別為1288/2568/5128/10248/2048,適用于25v 的低電壓操作,具有低功耗和高可靠性等優(yōu)點。at24 系列存儲器芯片采用coms 工藝制造,內置有高壓泵,可在單電壓供電條件下工作,其標準封裝為8 引腳dip 封裝形式,如圖1-1 所示。圖1-1 at24 標準
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、當scl 為高電平時,sda 由高轉低,即為開始。 停止條件(stop_c),當scl 為高電平時,sda 由低轉為高,即為停止。 確認信號(ack),在接受方應答下,每收到一個字節(jié)后便將sda 電平拉低,表示確認。 數(shù)據(jù)傳送(read/write),i2c 總線啟動或應答后,在scl 高電平期間,數(shù)據(jù)串行傳送;在scl 低電平期間,數(shù)據(jù)準備,并允許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 處理器為用戶進行應用設計提供了支持多主總線的i2c 接口,處理器提供符合i2c 協(xié)議的設備連接的雙向數(shù)據(jù)線iicsda 和iicscl。在iicscl 高電平期間,iicsda 的下降沿啟動,上升沿停止。s3c44b0x 處理器可以支持主發(fā)送,主接受,從發(fā)送,從接受4 種工作模式。在主發(fā)送模式下,處理器通過i2c 接口與外部串行器件進行數(shù)據(jù)傳送,需要用到如下寄存器。(1) i2c 總線控制寄存器iicconack enable 0: 禁止產生ack 信號;1:允許產生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:清除中斷標志并重新啟動i2c 總線寫操作;讀1:中斷標志置位。tx clock value i2c發(fā)送加載初始數(shù)據(jù),決定發(fā)送頻率。(2) i2c 總線狀態(tài)寄存器iicstatmode_s 00: 從接受; 10:主接受;01:從發(fā)送;11:主發(fā)送。cond_s 寫0:產生stop_c 信號;讀1:i2c 總線空閑。soe 0:禁止tx/rx 信號傳輸;1:允許tx/rx 信號傳輸。asf 0:i2c 總線仲裁成功;1:仲裁不成功,i2c 總線不能工作。ass 作為從設備時,為0:檢測
15、到start_c 或stop_c 信號;為1:接受地址。azs 作為從設備時,為0:收到start_c 或stop_c 信號;為1:i2c 總線地址為0。lrb 接收到的最低數(shù)據(jù)位。為0:接受到ack 信號;為1:未接受到ack 信號。(3) i2c 總線地址寄存器iicaddslvaddr 位【7:1】是從設備的設備地址和頁面地址;位0 是讀/寫控制(0 為寫;1 為讀)。當soe=0 時,可對slvaddr 進行讀|寫。(4) i2c 總線發(fā)送/接受移位寄存器iicdsshitdata 位【7:1】存放i2c 總線要移位傳輸或接受的數(shù)據(jù)。當soe=1 時,可對shitdata 進行讀/寫。
16、i2c 控制器內部控制邏輯框圖如圖1-7 所示圖1-7 i2c 控制器邏輯框圖b. 使用s3c44b0x i2c 總線讀/寫方法單字節(jié)寫操作(r/w=0) addr:設備,頁面及訪問地址同一頁面的多字節(jié)寫操作(r/w) opaddr:設備及頁面地址(高7 位)單字節(jié)讀串行存儲器件(r/w=1) addr:設備,頁面及訪問地址同一頁面的多字節(jié)讀操作(r/w=1) addr:設備,頁面及訪問地址注: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);調用寫數(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); 調用讀函數(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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025西安鐵路職業(yè)技術學院輔導員考試試題及答案
- 2025遼寧石化職業(yè)技術學院輔導員考試試題及答案
- 2025貴州黔南經濟學院輔導員考試試題及答案
- T/ZHCA 005-2019化妝品影響皮膚彈性測試方法
- 過敏性疾病的一級預防
- 親子活動設計方案
- 2025年廣東省深圳市坪山區(qū)中考歷史二模試卷
- T/ZBH 026-2023晶硅光伏組件用材料第3部分:雙玻光伏組件用壓延玻璃彎曲強度、抗沖擊性及表面應力技術規(guī)范
- 健康體檢課件
- 新疆昆侖藍鉆鋰業(yè)有限責任公司招聘筆試題庫2025
- 《中小學生端午節(jié)安全教育主題班會》課件
- 高級網絡技術試題及答案
- 2025年春季《中華民族共同體概論》第二次平時作業(yè)-國開(XJ)-參考資料
- 第3章 一元一次不等式(組)單元測試(原卷)2024-2025學年湘教版七年級數(shù)學下冊
- 股權終止合作協(xié)議書
- 河南省鄭州市2025年中考二模語文試題(含答案)
- 寧波市慈溪市2025年小升初數(shù)學自主招生備考卷含解析
- 2025園林景觀設計合同范本
- 《海南三亞西島景區(qū)營銷現(xiàn)狀問卷調查及營銷問題和優(yōu)化對策》12000字
- 江蘇省蘇、錫、常、鎮(zhèn)2025屆高考仿真模擬生物試卷含解析
- 2024年河南鄭州航空港投資集團招聘真題
評論
0/150
提交評論