This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

F28M35H52C: F28M35H52C中M3核上I2C关于BUSY位拉高问题和RREQ位拉高问题?

Part Number: F28M35H52C

问题1:

上板测试:

I2C模块进行Master TRANSMIT with Repeated START模式(如下图1),根据下图的配置,代码编写(如附件1)

操作:

1.断点直接打到I2CMasterControl(I2C0_MASTER_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE);位置,也就是对MCS寄存器写入3,完成该断点的操作,BUSY位置并未置1.但是按照原理在数据传输的过程中,

I2C controller is busy,所以BUSY位置置1:

2.断点直接打到I2CMasterControl(I2C0_MASTER_BASE,I2C_MASTER_CMD_BURST_SEND_CONT);位置,也就是对MCS寄存器写入1,完成该断点的操作,BUSY位置并未置1.但是按照原理在数据传输的过程中,

I2C controller is busy,所以BUSY位置置1:

3.断点直接打到I2CMasterControl(I2C0_MASTER_BASE,I2C_MASTER_CMD_BURST_SEND_FINISH);位置,也就是对MCS寄存器写入5,完成该断点的操作,BUSY位置置1.

其他操作4.断点直接打到I2CMasterControl(I2C0_MASTER_BASE,I2C_MASTER_CMD_SINGLE_RECEIVE);位置,也就是对MCS寄存器写入7,完成该断点的操作,BUSY位置置1.符合BUSY位的预期。

而且图1中发现当写入MCS寄存器以后,没有需要判断MCS_BUSY位是否置1,只有在传输完成以后才需要判断BUSY位,但是手册上的BUSY的解释是I2C controller is busy,所以应该是当我写入MCS的时候,BUSY就应该置1了吧?

问题2:

上板测试:与上述一致

操作:

1.断点直接打到I2CMasterControl(I2C0_MASTER_BASE,I2C_MASTER_CMD_SINGLE_RECEIVE);表示完成数据传输

2.在进行CCS单步操作,结果发现RREQ状态位并没有置1,导致判断while(!(I2CSlaveStatus(I2C0_SLAVE_BASE) & I2C_SCSR_RREQ))不能完成。

3.所以在判断while(!(I2CSlaveStatus(I2C0_SLAVE_BASE) & I2C_SCSR_RREQ))中加入循环,发现每次能退出循环RREQ置1的时间都不同。所以先请问一下手册上说的延迟(如下图3),到底是需要延迟多久?

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//###########################################################################
// FILE: i2c_loopback.c
// TITLE: Example demonstrating a simple I2C message
// transmission and reception.
//###########################################################################
// $TI Release: F28M35x Support Library v220 $
// $Release Date: Tue Sep 26 15:35:11 CDT 2017 $
// $Copyright: Copyright (C) 2011-2017 Texas Instruments Incorporated -
// http://www.ti.com/ ALL RIGHTS RESERVED $
//###########################################################################
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_i2c.h"
#include "inc/hw_nvic.h"
#include "inc/hw_sysctl.h"
#include "driverlib/i2c.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/flash.h"
#include "utils/uartstdio.h"
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

x 出现错误。请重试或与管理员联系。