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:用于在 EEPROM 上写入的 I2C 简单代码

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/986045/msp430fr5994-i2c-simple-code-for-writing-on-eeprom

器件型号:MSP430FR5994

尊敬的先生:

我正在尝试 制作一个简单的 I2C 主设备代码来将值写入 EEPROM AT24C02D-SSHM-T 我在这里使用的是 MSP430FR5994IPNR。

我有一个简单的 I2C 代码、但它不起作用。 我 在这里使用的从器件地址是0xA0。我将 EEPROM 的 A0、A1和 A2线路短接至接地。 请为此 EEPROM 提供工作代码。

此致、

Neethu

示例代码:

//
#include

const unsigned char TXData[]={0xAA};
const unsigned char SlaveAddress[]={0xA0};
volatile unsigned char TXByteCtr;
volatile unsigned char SlaveFlag = 0;

int main (空)

WDTCTL = WDTPW | WDTHOLD;

//配置 GPIO
P7SEL0 |= BIT0 | BIT1;
P7SEL1 &=~(BIT0 | BIT1);


//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;

//将 USCI_B2配置为 I2C 模式
UCB2CTLW0 = UCSWRST;//将 eUSCI_B 置于复位状态
UCB2CTLW0 |= UCMODE_3 | UCMST | UCSSEL_SMCLK;// I2C 主控模式、SMCLK
UCB2BRW = 0x8;//波特率= SMCLK / 8
UCB2CTLW0 &=~UCSWRST;//清除复位寄存器
UCB2IE |= UCTXIE0 | UCNACKIE;//发送和 NACK 中断使能

SlaveFlag = 0;//初始化 SlaveFlag

while (1)

__DELAY_CYCLES (1000);//传输之间的延迟
// UCB2I2CSA = SlaveAddress[SlaveFlag];//配置从地址
UCB2I2CSA = 0xA0;//配置从器件地址
TXByteCtr = 1;//加载 TX 字节计数器
while (UCB2CTLW0和 UCTXSTP);//确保发送了 STOP 条件

UCB2CTLW0 |= UCTR | UCTXSTT;// I2C TX,启动条件

_bis_SR_register (LPM0_bits | GIE);//输入 LPM0、带中断
//保持在 LPM0中直到所有数据
//是 TX
//更改从机地址


#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector = USCI_B2_vector
_interrupt void USCI_B2_ISR (void)
#Elif defined (_GNU_)
void __attribute__((中断(EUSCI_B2_vector)) USCI_B2_ISR (void)
其他
错误编译器不受支持!
#endif

开关(__evo_in_range (UCB2IV、USCI_I2C_UCBIT9IFG))

实例 USCI_NONE:break;//向量0:无中断
案例 USCI_I2C_UCALIFG:中断;//矢量2:ALIFG
案例 USCI_I2C_UCNACKIFG://向量4:NACKIFG
UCB2CTLW0 |= UCTXSTT;//如果 NACK,则重新发送开始
中断;
案例 USCI_I2C_UCSTTIFG:中断;//矢量6:STTIFG
案例 USCI_I2C_UCSTPIFG:中断;//矢量8:STPIFG
案例 USCI_I2C_UCRXIFG3:中断;//向量10:RXIFG3
案例 USCI_I2C_UCTXIFG3:中断;//向量12:TXIFG3
案例 USCI_I2C_UCRXIFG2:中断;//向量14:RXIFG2
案例 USCI_I2C_UCTXIFG2:中止;//向量16:TXIFG2
案例 USCI_I2C_UCRXIFG1:中断;//向量18:RXIFG1
案例 USCI_I2C_UCTXIFG1:中断;//向量20:TXIFG1
案例 USCI_I2C_UCRXIFG0:中断;//矢量22:RXIFG0
案例 USCI_I2C_UCTXIFG0://向量24:TXIFG0
if (TXByteCtr)//检查 TX 字节计数器

// UCB2TXBUF = TXData[SlaveFlag];//加载 TX 缓冲区
UCB2TXBUF = 0xAA;//加载 TX 缓冲器
TXByteCtr -;//减量 TX 字节计数器

其他

UCB2CTLW0 |= UCTXSTP;// I2C 停止条件
UCB2IFG &=~UCTXIFG;//清除 USCI_B2 TX 内部标志
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//退出 LPM0

中断;
案例 USCI_I2C_UCBCNTIFG:break;//向量26:BCNTIFG
案例 USCI_I2C_UCCLTOIFG:中断;//矢量28:时钟低电平超时
案例 USCI_I2C_UCBIT9IFG:中断;//矢量30:第9位
默认值:break;