关于I2C从机通讯的问题

2019-03-23 19:34发布

各位大神,求助啊,我没玩过I2C,这是我东拼西凑些的I2C从机代码,主要是完成和主机的通讯用的。但是先在问题出来了,代码运行时,主机向0xA0发送一个数据,
从机能进中断( I2C2_EV_IRQHandler)函数,在switch (I2C_Event)这一句时,I2C各个寄存器函数如下:
图片看不到.............算了,手打

I2C2_CR1            0x00000401
I2C2_CR2            0x00000624   
I2C2_OAR1          0x000040A0
I2C2_OAR2          0
I2C2_DR              0
I2C2_SR1            0x00000110
I2C2_SR2            0
I2C2_CCR           0x0000801E
I2C2_TRISE         0x0000000B

[ 本帖最后由 lifeissweet66 于 2012-9-13 14:47 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
lifeissweet66
1楼-- · 2019-03-23 23:34
 精彩回答 2  元偷偷看……
lifeissweet66
2楼-- · 2019-03-24 00:13
谢谢,我还是手工吧,下面的是mian.c文件

[ 本帖最后由 lifeissweet66 于 2012-9-13 15:01 编辑 ]
maylove
3楼-- · 2019-03-24 01:58
图片不能复制,先下载再上传试试!
lifeissweet66
4楼-- · 2019-03-24 04:42
 精彩回答 2  元偷偷看……
lifeissweet66
5楼-- · 2019-03-24 06:01
关于主函数我说明下,在 I2C2_EV_IRQHandler中最前面几个case是我测试最后进入哪儿用的,经测试,每次都是死在case 0x20110上,然后我返回去进入I2C_GetLastEvent(I2C2)中计算了下:
            他有三个标志位:flag1,flag2,lastevent
            flag1 = I2C->SR1
            flag2 = I2C ->SR2
            flag2 = flag2 << 16
            lastevent = (flag1 | flag2 ) & 0x1F
            return lastevent;
把最上面的寄存器值代入我计算了下lastevent = 0x20110
lifeissweet66
6楼-- · 2019-03-24 11:17
B0F6ED4@0@(HU9OJTHQ_0P2.jpg 这是我的文件目录,关于I2C的都写在main.c中

一周热门 更多>