大家好,
我现在使用I2C的时候碰到了些问题,就是我发出的I2C波形总是一样的,并不是我想发出的数,我用的是I2C_DRV_MasterSendDataBlocking(chan, &device,NULL, 0,pdata, 1, 200);这个函数,但是不管我怎么改变pdata的值,I2C的波形发出来的都是只有启动和截止位,中间全是零
电路板没有问题,我用了frdmk64f的实例程序“i2c_blocking_master_example_frdmk64f” 也是这样的,发送的数值pdata怎么改,发出的波形都是如下图
我的代码是基于KSDK1.2,运行在MQX4.2上的,编译环境是KDS3.0
编码如下,请帮我看看哪里有问题?
void main_task( task_param_t init_data ){
_task_id rx_tid; _task_id tx_tid; TASK_PARAMS task_p = {0}; uint8_t result = 0; uint8_t temp;
hardware_init(); OSA_Init(); button_init();
i2c_init(0);
uint8_t i; uint8_t length = 10; uint8_t data[length]; for(i = 0;i<length;i++){ data = i; }
while(1){ i2c_sendbuf(0,data,length); _time_delay(5); };
}
_WEAK_FUNCTION(void hardware_init(void)) { uint8_t i;
/* enable clock for PORTs */ for (i = 0; i < PORT_INSTANCE_COUNT; i++) { CLOCK_SYS_EnablePortClock(i); }
/* Init board clock */ BOARD_ClockInit(); /* In case IO sub is turned off, dbg console should be used for printing */ #if !BSPCFG_ENABLE_IO_SUBSYSTEM dbg_uart_init(); //wangyufei #endif }
void i2c_init(uint8_t chan){
uint32_t i = 0; // i2c master state i2c_master_state_t master; // i2c device configuration
configure_i2c_pins(0); configure_i2c_pins(1); // Initialize i2c master I2C_DRV_MasterInit(0, &master); I2C_DRV_MasterInit(1, &master); }
int i2c_sendbuf(uint8_t chan,uint8_t *data,uint8_t length) { uint32_t i = 0; i2c_status_t status1; uint8_t pdata[10]; for(i = 0; i < DATA_LENGTH; i++) { txBuff = i + 1; }
uint8_t result;
for(i = 0;i<10;i++) pdata = i+3;
pdata[0] = 0x80; pdata[1] = 0xF3;
result = I2C_DRV_MasterSendDataBlocking(chan, &device, pdata, 1,pdata, 2, 200);
// Delay to wait slave received data OSA_TimeDelay(10); // _time_delay(5);
pdata[0] = 0x81; result = I2C_DRV_MasterSendDataBlocking(chan, &device, pdata, 1,pdata, 1, 200);
// Clear rxBuff for(i = 0; i < count; i++) { rxBuff = 0; }
// Master receives count byte data from slave result = I2C_DRV_MasterReceiveDataBlocking(chan, &device, NULL, 0, rxBuff, 1, 200);
OSA_TimeDelay(5); }
|