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.

[参考译文] MSP430FR5994:I2C忙问题

Guru**** 2536610 points
Other Parts Discussed in Thread: MSP430FR5994

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/581762/msp430fr5994-i2c-busy-issue

部件号:MSP430FR5994

您好,

我正在我的项目中使用基于i2c的温度IC。 初始化i2c后,设备在调试模式下初始化后,持续显示i2c正忙。

这是我的初始化功能。

void i2c_init()

 P6SEL0 ||(BIT4| BIT5);  //选择sda/SCL引脚
 P6SEL1 &=~(BIT4| BIT5);

 P6DIR &=~(I2C_SCL);   //作为输入
 P6DIR || I2C_SDA;      //作为输出
 
 UCB3CTL1 |= UCSWRST;
 UCB3CTLW0 |= UCMODE_3 | UCMST | UCSYNC | UCSSEL__ACLK;
 UCB3BRW = 0x0008;
 UCB3CTL1 &=~UCSWRST;
 UCB3IE |= UCTXIE0 | UCRXIE0 | UCSTIE | UCNACKIE;
}

我在这里做错了吗? 请帮我解决这个问题。

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

    您的代码是否曾禁用GPIO通电默认高阻抗模式(PM5CTL0 &=~LOCKLPM5;)? 请使用UCB3CTLW0代替UCB3CTL1,这不是您的代码的问题,而是应该避免的传统术语。 如果您从LFXT以32 kHz的频率获取ACLK,I2C时钟频率将会相当慢,除以8会产生4 kHz的结果,而典型的I2C通信为100 kHz。 如果您没有填充合适的I2C线路上拉电阻器,eUSSCI将错误地认为总线繁忙并保持UCBBUSY设置。

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

    您好,Ryan:

    感谢您的回复。 我在i2c初始化之前禁用GPIO通电默认高阻抗模式(PM5CTL0 &=~LOCKLP5;)。
    在调试代码的过程中,我又遇到了一个问题,堆栈指针超出了范围。

    2017年3月17日星期五09:27:30:设备:MSP430FR5994
    2017年3月17日(星期五) 09:27:32:下载完成。
    2017年3月17日星期五09:27:32:目标重置
    2017年3月17日星期五09:28:39:堆栈'粘性'(当前内存:0x2B34)的堆栈指针超出堆栈范围(内存:0x2B60至内存:0x2C00)
    2017年3月17日(星期五) 09:28:56:目标重置
    2017年3月17日(星期五) 09:43:54:FET连接丢失

    我正在使用MSP430FR5994的默认链接器文件。

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

    您好,Aditya,

    您添加了什么代码导致出现错误? 您是否使用了大部分RAM空间(大量全局和静态变量以及noinit pragma),从而相应地减少了堆栈,并在尝试运行应用程序时超出了堆栈? 您是否启用了中断但没有ISR让IT人员进行服务,或者是否进入/退出LPM模式? 您应该记下CPU勘误表,并查看其中是否有任何一项描述了您遇到的问题。

    堆栈大小可以在“项目属性”->“构建”->“MSP430链接器”->“基本选项”下增加,但如果您分配了太多的RAM,这将不会有任何好处。

    此致,
    Ryan