完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
先写寄存器地址,再读数据,要加适当延时。
uint8_t iic_single_read(uint8_t reg_addr) { uint8_t iic_rev_data; delay(10); // 这里要加适当的延时 iic_send_end_flag = 0; R_RIIC0_Master_Send(MPU6050_SLAVE_ADDR,®_addr,1); while(iic_send_end_flag == 0) nop(); delay(1); // 这里要加适当的延时 iic_send_end_flag = 0; iic_ret_status = R_RIIC0_Master_Receive(MPU6050_SLAVE_ADDR,&iic_rev_data,1); while(iic_rev_end_flag==0) nop(); iic_rev_end_flag = 0; return iic_rev_data; } 标志位在r_cg_riic_user.c的下面函数设定。 static void r_riic0_transmitend_interrupt(void) { if (_06_IIC_MASTER_SENDS_END == g_riic0_state) { ........ iic_send_end_flag = 1; } } static void r_riic0_receive_interrupt(void) { .... else if (_0A_IIC_MASTER_RECEIVES_STOPPING == g_riic0_state) { ...... iic_rev_end_flag = 1; } } |
|
|
|
请问函数里的变量 iic_ret_status 是在哪里定义的? |
|
|
|
按照你的方法,标志位也设置好了,结果在while(iic_rev_end_flag==0) nop();这个循环里跳不出来,请问是什么原因? |
|
|
|
60user151 发表于 2018-7-23 05:55 你可以检查r_riic0_receive_interrupt是否进去了。注意器件地址,以及器件的寄存器地址是否有错误。 器件地址,在r_riic0_transmit_interrupt()函数里面, RIIC0.ICDRT = (uint8_t)(g_riic0_slave_address << 1U); 这里地址左移了一位,因此你定义的器件地址要把实际的地址右移一位。 变量 iic_ret_status 可以在任意地方定义,函数内外都可以。 |
|
|
|
szzjfyp 发表于 2018-7-23 06:03 标志位放在生成的代码区而不是用户区会被删除吧 |
|
|
|
只有小组成员才能发言,加入小组>>
请问一个迭代法图形二值化的程序代码把宽改成240之后整个屏幕不显示是什么原因?
2649 浏览 0 评论
2637 浏览 1 评论
1876 浏览 1 评论
2028 浏览 2 评论
2594 浏览 2 评论
683浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 06:19 , Processed in 0.646311 second(s), Total 83, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号