#define BIT0 0x01#define BIT1 0x02#define BIT2 0x04#define BIT3 0x08#define BIT4 0x10#define BIT5 0x20#define BIT6 0x40#define BIT7 0x80#define BIT8 0x100#define BIT9 0x200#define BIT10 0x400#define BIT11 0x800#define BIT12 0x1000#define BIT13 0x2000#define BIT14 0x4000#define BIT15 0x8000#define BIT16 0x10000#define BIT22 0x400000#define BIT24 0x1000000#define BIT25 0x2000000#define BIT26 0x4000000#define BIT27 0x8000000#define BIT30 0x40000000
void Undef_Handler(void) { }void IRQ_Handler(void) { }void SWI_Handler(void) { }void PAbt_Handler(void) { }void DAbt_Handler(void) { }void FIQ_Handler(void) { }
unsigned char szTxData[]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};unsigned char szRxData[]={0x00}; #include<aduc7060.h>int main(void){ unsigned char ucWaitingForXIRQ0; unsigned int I2CMSTATUS ; unsigned char ucRxCount ; unsigned char ucTxCount ; POWKEY1 = 0x1; POWCON0 = 0x78; // 主频 10.24Mhz POWKEY2 = 0xF4; GP1CON = BIT0 + BIT4; // Select UART functionality for P1.0/P1.1 COMCON0 = BIT7; // Enable access to COMDIV registers COMDIV0 = 0x21; // Set baud rate to 9600. COMDIV1 = 0x00; COMCON0 = BIT0 + BIT1 + BIT2;//========================================== GP0CON0 = BIT4 + BIT12; // Select SPI/I2C alternative function for P0.1 & P0.3 GP0KEY1 = 0x7; // Write to GP0KEY1 GP0CON1 = BIT1; // Select I2C functionality for P0.1 & P0.3 GP0KEY2 = 0x13; // Write to GP0KEY2 I2CMCON = BIT0 ; I2CDIV = 0x3e3e; // Select 80kHz clock rate ucTxCount = 0; I2CFSTA = BIT9; // Flush Master Tx FIFO I2CFSTA &= ~BIT9; I2CMTX = 0x00; I2CADR0 = 0xA0; ucWaitingForXIRQ0 = 1; ucRxCount = 0; while (1) { if (ucWaitingForXIRQ0 == 0) // Wait for XIRQ0 to trigger - cleared in XIRQ0 ISR { ucWaitingForXIRQ0 = 1; ucRxCount = 0; I2CMCNT0 = 9; // Read back 6 bytes I2CADR0 = 0xA1;}// + I2C_RD_BIT; // Begin Read sequence from Slave
if(ucWaitingForXIRQ0 == 1) { I2CMSTATUS = 0; I2CMSTATUS = I2CMSTA; if ((I2CMSTATUS & BIT2) == BIT2) // If I2C Master Tx IRQ { if (ucTxCount < 8) // Have max 6 bytes been sent? {I2CMTX = szTxData[ucTxCount++]; // Load Tx buffer } ucWaitingForXIRQ0 =0;} if ((I2CMSTATUS & BIT3) == BIT3) // If I2C Master Rx IRQ {if (ucRxCount < 8) // Have max 6 bytes been received? {szRxData[ucRxCount] = I2CMRX; // Read Rx buffer while(!((COMSTA0&BIT6)==BIT6)){}; COMTX=szRxData[ucRxCount]; ucRxCount++;} ucWaitingForXIRQ0 =1; } } } }
你好,
在ADuC7060的网页上有参考代码可以下载,里面有一个例程是关于I2C_EPROM的。
谢谢。