完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
在读的时候不能发送重复发送起始信号,SI位不能清零:
代码如下,起始信号: UNS_8 I2C0_Start()//void { LPC_I2C0->CONCLR = 0x38;//1<<3|1<<4|1<<5 LPC_I2C0->CONSET |= 0x20; while (!(LPC_I2C0->CONSET & 0x08)); LPC_I2C0->CONCLR = 0x20;//1<< 5 return (LPC_I2C0->STAT & 0xF8); } 读取数据函数: UNS_8 I2C0_ReadByte(UNS_8 t_slave_addr, UNS_8 t_operation_addr, UNS_8 *p_read_data, UNS_8 t_data_num) { UNS_8 t_status; UNS_8 t_count; t_status = I2C0_Start(); while(t_status != 0x08); t_status = I2C0_SendByte(t_slave_addr); while(t_status != 0x18); t_status = I2C0_SendByte(t_operation_addr); while(t_status != 0x28); t_status = I2C0_Start(); while(t_status != 0x10); t_status = I2C0_SendByte(t_slave_addr | 0x01); while(t_status != 0x40); for(t_count = 0; t_count < t_data_num; t_count++) { if(t_count) { t_status = I2C0_GetByte(p_read_data,1); while(t_status != 0x50); } else { t_status = I2C0_GetByte(p_read_data,0); while(t_status != 0x58); } p_read_data++; } I2C0_Stop(); /*返回错误号*/ return 1; } |
|
相关推荐
2个回答
|
|
|
|
|
|
这个是发送数据函数:
UNS_8 I2C0_SendByte(UNS_8 t_data) { LPC_I2C0->DAT = t_data; /*加载数据后需清除SI位*/ LPC_I2C0->CONSET = 0x04; LPC_I2C0->CONCLR = 0x08;//1<<3 /*收到应答*/ while(!(LPC_I2C0->CONSET & 0x08)); return (LPC_I2C0->STAT & 0xF8); } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式ElfBoard ELF 1板卡-CAN编程示例之开发板测试
922 浏览 0 评论
该问题是用APP给芯海科技的CST92F25芯片发指令是出现的
3070 浏览 1 评论
872 浏览 0 评论
1733 浏览 1 评论
2934 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 19:35 , Processed in 0.884806 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号