大学生电子设计竞赛
直播中

蔡明灼

7年用户 186经验值
私信 关注
[问答]

请问当用RX23T的硬件IIC做从机模式,主机向他请求数据时,会触发哪个中断?

请问当用RX23T的硬件IIC做从机模式,主机向他请求数据时,会触发哪个中断?

回帖(9)

李德鹏

2018-7-23 06:35:42
主接收中断函数是  r_riic0_receive_interrupt()
举报

蔡明灼

2018-7-23 06:50:25
引用: szzjfyp 发表于 2018-7-23 06:35
主接收中断函数是  r_riic0_receive_interrupt()

那不是主机向从机发送数据触发的中断吗?我想问的是R_RIIC0_Slave_Send(uint8_t * const tx_buf, uint16_t tx_num)这个发送函数是什么时候把数据发出去的,是检测到主机向其查询数据时就发吗?但是我调用这个函数,无论主机如何查询都收不到返回值啊
举报

曹玥

2018-7-23 07:06:55
引用: ncvttwer 发表于 2018-7-23 06:50
那不是主机向从机发送数据触发的中断吗?我想问的是R_RIIC0_Slave_Send(uint8_t * const tx_buf, uint16_t tx_num)这个发送函数是什么时候把数据发出去的,是检测到主机向其查询数据时就发吗?但是我调用这个函数,无论主机如何查询都收不到返回值啊 ...

如果你把RX23T的IIC做从使用的话,大概有这样几个状态。
1.主给RX发数据,RX就是作为从使用,使用的接收函数是R_RIIC0_Slave_Receive(),其中两个形参一个接收数据的数组,一个是要接收的数据长度,得到的数据是通过static void r_riic0_receive_interrupt(void)这个中断得到的。
2.RX要给主发送数据,首先RX要抢占总线,void R_RIIC0_StartCondition(void)这个就是用来抢占总线的,只有在总线空闲的时候才能抢占得逞,然后MD_STATUS R_RIIC0_Slave_Send(uint8_t * const tx_buf, uint16_t tx_num)发送数据,两个形参,第一个是发送数据的地址,可以是数组头的地址,第二个是要发送的数据长度。调用结束后,程序会自动发送数据,进到static void r_riic0_transmit_interrupt(void)中断中,这个中断会把所有需要发送的数据发送出去,当数据发送完成之后,会产生static void r_riic0_transmitend_interrupt(void)中断,发送完成,调用void R_RIIC0_StopCondition(void)函数释放总线。等待做从的状态。
你的主机没检测到数据是不是因为你的从没有抢占总线?所以无论你怎么调用函数,都是无法发出数据的。
你试试我的流程,有问题来提问,我尽量快速回答。
举报

蔡明灼

2018-7-23 07:17:58
引用: blnocyyp2002 发表于 2018-7-23 07:06
如果你把RX23T的IIC做从使用的话,大概有这样几个状态。
1.主给RX发数据,RX就是作为从使用,使用的接收函数是R_RIIC0_Slave_Receive(),其中两个形参一个接收数据的数组,一个是要接收的数据长度,得到的数据是通过static void r_riic0_receive_interrupt(void)这个中断得到的。
2.RX要给主发送数据,首先RX要抢占总线, ...


目前我的程序是这样写的,但还是发不出去,硬件上两个设备是直接相连的,没接上拉电阻,有关系吗?从机地址设的是0x70,下面的设置对吗?

昨天一直登不上来,刚刚才看到,抱歉。
举报

蔡明灼

2018-7-23 07:29:08
引用: blnocyyp2002 发表于 2018-7-23 07:06
如果你把RX23T的IIC做从使用的话,大概有这样几个状态。
1.主给RX发数据,RX就是作为从使用,使用的接收函数是R_RIIC0_Slave_Receive(),其中两个形参一个接收数据的数组,一个是要接收的数据长度,得到的数据是通过static void r_riic0_receive_interrupt(void)这个中断得到的。
2.RX要给主发送数据,首先RX要抢占总线, ...

还有个问题,按照我对IIC从机的理解,应该是主设备发送地址位后,若从机检测到的地址位与他发送的相同,这时从机就应该把数据发回去,请问抢占主线有什么作用?谢谢!
举报

曹玥

2018-7-23 07:41:16
引用: ncvttwer 发表于 2018-7-23 07:29
还有个问题,按照我对IIC从机的理解,应该是主设备发送地址位后,若从机检测到的地址位与他发送的相同,这时从机就应该把数据发回去,请问抢占主线有什么作用?谢谢!

你先把这两根线都外接上拉电阻。
举报

曹玥

2018-7-23 07:54:32
引用: blnocyyp2002 发表于 2018-7-23 07:41
你先把这两根线都外接上拉电阻。

没有上拉电阻是有影响的。
举报

蔡明灼

2018-7-23 08:01:53
引用: blnocyyp2002 发表于 2018-7-23 07:54
没有上拉电阻是有影响的。

接了2.2k欧的上拉电阻,结果一直进入错误中断中的下面这一个,貌似是超时了:
举报

蔡明灼

2018-7-23 08:21:51
引用: blnocyyp2002 发表于 2018-7-23 07:54
没有上拉电阻是有影响的。

又做了一个测试,两块RX23T,一块烧之前的从机发送程序,另一块烧下图中的主机接受程序,结果主机收不到数据,从机的现象和之前一模一样。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分