EmbeddedRelated.com
Forums
The 2024 Embedded Online Conference

MSP430F5438 probleam

Started by Mr BeeHoon May 12, 2009
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





Beginning Microcontrollers with the MSP430

There are code examples at:
http://www.ti.com/lit/zip/slac166
http://www.ti.com/lit/zip/slac165

--- 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
>
>
>
>
>
>
>

the sample codeonly mcu tomcu. i need mcu - eeprom, like sending address,random read & write, page read & write

--- On Wed, 5/13/09, old_cow_yellow wrote:
From: old_cow_yellow
Subject: [msp430] Re: MSP430F5438 probleam
To: m...
Date: Wednesday, May 13, 2009, 2:37 AM

There are code examples at:
http://www.ti. com/lit/zip/ slac166
http://www.ti. com/lit/zip/ slac165

--- In msp430@yahoogroups. com, 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
>
>
>
>
>
>
>





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...

http://lakeweb.net/MSP430/

Best, Dan.


The 2024 Embedded Online Conference