Hi jeremyzhou,
First step: I have tested send the data directly on the i²c bus.
sendI2CMaster();
readI2CMaster();
void sendI2CMaster(void);
void readI2CMaster(void);
void sendI2CMaster(){
uint8_t SendData[] = {0xD1};
I2C_PARAM_T param;
I2C_RESULT_T result;
ErrorCode_t error_code;
param.num_bytes_send = sizeof(SendData);
param.buffer_ptr_send = &SendData[0];
param.num_bytes_rec = 0;
param.stop_flag = 1;
LPC_I2CD_API->i2c_set_timeout(i2cHandleMaster, 500000);
error_code = LPC_I2CD_API->i2c_master_transmit_poll(i2cHandleMaster, ¶m, &result);
}
void readI2CMaster()
{
uint8_t recvData[5];
I2C_PARAM_T param;
I2C_RESULT_T result;
ErrorCode_t error_code;
param.num_bytes_send = 0;
param.num_bytes_rec = sizeof(recvData);
param.buffer_ptr_rec = &recvData[0];
param.stop_flag = 1;
LPC_I2CD_API->i2c_set_timeout(i2cHandleMaster, 500000);
error_code = LPC_I2CD_API->i2c_master_receive_poll(i2cHandleMaster, ¶m, &result);
}
Second step: I created an function with inputs to send data. This code not works.
uint8_t dado[]={0xd1};
sendI2CMaster(dado,sizeof(dado));
readI2CMaster();
void sendI2CMaster(uint8_t *data, uint32_t size);
void readI2CMaster(void);
void sendI2CMaster(uint8_t *data, uint32_t size);{
uint8_t *p = data;
I2C_PARAM_T param;
I2C_RESULT_T result;
ErrorCode_t error_code;
param.num_bytes_send = size;
param.buffer_ptr_send = p;
param.num_bytes_rec = 0;
param.stop_flag = 1;
LPC_I2CD_API->i2c_set_timeout(i2cHandleMaster, 500000);
error_code = LPC_I2CD_API->i2c_master_transmit_poll(i2cHandleMaster, ¶m, &result);
}
void readI2CMaster()
{
uint8_t recvData[5];
I2C_PARAM_T param;
I2C_RESULT_T result;
ErrorCode_t error_code;
param.num_bytes_send = 0;
param.num_bytes_rec = sizeof(recvData);
param.buffer_ptr_rec = &recvData[0];
param.stop_flag = 1;
LPC_I2CD_API->i2c_set_timeout(i2cHandleMaster, 500000);
error_code = LPC_I2CD_API->i2c_master_receive_poll(i2cHandleMaster, ¶m, &result);
}
Third step: I tried another way in the pointers declaration, which I believe to be more correct, but also did not work.
uint8_t dado[]={0xd1};
sendI2CMaster(dado,sizeof(dado));
readI2CMaster();
void sendI2CMaster(uint8_t *data, uint32_t size);
void readI2CMaster(void);
void sendI2CMaster(uint8_t *data, uint32_t size);{
I2C_PARAM_T param;
I2C_RESULT_T result;
ErrorCode_t error_code;
param.num_bytes_send = size;
param.buffer_ptr_send = data;
param.num_bytes_rec = 0;
param.stop_flag = 1;
LPC_I2CD_API->i2c_set_timeout(i2cHandleMaster, 500000);
error_code = LPC_I2CD_API->i2c_master_transmit_poll(i2cHandleMaster, ¶m, &result);
}
void readI2CMaster()
{
uint8_t recvData[5];
I2C_PARAM_T param;
I2C_RESULT_T result;
ErrorCode_t error_code;
param.num_bytes_send = 0;
param.num_bytes_rec = sizeof(recvData);
param.buffer_ptr_rec = &recvData[0];
param.stop_flag = 1;
LPC_I2CD_API->i2c_set_timeout(i2cHandleMaster, 500000);
error_code = LPC_I2CD_API->i2c_master_receive_poll(i2cHandleMaster, ¶m, &result);
}
Do you have idea because it's occurs?
Regards,
Charles Haab