سلام خدمت همه ی دوستان و اساتید گرامی
من میخوام واحد I2C رو راه اندازی کنم با استفاده از Cmsis
از بر جدید هم استفاده میکنم(EV-LPC1788 )
روی خود برد یه تراشه EEPROM هست که با I2C راه اندازی میشه اسمش هم هست AT24C128
یه کد براش زدم که هر کاری میکنم جواب نمیده.
من کد رو میذارم اگه میشه دوستان گرامی کمک کنن.
یه سوال دیگه هم داشتم واون این که برای خواندن از آدرس داخلی باید چیکار کنم؟
توی Cmsis من چیزی ندیدم.کدی میخواد اضافه بشه؟
پیشاپیش ممنون از کمکتون
کد:
#include "lpc177x_8x.h"
#include "lpc177x_8x_i2c.h"
#include "lpc177x_8x_pinsel.h"
#include "GLCD.h"
#include "delay.h"
#define I2C_Num 0
#define Slave_Address 0x50 >> 1
I2C_M_SETUP_Type txsetup;
I2C_M_SETUP_Type rxsetup;
uint8_t EEPROM_wrdat[2] = {0 , 1};
uint8_t EEPROM_rddat[2];
void I2Cx_Init(void);
void TFTLCD_Init(void);
int I2C_Write(void);
int I2C_Read (void);
int main(){
TFTLCD_Init();
I2Cx_Init();
I2C_Write();
if(I2C_Write() == (-1)){
GUI_Text( ( GLCD_X_SIZE - 120 ) / 2, GLCD_Y_SIZE / 2 - 8, " Error While Write ", White, Red);
}
else {
GUI_Text( ( GLCD_X_SIZE - 120 ) / 2, GLCD_Y_SIZE / 2 - 8, "Write Success", White, Green);
}
I2C_Read ();
if(I2C_Read() == (-1)){
GUI_Text( ( GLCD_X_SIZE - 120 ) / 2, GLCD_Y_SIZE / 2 + 8, " Error While Read ", White, Red);
}
else{
GUI_Text( ( GLCD_X_SIZE - 120 ) / 2, GLCD_Y_SIZE / 2 + 8, " Read Success", White, Green);
}
while(1){
}
}
void TFTLCD_Init(void){
SDRAM_32M_16BIT_Init();
GLCD_Init();
GLCD_Clear(White);
delay_ms(200);
GUI_Text( ( GLCD_X_SIZE - 120 ) / 2, GLCD_Y_SIZE / 2 - 8, " I2C Example ", White, Blue);
GLCD_Clear(White);
}
void I2Cx_Init(void){
PINSEL_ConfigPin( 0 , 27 , 1); //SDA0
PINSEL_ConfigPin( 0 , 28 , 1); //SCL0
I2C_Init( (en_I2C_unitId)I2C_Num , 100000); //Clock = 100 khz
I2C_Cmd ( (en_I2C_unitId)I2C_Num , I2C_MASTER_MODE , ENABLE ); //I2C->Enable
}
int I2C_Write(void){
txsetup.sl_addr7bit = Slave_Address;
txsetup.tx_data = EEPROM_wrdat;
txsetup.tx_length = sizeof(EEPROM_wrdat);
txsetup.rx_data = NULL;
txsetup.rx_length = 0;
txsetup.retransmissions_max = 3;
if (I2C_MasterTransferData((en_I2C_unitId)I2C_Num, &txsetup, I2C_TRANSFER_POLLING) == SUCCESS){
return (0);
} else {
return (-1);
}
}
int I2C_Read(){
rxsetup.sl_addr7bit = Slave_Address;
rxsetup.tx_data = EEPROM_wrdat; // Get address to read at writing address
rxsetup.tx_length = 2;
rxsetup.rx_data = EEPROM_rddat;
rxsetup.rx_length = sizeof(EEPROM_rddat);
rxsetup.retransmissions_max = 3;
if (I2C_MasterTransferData((en_I2C_unitId)I2C_Num, &rxsetup, I2C_TRANSFER_POLLING) == SUCCESS){
return (0);
} else {
return (-1);
}
}