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.

[参考译文] 编译器/MSP430F67791A:I2C ISR 不会进入 MSP430F6779A 中的固有中断

Guru**** 2393725 points
Other Parts Discussed in Thread: MSP430F67791A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/709664/compiler-msp430f67791a-i2c-isr-does-not-come-in-to-recive-innterrupt-in-msp430f6779a

器件型号:MSP430F67791A

工具/软件:TI C/C++编译器

您好、先生、

       请帮我解决问题、我希望从连接在 msp430f67791A I2C 上的 EEPROM 发送和接收数据、这里使用 i2c 从器件到 MSP430主器件的示例代码不起作用、这是我所需要的、 但 为 I2C 主设备到 MSP430从设备提供的示例代码的工作原理是、我能够发送数据、但无法从 MSP430 I2C 中断子例程(ISR)上的 EEPROM 接收任何数据。 我在下面附上我的代码、请给我同样的建议。

// MSP430F67791A 演示- USCI_B0 I2C 主设备 TX 单个字节到 MSP430从设备
//
//说明:此演示通过 I2C 总线连接两个 MSP430。 主器件
//发送到从设备。 这是主代码。 它会持续运行
//传输00h、01h、...、0ffh 并演示如何实现 I2C
//主发送器使用 eUSCI_B0 TX 中断发送单个字节。
// ACLK = n/a、MCLK = SMCLK = BRCLK =默认 DCO =~1.045MHz
//
///|\/|\
// MSP430F67791A 10k MSP430F67791A
//从器件||主器件
//------------ |||---
//-|XIN P2.6/UCB0SDA|-|--+-|P2.6/UCB0SDA XIN|-
//|||||
//-|XOUT ||| XOUT|-
//| P2.5/UCB.S.|<---- |P2.5/UCB.S.|
//||||
//
/ E. Chen
// Texas Instruments Inc.
/2014年1月
//使用 CCS 版本:5.5.0和 IAR Embedded Workbench 版本:5.52进行编译
//
#include

unsigned char TXData;
unsigned char TXByteCtr;

unsigned char * PRxData;//指向 RX 数据的指针
unsigned char RXByteCtr;
volatile unsigned char RxBuffer[5];//分配5字节 RAM

unsigned int flag=0;
void main (void)

WDTCTL = WDTPW | WDTHOLD;//停止 WDT

//设置 P2.5 UCB.S.、P2.6 UCB0SDA
P2SEL0 |= BIT5 | BIT6;//将 P2.5、P2.6设置为 UCB.S、UCB0SDA

//设置 eUSCI_B0发送
UCB0CTLW0 |= UCSWRST;//启用软件复位
UCB0CTLW0 |= UCMST | UCMODE_3 | UCSSEL_2;// I2C 主设备、使用 SMCLK

UCB0BRW_L = 12;// fSCL = SMCLK/12 =~100kHz
UCB0BRW_H = 0;
UCB0I2CSA = 0x0000;//从器件地址为048h
UCB0CTLW0 &=~UCSWRST;//清除软件复位,恢复操作
UCB0IE |= UCTXIE0 | UCRXIE0;//启用 TX 中断
TXData = 0x01;//保留 TX 数据


//////设置 eUSCI_B0接收
// UCB0CTLW0 |= UCSWRST;//启用软件复位
// UCB0CTLW0 |= UCMST | UCMODE_3 | UCSSEL_2;// I2C 主设备,同步模式
// UCB0BRW_L = 12;// fSCL = SMCLK/12 =~100kHz
// UCB0BRW_H = 0;
// UCB0I2CSA = 0x48;//从地址为048h
// UCB0CTLW0 &=~UCSWRST;//清除 SW 复位,恢复操作
// UCB0IE |= UCRXIE0;//启用 RX 中断
_bis_SR_register (GIE);//输入 LPM0、带中断

if (flag==0)
TXByteCtr = 1;

while (1)

//加载 TX 字节计数器

while (UCB0CTLW0 & UCTXSTP);//确保发送了 STOP 条件
UCB0CTLW0 |= UCTR | UCTXSTT;// I2C TX,启动条件

if (flag==1)

flag=0;

UCB0IFG &=~UCRXIFG;
UCB0IE |= UCRXIE0;

PRxData =(unsigned char *) RxBuffer;// RX 缓冲区开始
RXByteCtr = 5;//加载 RX 字节计数器
while (UCB0CTLW0 & UCTXSTP);//确保发送了 STOP 条件
UCB0CTLW0 |= UCTXSTT;// I2C 启动条件


_bis_SR_register (GIE);//输入 LPM0、带中断
_NO_OPERATION ();//保持在 LPM0中直到所有数据
//是 TX

TXData++;//递增数据字节

///----------------------------------
// USCIAB0_ISR 的结构使其可用于传输任何数据
//预加载带有字节计数的 TXByteCtr 的字节数。
///----------------------------------
// USCI_B0中断服务例程
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector = USCI_B0_vector
_interrupt void USCI_B0_ISR (void)
#Elif defined (_GNU_)
void __attribute__((中断(USCI_B0_vector)) USCI_B0_ISR (void)
其他
错误编译器不受支持!
#endif

开关(_偶数_在范围内(UCB0IV、30))

案例 USCI_NONE:中断;//无中断
案例 USCI_I2C_UCALIFG:中断;// ALIFG
案例 USCI_I2C_UCNACKIFG:中断;// NACKIFG
案例 USCI_I2C_UCSTTIFG:中断;// STTIFG
案例 USCI_I2C_UCSTPIFG:中断;// STPIFG
USCI_I2C_UCRXIFG3案例:中断;// RXIFG3
USCI_I2C_UCTXIFG3案例:中断;// TXIFG3
USCI_I2C_UCRXIFG2案例:中断;// RXIFG2
USCI_I2C_UCTXIFG2案例:中断;// TXIFG2
USCI_I2C_UCRXIFG1案例:中断;// RXIFG1
USCI_I2C_UCTXIFG1案例:中断;// TXIFG1
案例 USCI_I2C_UCRXIFG0:// RXIFG0
RXByteCtr --;//递减 RX 字节计数器
IF (RXByteCtr)

* PRxData++= UCB0RXBUF;//将 RX 数据移动到地址 PRxData
如果(RXByteCtr = 1)//只剩下一个字节?
UCB0CTLW0 |= UCTXSTP;//生成 I2C 停止条件

其他

* PRxData = UCB0RXBUF;//将最终的 RX 数据移动到 PRxData
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//退出活动 CPU

中断;

案例 USCI_I2C_UCTXIFG0:// TXIFG0
if (TXByteCtr)//检查 TX 字节计数器

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

其他

UCB0IFG &=~UCTXIFG;//清除 USCI_B0 TX 内部标志
UCB0CTL1 |= UCTXSTP;// I2C 停止条件
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//退出 LPM0
flag=1;


中断;
案例 USCI_I2C_UCBCNTIFG:break;// CNTIFG
USCI_I2C_UCCLTOIFG 案例:中断;// LTOIFG
案例 USCI_I2C_UCBIT9IFG:中断;// BIT9IFG
默认值:break;

此致、

扭结  

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

    请参阅您正在使用的 EEPROM 的文档。 您可能需要更改 MSP430代码中的一些配置参数、以使通信与 EEPROM 保持一致。

    此致、
    Nathan