|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
ARM2214的I2C接at24c1024問(wèn)題???? |
| 作者:andreas168 欄目:ARM技術(shù) |
我以前購(gòu)買(mǎi)的是EASYARM2104的開(kāi)發(fā)板,上面有I2C接24C02的代碼,但我現(xiàn)在的項(xiàng)目中要使用AT24C1024,必須在讀寫(xiě)時(shí)寫(xiě)入16位的數(shù)據(jù)地址,我對(duì) void __irq IRQ_I2C(void) 這段代碼理解不夠,所以不知道如何修改,請(qǐng)各位大俠幫忙。謝謝。 QQ:359473028。 /**************************************************************************** * File:I2CINT.C * 功能:使用硬件I2C對(duì)E2PROM進(jìn)行操作,利用中斷方式操作。 * 說(shuō)明:將跳線器JP8_LED1、JP12短接。 ****************************************************************************/ #include "config.h" #define CSI24WC02 0xA0 /* 定義器件地址 */ #define LED1CON 0x00000400 /* P0.10引腳控制LED1,低電平點(diǎn)亮 */ /* 以下為I2C操作時(shí)所需要的變量,在調(diào)用I2C子程序前要設(shè)置好這些變量 */ volatile uint8 I2C_sla; // 從機(jī)地址 volatile uint8 I2C_suba; // 子地址 volatile uint8 *I2C_buf; // 數(shù)據(jù)緩沖區(qū)指針 (讀操作時(shí)會(huì)被更改) volatile uint8 I2C_num; // 操作數(shù)據(jù)個(gè)數(shù) (會(huì)被更改) volatile uint8 I2C_end; // 操作結(jié)束標(biāo)志,為1時(shí)表示操作結(jié)束,為0xFF時(shí)表示操作失敗 (會(huì)被設(shè)置) volatile uint8 I2C_suba_en; // 子地址使能控制,讀操作時(shí)請(qǐng)?jiān)O(shè)置為1,寫(xiě)操作時(shí)請(qǐng)?jiān)O(shè)置為2 (會(huì)被更改) /**************************************************************************** * 名稱(chēng):IRQ_I2C() * 功能:I2C中斷,通過(guò)判斷I2C狀態(tài)字進(jìn)行相應(yīng)的操作。 * 入口參數(shù):無(wú) * 出口參數(shù):無(wú) ****************************************************************************/ void __irq IRQ_I2C(void) { uint8 sta; sta = I2STAT; // 讀出I2C狀態(tài)字 SWITCH(sta) { case 0x08: // 己發(fā)送起始條件 if(1==I2C_suba_en) I2DAT = I2C_sla&0xFE; // 指定子地址讀時(shí),先寫(xiě)入地址 else I2DAT = I2C_sla; // 否則直接發(fā)送從機(jī)地址 I2CONCLR = 0x28; // SI=0 break; case 0x10: I2DAT = I2C_sla; // 重啟動(dòng)總線后,發(fā)送從地址 I2CONCLR = 0x28; // SI=0 break; case 0x18: // 已發(fā)送SLA+W,并已接收應(yīng)答 if(0==I2C_suba_en) // 無(wú)子地址,則直接發(fā)送數(shù)據(jù) { if(I2C_num>0) { I2DAT = *I2C_buf++; I2CONCLR = 0x28; I2C_num--; } else { I2CONSET = 0x10; // 無(wú)數(shù)據(jù)發(fā)送,結(jié)束總線 I2CONCLR = 0x28; I2C_end = 1; // 設(shè)置總線操作結(jié)束標(biāo)志 } break; } if(1==I2C_suba_en) // 發(fā)送子地址 { I2DAT = I2C_suba; I2CONCLR = 0x28; } if(2==I2C_suba_en) { I2DAT = I2C_suba; I2CONCLR = 0x28; I2C_suba_en = 0; // 子地址己處理 } break; case 0x28: // 已發(fā)送I2C數(shù)據(jù),并接收到應(yīng)答 if(0==I2C_suba_en) // 無(wú)子地址,則直接發(fā)送數(shù)據(jù) { if(I2C_num>0) { I2DAT = *I2C_buf++; I2CONCLR = 0x28; I2C_num--; } else { I2CONSET = 0x10; // 無(wú)數(shù)據(jù)發(fā)送,結(jié)束總線 |
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |