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:MSP430FR5994 I2C 简单发送器

Guru**** 2465890 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/678132/msp430fr5994-msp430fr5994-i2c-simple-transmitter

器件型号:MSP430FR5994

尊敬的 Sirs:

  我正在尝试制作一个简单的 I2C 主发送器来设置数字电位器。  我有一个尝试符合的简单示例代码  

用户手册中的一个、例如32-1。  它将 P5.0用于 SDA、将 P5.1用于 SCLK。  我使用 MSP-EXP 430FR5994 (评估板)进行检查。

它目前还不使用中断。  在 P5.0或 P5.1上使用示波器运行时、根本没有信号。

  可以有人快速查看并纠正我的问题吗?

谢谢 、John Moore

示例代码:

#include

Int A;


/*********
测试 I2C MSP430FR5994

简单 I2C 发送器不使用中断。 用于写入电子电位计。

将 I2C TxData 输出 P5.0和 P5.1

最初来自 Dang
秘书长的报告 /
unsigned char TXData;
unsigned char TXByteCtr;

int main (空)

int i;

WDTCTL = WDTPW + WDTHOLD;//停止 WDT


PM5CTL0 &=~LOCKLPM5;//默认情况下禁用 GPIO 电源

UCB1CTL1 |= UCSWRST;//启用 SW 复位

P5SEL0 |= BIT0;//UCB1SIMO
P5SEL0 |= BIT1;//UCB1SOMI
//P5SEL0 |= BIT3;//UCB1STE (从器件 TX 使能)

P5SEL1 &=~BIT0;//UCB1SIMO
P5SEL1 &=~BIT1;//UCB1SOMI
//P5SEL1 &=~BIT3;//UCB1STE (从器件 TX 启用)

//UCMODE_3设置 I2C 模式
UCB1CTLW0 = UCMST + UCMODE_3;// I2C 主设备、I2C、
UCB1CTLW1 = UCASTP_2;//自动停止有效
UCB1BRW = 8;// fSCL = SMCLK/12 =~100kHz
UCB1TBCNT = 7;// 7位数据
//UCB1BR1 = 0;
UCB1I2CSA = 0x1A;//从器件地址为1AH
UCB1CTL1 &=~UCSWRST;//清除 SW 复位,恢复运行

// UCB1IE |= UCTXIE1;//为 UCB1IE 启用 TX 中断

TXData = 0x00;//保留 TX 数据
UCB1CTL1 |= UCTR + UCTXSTT;// I2C TX、启动条件

while (1)

TXByteCtr = 1;//加载 TX 字节计数器
// while (UCB1CTL1 & UCTXSTP);//确保发送了 STOP 条件
// UCB1CTL1 |= UCTR + UCTXSTT;// I2C TX,启动条件
//__bis_SR_register (CPUOFF + GIE);//输入 LPM0并带有中断
//保持在 LPM0中直到所有数据
//是 TX
//发送循环(无中断):
UCB1TXBUF = TXData;//加载 TX 缓冲区新!!
for (i=0;i<10000;i++)//发送时的延迟
A=a+1;
TXData++;//递增数据字节

///----------------------------------
// USCIAB0TX_ISR 的结构使其可用于传输任何数据
//预加载带有字节计数的 TXByteCtr 的字节数。

//目前未使用
///----------------------------------
#pragma vector = USCIAB1TX_vector
_interrupt void USCIAB1TX_ISR (void)

A=a+1;
if (TXByteCtr)//检查 TX 字节计数器

UCB1TXBUF = TXData;//加载 TX 缓冲区
TXByteCtr -;//减量 TX 字节计数器

其他

UCB1CTL1 |= UCTXSTP;// I2C 停止条件
UCB1IFG &=~UCTXIFG1;//清除 USCI_B1 TX 内部标志
_BIC_SR_REGISTER_ON_EXIT (CPUOFF);//退出 LPM0

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    >UCB1CTLW0 = UCMST + UCMODE_3;// I2C 主设备、I2C、

    这会设置 UCSYNC=0和 UCSSEL=0 (另请参阅 SLAU367M 表26-4)。 尝试:

    UCB1CTLW0 |= UCMST + UCMODE_3;// I2C 主设备、I2C、(将 UCSYNC=1、UCSSEL=3)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢、Bruce:

         是的、UCMST 将其设置为发送、因此这应该起作用!

    一定要试试!

    感谢您的帮助和辛勤工作。

    John

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

    您是否能够解决您的问题?

    谢谢、

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

    谢谢、Bruce 和 Mitch:

    是的、主要问题是我完全忘记使用上拉电阻器!

    John

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

    感谢您提供的信息! 很高兴看到一切都解决了。 您是否介意点击 Resolved 按钮?

    谢谢、

    Mitch