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.

[参考译文] ccs/tm4c129encpdt:I2C 不能正常工作

Guru**** 2455360 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/638813/ccs-tm4c129encpdt-i2c-not-working-fine

器件型号:TM4C129ENCPDT

工具/软件:Code Composer Studio

尊敬的所有人:

我使用以下代码来读取地址0x40的从器件并写入一个字节。 但它不起作用。 我只需要从从器件(IO 扩展器)执行读取和 RIT 操作

void I2C6Init (void)
{
/******** I2C ***** /////

使用前必须启用 I2C6外设。
//
SysCtlPeripheralEnable (SYSCTL_Periph_I2C6);


SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);


GPIOPinConfigure (GPIO_PA6_I2C6SCL);
GPIOPinConfigure (GPIO_PA7_I2C6SDA);


GPIOPinTypeI2CSCL (BASE_PORta_Porta GPIO_PIN_6);
GPIOPinTypeI2C (GPIO_PORta_base、GPIO_PIN_7);

// HWREG (I2C6_BASE + I2C_O_MCR)|= 0x01;

//
在处理器(NVIC)上启用 I2C6中断。
//
IntEnable (INT_I2C6);

//
配置并打开 I2C6从机中断。
I2CSlaveIntEnableEx (I2C6_BASE、I2C_SLAVE_INT_DATA);

//#if defined (target_IS_TM4C129_RA0)||
// defined (target_IS_TM4C129_RA0
)|// defined (target_IS_TM4C129_RA2)
I2ClasterClk

、I2C12_Clock_Inclockt (I2C12_Ismail_Inclockt、I2C6) false);
//#endif


I2CSlaveEnable (I2C6_BASE);


I2CSlaveInit (I2C6_BASE、SLAVE_ADDRESS);


//I2CMasterSlaveAddrSet (I2C6_BASE、 Slave_address、false);
}



void ioWrite (uint8_t DATA_u8)
{


I2CMasterSlaveAddrSet (I2C6_BASE、SLAVE_ADDRESS、false);
//
//将要发送的数据放置在数据寄存器中
//
I2CMasterDataPut (I2C6_BASE、DATA_u8);

//
从主控方发送数据。
//
I2CMasterControl (I2C6_BASE、I2C_MASTER_CMD_SINGLE_SEND);

//
等待从器件接收并应答数据。
//
while (!(I2CSlaveStatus (I2C6_BASE)& I2C_SLAVE_ACT_RREQ)
{
}







}int ioRead (void)
{
int data[2]= 0;
//
将数据方向修改为 true,这样查看地址将
//指示 I2C 主设备正在从从从设备发起读取操作。
//
I2CMasterSlaveAddrSet (I2C6_BASE、SLAVE_ADDRESS、TRUE);

//
告知主控方读取数据。
//
I2CMasterControl (I2C6_BASE、I2C_MASTER_CMD_SINGLE_Receive);

//
等待从器件完成发送数据。
//

while (!(I2CSlaveStatus (I2C6_BASE)& I2C_SLAVE_ACT_TREQ)
{
}

//
//从主设备读取数据。
//
data[0]=(I2CMasterDataGet (I2C6_BASE));

返回数据;

}

请帮帮我。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    首先、我可以自由编辑您的帖子、并使用设置您发布的代码的格式 按钮。 这使得代码更易于阅读、并且更有可能由一位自愿提供帮助的经验丰富的用户进行审查。

    您曾提到您希望"读取地址为0x40的从器件"、但您将 TM4C129ENCDT 配置为从器件。 如果要读取从器件、TM4C 必须是主器件。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bob 工作出色-分析简洁。

    遗憾的是、大多数情况下-海报声称 TM4C 的 xyz "不能正常工作"-事实上、它始终是这样!

    不可避免的-正如我们在这里肯定会透露的-这是海报的理解和实施证明、"不能正常工作!"
    在我们的领域-"缺失或多余的";"可能造成严重破坏-海报问题的正确定义应为"工作一!"