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.

[参考译文] MSP430F2416:是否有人在 I2C 主控模式下具有 USCIB0的示例代码?

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/752061/msp430f2416-does-anyone-have-example-code-for-the-uscib0-in-i2c-master-mode

器件型号:MSP430F2416
主题中讨论的其他器件:HDC1080

 我尝试读取湿度传感器。 TI HDC1080将是一个很好的近似值。 我正在尝试使用中断、但现在会处理任何事情。 我的起点是 Github 上 htruong 的示例代码。  

我仍然不了解数据读取流程

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

    尊敬的 John:

    您可以在  TI Resource Explorer 中将 USCI_B0 I2C 主器件 TX 单字节引用到 MSP430从器件代码示例和其他类似示例。

    USCI_B0 I2C 主器件 TX 单字节到 MSP430从器件(MSP430x261x_uscib0_i2c_06.c)

    /*-版权所有-、BSD_EX
    *版权所有(c) 2012、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *
    ***
    *
    * MSP430代码示例免责声明
    *
    * MSP430代码示例是自包含的低级程序
    ,通常*以
    高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认
    值*寄存器值和时钟配置等设置、
    并且在组合多个示例中的代码时必须*小心以避免潜在的副作用
    *。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware
    *了解外设配置的 API 函数库方法。
    *
    *--/版权--*
    //*********
    // MSP430F26x 演示- USCI_B0 I2C 主器件 TX 单字节到 MSP430从器
    件//
    //说明:此演示通过 I2C 总线连接两个 MSP430。 主
    器件//发送到从器件。 这是主代码。 它持续
    //传输00h、01h、...、0ffh 并演示如何使用
    USCI_B0 TX 中断实现一个发送单字节的 I2C //主发送器。
    // ACLK = n/a、MCLK = SMCLK = BRCLK =默认 DCO =~1.045MHz
    //
    ***与"MSP430x261x_uscib0_i2c_07.c"***一起使用
    
    /|\/|\
    // MSP430F261x/241x 10k MSP430F261x/241x
    // 从器件 || 主器件
    // -------- |||---
    // -|XIN P3.1/UCB0SDA|-|--+->|P3.1/UCB0SDA XIN|-
    // | || | |
    // -|XOUT || | XOUT|-
    // | P3.2/UCB.S.|<---- >|P3.2/UCB.S. |
    // | | | |////
    
    B. Nisarga
    // Texas Instruments Inc.
    // 2007年9月
    //使用 CCE 生成版本:3.2.0和 IAR Embedded Workbench 版本:3.42A
    //*********
    #include 
    
    unsigned char TXData;
    unsigned char TXByteCtr;
    
    int main (void)
    {
    WDTCTL = WDTPW + WDTHOLD; //停止 WDT
    P3SEL |= 0x06; //将 I2C 引脚分配给 USCI_B0
    UCB0CTL1 |= UCSWRST; //启用 SW 复位
    UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C 主设备,同步模式
    UCB0CTL1 = UCSSEL_2 + UCSWRST; //使用 SMCLK、保持软件复位
    UCB0BR0 = 12; // fSCL = SMCLK/12 =~100kHz
    UCB0BR1 = 0;
    UCB0I2CSA = 0x48; //从器件地址为048h
    UCB0CTL1 &=~UCSWRST; //清除 SW 复位,恢复操作
    IE2 |= UCB0TXIE; //启用 TX 中断
    
    TXData = 0x01; //保持 TX 数据
    
    、同时(1)
    {
    TXByteCtr = 1; //加载 TX 字节计数器
    while (UCB0CTL1 & UCTXSTP); //确保发送了停止条件
    UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX、启动条件
    _bis_SR_register (CPUOFF + GIE); //输入带中断的 LPM0
    //保持在 LPM0中直到所有数据
    //是 TX
    TXData++; //递增数据字节
    }
    }-->-----------------
    
    
    // USCIAB0TX_ISR 的结构使其可用于通过
    预加载带有字节计数的 TXByteCtr 来发送任何//字节数。
    ///----------------------------------
    #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__)
    #pragma vector = USCIAB0TX_Vector
    __interrupt void USCIAB0TX_ISR (void)
    #Elif defined (__GNU__)
    void __attribute__((interrupt (USCIAB0TX_ISR)#vector
    
    (void USCIA0TX_ISR)#UCIAB0TX_ISR (void))#defineer_COMPLETE!错误!#UICUICUICUICUICU
    #endif
    {
    if}(TXByteCtr) //检查 TX 字节计数
    器{
    UCB0TXBUF = TXData; //加载 TX 缓冲区
    TXByteCtr --; //减量 TX 字节计数
    器}
    否则
    {
    UCB0CTL1 |= UCTXSTP; // I2C 停止条件
    IFG2 &=~UCB0TXIFG; //清除 USCI_B0 TX int 标志
    _BIC_SR_REGISTER_ON_EXIT (CPUOFF); //退出 LPM0
    }
    

    此致、

    James