TI中文支持网
TI专业的中文技术问题搜集分享网站

cc26xx i2c 写没问题,返回Ture,但读取的时候,程序跑飞,why???

i2c配置是按官方文档配置的,将sensorTag里面的bsp_i2c.c只能拿来用了,写是没有问题,就是读取的时候跑飞,但有试过读取成功(大部分是跑飞了),程序没变过,why why why??i2c设备是hmc5983。

hmc5983初始化如下:

int hmc5983Init()
{uint8_t buf[] = {HMC5983_R_CONFIG_A, 0x70, HMC5983_R_CONFIG_B, 0xA0,};uint8_t *p_buf = buf;bspI2cSelect(BSP_I2C_INTERFACE_0, HMC5983_ADDR);for (uint8_t i = 0 ; i < 2; i++){bspI2cWrite(p_buf, 2);p_buf = p_buf + 2;}
}

读取测试代码如下:

while (1){bool flag = FALSE;uint8_t write_buf[] = {HMC5983_R_MODE, 0x01};uint8_t *re_buf;uint8_t addr = 0x00;flag = bspI2cWrite(write_buf, 2);if (!flag)flag = FALSE;delay_ms(6);flag = bspI2cWriteRead(&addr, 1, re_buf, 15);if (!flag)flag = FALSE;delay_ms(67);}

每次就是在 flag = bspI2cWriteRead(&addr, 1, re_buf, 15);跑飞,求大神指点,thanks!!

xyz549040622:

这个 flag = bspI2cWriteRead(&addr, 1, re_buf, 15);的第一个参数应该是addr,不应该是&addr吧,根据经验判断,也不应该是指针类型的。

yuzhang wu:

回复 xyz549040622:

我想你是以为这个地址是设备的地址了,这个是writeData的地址,而且,要是传参错误,直接编译都不会通过。

yuzhang wu:

大神冒个泡呗

HG:

跑飞是什么意思,没有返回值还是什么?程序停下来的时候停在哪里?

你是连着蓝牙跑的还是裸跑的?

yuzhang wu:

回复 HG:

就是进去bspI2cWriteRead函数直接出不来了,暂停的时候是在红色框里,再按单步就直接在d6 d8循环跳,出不来,汇编也看不懂,求教,thanks

yuzhang wu:

回复 HG:

yuzhang wu:

回复 yuzhang wu:

冷冷清清,凄凄惨惨戚戚

xyz549040622:

回复 yuzhang wu:

看你紧接着写然后就是读,会不会没有反应过来呢?加个延时看看,或者循环等待写数据OK再读。

yuzhang wu:

回复 xyz549040622:

本来读写函数就是读写完成了才返回的,所以不存在你说的问题,我测试过了循环一直写是没问题的,就是一读就莫名其妙的不行。

yuzhang wu:

回复 HG:

纠结了这么久还是找不出原因,请问我可以怀疑是协议栈的问题么,难道我要试试裸机跑跑看?但是实际应用还是要协议栈啊,就算裸机能行也没什么意义,醉了。协议栈用的是2.1的

赞(0)
未经允许不得转载:TI中文支持网 » cc26xx i2c 写没问题,返回Ture,但读取的时候,程序跑飞,why???
分享到: 更多 (0)