TI中文支持网
TI专业的中文技术问题搜集分享网站

在TMS320F28035上建立I2C_slave时,无法工作

我在TMS320F28035上搭建了一个I2C的从机,但是,无法实现功能,也没有找到相关的官方例程。如果有人在这方面有过经验,想请您给出点建议,谢谢。我的代码如下:

/*
* main.c
*/
#include "DSP28x_Project.h"
#include "DSP2803x_I2c.h"
#include "DSP2803x_I2c_defines.h"
#include <math.h>

#define I2C_slave_addr 0x08
#define LED_ON GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;
#define LED_OFF GpioDataRegs.GPBSET.bit.GPIO34 = 1;
#define LED_BLINK GpioDataRegs.GPBTOGGLE.bit.GPIO34 = 1;
struct I2C_REGS I2c_slave;

int read=0;
int count=0;

void I2C_Slave_Init(void);
int I2C_Slave_read(void);
void I2C_Slave_write(int returnvalue);

int main(void)
{
InitSysCtrl();
InitGpio();

InitI2CGpio();

I2C_Slave_Init();

DINT;

InitPieCtrl();

IER = 0x0000;
IFR = 0x0000;

InitPieVectTable();

// InitPeripherals();

while(1)
{
read=I2C_Slave_read();
if (read == 0x0001)
{
LED_OFF;
}
else
{
LED_ON;
}
}
}

void I2C_Slave_Init(void)
{
I2c_slave.I2COAR = 0x0010; // Set Own Adress
I2c_slave.I2CMDR.all = 0x0000;

I2c_slave.I2CPSC.all = 19; // Prescaler – need 7-12 Mhz on module clk
I2c_slave.I2CCLKL = 10; // NOTE: must be non zero
I2c_slave.I2CCLKH = 5; // NOTE: must be non zero
I2c_slave.I2CIER.all = 0x0; // disable SCD & ARDY __interrupts

I2c_slave.I2CFFTX.all = 0x0000; // Enable FIFO mode and TXFIFO
I2c_slave.I2CFFRX.all = 0x0000; // Enable RXFIFO, clear RXFFINT,

I2c_slave.I2CMDR.all = 0x0020; // I2C Slave, Free, release from reset
return;
}

int I2C_Slave_read(void)
{
int i;
I2c_slave.I2CCNT=1;
i = I2c_slave.I2CDRR & 0x00FF;//I2CDRR is a 16 bit register,
return i;
// receivedata[0]=I2c_slave.I2CDRR;
}

void I2C_Slave_write(int returnvalue)
{

}

mangui zhang:slave的例程比较少先确保引脚设计SCL SDA连接正常上拉电阻有设计
实在不行建议抓取波形看看是不是MCU作为slave没有响应还是?

我在TMS320F28035上搭建了一个I2C的从机,但是,无法实现功能,也没有找到相关的官方例程。如果有人在这方面有过经验,想请您给出点建议,谢谢。我的代码如下:

/*
* main.c
*/
#include "DSP28x_Project.h"
#include "DSP2803x_I2c.h"
#include "DSP2803x_I2c_defines.h"
#include <math.h>

#define I2C_slave_addr 0x08
#define LED_ON GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;
#define LED_OFF GpioDataRegs.GPBSET.bit.GPIO34 = 1;
#define LED_BLINK GpioDataRegs.GPBTOGGLE.bit.GPIO34 = 1;
struct I2C_REGS I2c_slave;

int read=0;
int count=0;

void I2C_Slave_Init(void);
int I2C_Slave_read(void);
void I2C_Slave_write(int returnvalue);

int main(void)
{
InitSysCtrl();
InitGpio();

InitI2CGpio();

I2C_Slave_Init();

DINT;

InitPieCtrl();

IER = 0x0000;
IFR = 0x0000;

InitPieVectTable();

// InitPeripherals();

while(1)
{
read=I2C_Slave_read();
if (read == 0x0001)
{
LED_OFF;
}
else
{
LED_ON;
}
}
}

void I2C_Slave_Init(void)
{
I2c_slave.I2COAR = 0x0010; // Set Own Adress
I2c_slave.I2CMDR.all = 0x0000;

I2c_slave.I2CPSC.all = 19; // Prescaler – need 7-12 Mhz on module clk
I2c_slave.I2CCLKL = 10; // NOTE: must be non zero
I2c_slave.I2CCLKH = 5; // NOTE: must be non zero
I2c_slave.I2CIER.all = 0x0; // disable SCD & ARDY __interrupts

I2c_slave.I2CFFTX.all = 0x0000; // Enable FIFO mode and TXFIFO
I2c_slave.I2CFFRX.all = 0x0000; // Enable RXFIFO, clear RXFFINT,

I2c_slave.I2CMDR.all = 0x0020; // I2C Slave, Free, release from reset
return;
}

int I2C_Slave_read(void)
{
int i;
I2c_slave.I2CCNT=1;
i = I2c_slave.I2CDRR & 0x00FF;//I2CDRR is a 16 bit register,
return i;
// receivedata[0]=I2c_slave.I2CDRR;
}

void I2C_Slave_write(int returnvalue)
{

}

user4915458:

回复 mangui zhang:

  是的,没找到比较好的TI例程。我后来测试了一下,可能还是slave一些设置的问题。我的主机在发送地址后,可能是从机无法识别消息,因此没有返回ACK,导致我的主机始终是一种挂起的状态。现在,就是没有很好的方法来确认这个寄存器设置是不是正确的。这就比较头疼了。

赞(0)
未经允许不得转载:TI中文支持网 » 在TMS320F28035上建立I2C_slave时,无法工作
分享到: 更多 (0)