实例,我们这儿使用是I2C读写eeprom
/********************************************************************************\\ \\* The routine illustrates the using method of TMS320C6713 IIC. In this example,*\\ \\*Writting and reading operation on EEPROM AT24C256 are related. *\\
\\********************************************************************************/ #include
#include
#include “DEC6713.h” #include “IIC.h”
/********************************************************************************/ /* Set I2C registers. */
I2C_Config MyI2CCfgT = { I2C_FMKS(I2COAR,A,OF(0×00)), //Not used if master.
I2C_FMKS(I2CIMR,ICXRDY,MSK) | I2C_FMKS(I2CIMR,ICRRDY,MSK) | I2C_FMKS(I2CIMR,ARDY,MSK) |
I2C_FMKS(I2CIMR,NACK,MSK) | I2C_FMKS(I2CIMR,AL,MSK),
// Master clock frequency is 200kHz(SYSCLK2 is 150MHz). I2C_FMKS(I2CCLKL,ICCL,OF(14)), I2C_FMKS(I2CCLKH,ICCH,OF(14)),
I2C_FMKS(I2CCNT,ICDC,OF(6)),
I2C_FMKS(I2CSAR,A,OF(80)),
I2C_FMKS(I2CMDR,FREE,RFREE) | I2C_FMKS(I2CMDR,STT,START) | I2C_FMKS(I2CMDR,STP,STOP) | I2C_FMKS(I2CMDR,MST,MASTER) | I2C_FMKS(I2CMDR,TRX,XMT) | I2C_FMKS(I2CMDR,XA,7BIT) | I2C_FMKS(I2CMDR,RM,NONE) | I2C_FMKS(I2CMDR,DLB,NONE) |
I2C_FMKS(I2CMDR,IRS,NRST) |
I2C_FMKS(I2CMDR,STB,NONE), //???
I2C_FMKS(I2CPSC,IPSC,OF(15-1)) // 10MHz };
I2C_Config MyI2CCfgR = { I2C_FMKS(I2COAR,A,OF(0×00)),
I2C_FMKS(I2CIMR,ICXRDY,MSK) | I2C_FMKS(I2CIMR,ICRRDY,MSK) |
I2C_FMKS(I2CIMR,ARDY,MSK) | I2C_FMKS(I2CIMR,NACK,MSK) | I2C_FMKS(I2CIMR,AL,MSK),
// Master clock frequency is 200kHz(SYSCLK2 is 150MHz). I2C_FMKS(I2CCLKL,ICCL,OF(14)), I2C_FMKS(I2CCLKH,ICCH,OF(14)),
I2C_FMKS(I2CCNT,ICDC,OF(4)),
I2C_FMKS(I2CSAR,A,OF(80)),
I2C_FMKS(I2CMDR,FREE,RFREE) | I2C_FMKS(I2CMDR,STT,START) | I2C_FMKS(I2CMDR,STP,STOP) | I2C_FMKS(I2CMDR,MST,MASTER) | I2C_FMKS(I2CMDR,TRX,RCV) | I2C_FMKS(I2CMDR,XA,7BIT) | I2C_FMKS(I2CMDR,RM,NONE) | I2C_FMKS(I2CMDR,DLB,NONE) |
I2C_FMKS(I2CMDR,IRS,NRST) |
I2C_FMKS(I2CMDR,STB,NONE), //???
I2C_FMKS(I2CPSC,IPSC,OF(15-1)) // 10MHz };
/********************************************************************************/ I2C_Handle hI2C;
Uint8 DataByte[4] = {0×21,0×02,0×05,0×20};
Uint8 DataByteE[4] = {0xFF,0xFF,0xFF,0xFF}; Uint8 ReceiveData[4] = {0,0,0,0}; Uint8 Length = 4;
extern far void vectors(); main() {
Uint8 i;
/* Initialize CLS, must when using csl. */ CSL_init();
/* Initialize DEC6713 board. */
DEC6713_init();
IRQ_setVecs(vectors); IRQ_nmiEnable(); IRQ_globalEnable();
//start added on 2005.2.21 /* Open I2C0. */
hI2C = I2C_open(I2C_DEV0,I2C_OPEN_RESET);
waitForBusFree(hI2C);
I2C_config(hI2C,&MyI2CCfgT);
/* Write word address to AT24C256. */ I2C_writeByte(hI2C,0×00); I2C_start(hI2C);
while(!I2C_xrdy(hI2C)); I2C_writeByte(hI2C,0×00);
/* Writting data to AT24C256. */ for(i=0;i while(!I2C_xrdy(hI2C)); I2C_writeByte(hI2C,DataByteE[i]); } I2C_sendStop(hI2C); waitForBusFree(hI2C); printf(“\\nWritting data is over.”); MyI2CCfgT.i2ccnt = 2; I2C_config(hI2C,&MyI2CCfgT); /* Perform dummy write operation. */ I2C_writeByte(hI2C,0×00); I2C_start(hI2C); while(!I2C_xrdy(hI2C)); I2C_writeByte(hI2C,0×00); I2C_sendStop(hI2C); waitForBusFree(hI2C); DEC6713_wait(200); /* Reading data from AT24C256. */ I2C_config(hI2C,&MyI2CCfgR); DEC6713_wait(200); I2C_start(hI2C); for(i=0;i while(!I2C_rrdy(hI2C)); ReceiveData[i] =I2C_readByte(hI2C); } I2C_sendStop(hI2C); printf(“\\nReading data is over.”); /* Comparing data. */ for(i=0;i if(ReceiveData[i] != DataByteE[i]) { printf(“\\nErasing is failure.”); exit(0); } } printf(“\\nErasing is success.”); I2C_FSETH(hI2C,I2CSTR,BB,1); I2C_reset(hI2C); I2C_close(hI2C); DEC6713_wait(0xf000); //end added on 2005.2.21 /* Open I2C0. */ hI2C = I2C_open(I2C_DEV0,I2C_OPEN_RESET); waitForBusFree(hI2C); MyI2CCfgT.i2ccnt = 6; //added on 2005.02.21 I2C_config(hI2C,&MyI2CCfgT); /* Write word address to AT24C256. */ I2C_writeByte(hI2C,0×00); I2C_start(hI2C); while(!I2C_xrdy(hI2C)); I2C_writeByte(hI2C,0×00); /* Writting data to AT24C256. */ for(i=0;i while(!I2C_xrdy(hI2C)); I2C_writeByte(hI2C,DataByte[i]); } I2C_sendStop(hI2C); waitForBusFree(hI2C); printf(“\\nWritting data is over.”); MyI2CCfgT.i2ccnt = 2; I2C_config(hI2C,&MyI2CCfgT); /* Perform dummy write operation. */ I2C_writeByte(hI2C,0×00); I2C_start(hI2C); while(!I2C_xrdy(hI2C)); I2C_writeByte(hI2C,0×00); I2C_sendStop(hI2C); waitForBusFree(hI2C); DEC6713_wait(200); /* Reading data from AT24C256. */ I2C_config(hI2C,&MyI2CCfgR); DEC6713_wait(200); I2C_start(hI2C);