Mr BeeHoon wrote: > Hi,
> I am using MSP430F5438 to communicate 24LC512 microchip eeprom. I am unable to
do it. I used i/o port communication. Can I have a code for use I2C module to
communicate EEPROM or good i/o port code.
>
I've updated my page. Go down to the May 14 entry. This should get you
going...
--- In m..., Mr BeeHoon wrote: >
> Hi,
> I am using MSP430F5438 to communicate 24LC512 microchip eeprom. I am unable to
do it. I used i/o port communication. Can I have a code for use I2C module to
communicate EEPROM or good i/o port code.
>
> Here is my codefor your reference,
>
> void SetLowSDA(){
> P10DIR |= SDA;
> I2CWAIT
> }
> void SetHighSDA(){
> P10DIR &= ~SDA;
> I2CWAIT
> }
> void SetLowSCL(){
> P10OUT &= ~SCL;
> I2CWAIT
> }
> void SetHighSCL(){
> P10OUT |= SCL;
> I2CWAIT
> }
> /*************************/
> /* To initialize the bus */
> /*************************/
> void eepromi2cInit(){
> P10SEL &= ~SDA;
> P10SEL &= ~SCL;
> P10OUT &= ~SCL;
> P10OUT &= ~SDA;
> P10DIR |= SCL;
> P10DIR &= ~SDA;
> SetHighSCL();
> SetLowSDA();
> SetHighSDA();
> }
> /*************************/
> /* Start Data Transfer */
> /*************************/
> void eepromi2cStart(){
> SetHighSCL();
> SetHighSDA();
> SetHighSCL();
> SetLowSDA();
> SetLowSCL();
> SetHighSDA();
> }
> /*************************/
> /* Stop Transfer */
> /*************************/
> void eepromi2cStop(){
> SetLowSCL();
> SetLowSDA();
> SetHighSCL();
> SetLowSDA();
> SetHighSCL();
> SetHighSDA();
> }
> /*************************/
> /* Write Transfer */
> /*************************/
> int eepromi2cWrite(char a){
> int i;
> int return_ack;
> for (i=0; i<8; i++){
> SetLowSCL();
> if (a & 0x80)
> SetHighSDA();
> else
> SetLowSDA();
> SetHighSCL();
> a <<= 1;
> }
> SetLowSCL();
> /* ack Read */
> SetHighSDA();
> SetHighSCL();
> if (P10IN & SDA)
> return_ack = NO_I2C_ACK;
> else
> return_ack = OK_I2C_ACK;
> SetLowSCL();
> return(return_ack);
> }
> int eepromi2cWriteP(char* a){
> int i;
> int return_ack;
> char b;
> b = *a;
> for (i=0; i<8; i++){
> SetLowSCL();
> if (b & 0x80)
> SetHighSDA();
> else
> SetLowSDA();
> SetHighSCL();
> b <<= 1;
> }
> SetLowSCL();
> /* ack Read */
> SetHighSDA();
> SetHighSCL();
> if (P10IN & SDA)
> return_ack = NO_I2C_ACK;
> else
> return_ack = OK_I2C_ACK;
> SetLowSCL();
> return(return_ack);
> }
> /*************************/
> /* Read Transfer */
> /*************************/
> char eepromi2cRead(int ack){
> int i;
> char caracter = 0x00;
> SetLowSCL();
> SetHighSDA();
> for (i=0; i<8; i++){
> caracter = caracter << 1;
> SetHighSCL();
> if (P10IN & SDA)
> caracter = caracter + 1;
> SetLowSCL();
> }
> if (ack){
> SetLowSDA();
> }
> SetHighSCL();
> SetLowSCL();
> return (caracter);
> }
>
> void wait(unsigned int i){ // delay function
> unsigned int j;
> for(j = 0; j < i; j++)
> _NOP();
>
> }
>
> regards
> Maya
>
>
>
>
>
>
>
Reply by Mr BeeHoon●May 12, 20092009-05-12
Hi,
I am using MSP430F5438 to communicate 24LC512 microchip eeprom. I am unable to
do it. I used i/o port communication. Can I have a code for use I2C module to
communicate EEPROM or good i/o port code.
Here is my codefor your reference,
void SetLowSDA(){
P10DIR |= SDA;
I2CWAIT
}
void SetHighSDA(){
P10DIR &= ~SDA;
I2CWAIT
}
void SetLowSCL(){
P10OUT &= ~SCL;
I2CWAIT
}
void SetHighSCL(){
P10OUT |= SCL;
I2CWAIT
}
/*************************/
/* To initialize the bus */
/*************************/
void eepromi2cInit(){
P10SEL &= ~SDA;
P10SEL &= ~SCL;
P10OUT &= ~SCL;
P10OUT &= ~SDA;
P10DIR |= SCL;
P10DIR &= ~SDA;
SetHighSCL();
SetLowSDA();
SetHighSDA();
}
/*************************/
/* Start Data Transfer */
/*************************/
void eepromi2cStart(){
SetHighSCL();
SetHighSDA();
SetHighSCL();
SetLowSDA();
SetLowSCL();
SetHighSDA();
}
/*************************/
/* Stop Transfer */
/*************************/
void eepromi2cStop(){
SetLowSCL();
SetLowSDA();
SetHighSCL();
SetLowSDA();
SetHighSCL();
SetHighSDA();
}
/*************************/
/* Write Transfer */
/*************************/
int eepromi2cWrite(char a){
int i;
int return_ack;
for (i=0; i<8; i++){
SetLowSCL();
if (a & 0x80)
SetHighSDA();
else
SetLowSDA();
SetHighSCL();
a <<= 1;
}
SetLowSCL();
/* ack Read */
SetHighSDA();
SetHighSCL();
if (P10IN & SDA)
return_ack = NO_I2C_ACK;
else
return_ack = OK_I2C_ACK;
SetLowSCL();
return(return_ack);
}
int eepromi2cWriteP(char* a){
int i;
int return_ack;
char b;
b = *a;
for (i=0; i<8; i++){
SetLowSCL();
if (b & 0x80)
SetHighSDA();
else
SetLowSDA();
SetHighSCL();
b <<= 1;
}
SetLowSCL();
/* ack Read */
SetHighSDA();
SetHighSCL();
if (P10IN & SDA)
return_ack = NO_I2C_ACK;
else
return_ack = OK_I2C_ACK;
SetLowSCL();
return(return_ack);
}
/*************************/
/* Read Transfer */
/*************************/
char eepromi2cRead(int ack){
int i;
char caracter = 0x00;
SetLowSCL();
SetHighSDA();
for (i=0; i<8; i++){
caracter = caracter << 1;
SetHighSCL();
if (P10IN & SDA)
caracter = caracter + 1;
SetLowSCL();
}
if (ack){
SetLowSDA();
}
SetHighSCL();
SetLowSCL();
return (caracter);
}
void wait(unsigned int i){ // delay function
unsigned int j;
for(j = 0; j < i; j++)
_NOP();