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.

[参考译文] MSP430G2553:I2C 写入特定寄存器

Guru**** 2540720 points
Other Parts Discussed in Thread: LP5024, MSP430G2553

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/885522/msp430g2553-i2c-write-to-specific-register

器件型号:MSP430G2553
主题中讨论的其他器件:LP5024

您好!

我希望获得一些有关将 MSP430G2553与 I2C 搭配使用的帮助。 我正在尝试更改外设(LP5024)上的特定寄存器、但不太了解如何使用 MSP430来实现这一点。 我找到了以下 有关如何实现这一目标的文档:

  

我不理解的是如何将其转换为代码。 我一直在研究这些例子,其中任何一个似乎都不适合这种情况。  

我的一个问题是关于步骤2和 MSP430缓冲 器 UCB0I2CSA。 在传输数据序列时、是否会在开始时自动发送该数据、或者我是否需要手动发送该数据。 例如、假设我想将0xFF 写入地址为0x88的外设的寄存器0x00。 是否需要手动发送  

const unsigned char TxData ={0x00、0xFF}; //要发送的数据表

const unsigned char TxData ={0x88、0x00、 0xFF }; //要发送的数据表

如果是第二个选项、 UCB0I2CSA 缓冲器的用途是什么?

我一直使用代码 msp4302xx3_uscib0_i2c_08.c作为我的工作框架。 如果我想更改外设上的两个独立寄存器、我是否可以像这样简单地复制主循环中的代码?

while (1)

  PTxData =(unsigned char *) TxData1;        // TX 数组起始地址
   TXByteCtr = TxData1的大小;             //加载 TX 字节计数器
   while (UCB0CTL1 & UCTXSTP);            //确保发送了停止条件
   UCB0CTL1 |= UCTR + UCTXSTT;          // I2C TX、启动条件
   _bis_SR_register (CPUOFF + GIE);         //输入带中断的 LPM0
                                       //保持在 LPM0中直到所有数据
                                       //是 TX


   PTxData =(unsigned char *) TxData2;        // TX 数组起始地址
   TXByteCtr = TxData2的大小;               //加载 TX 字节计数器
   while (UCB0CTL1 & UCTXSTP);           //确保发送了停止条件
   UCB0CTL1 |= UCTR + UCTXSTT;          // I2C TX、启动条件
   _bis_SR_register (CPUOFF + GIE);        //输入带中断的 LPM0
                                      //保持在 LPM0中直到所有数据
                                      //是 TX

感谢你的帮助!

Kathleen

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

    您不会对步骤2执行任何显式操作。 I2C 单元将根据 I2CSA 和 UCTR 构造此("SLA")字节、并在开始条件之后自动发送。

    从器件地址(I2CSA)为7位、因此假设 ADDR0-1连接到 GND、则为0x28 [参考 LPS50xx 数据表(SLVSEB8B)表2]

    您应该能够像之前那样通过重复代码来写入2个寄存器。 当您添加函数时、您可能需要编写一个包装函数。 大部分工作都在 ISR 中完成。 当您想要读取一些字节时、您可能需要转到 i2c_10.c 或 i2c_12.c 等内容

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

    你(们)好  

    您应按照 LP5024数据表第18页的编程说明进行操作

    我认为代码示例更适合您 链接