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.

[参考译文] CCS/RF430FRL152H:问题:MSP430G2553和 MSP430FRL152H 之间的 I2C 通信

Guru**** 2479905 points
Other Parts Discussed in Thread: MSP430G2553, RF430FRL152HEVM, RF430FRL152H, RF430CL330H, RF430CL331H

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/707923/ccs-rf430frl152h-issue-i2c-communication-between-msp430g2553-and-msp430frl152h

器件型号:RF430FRL152H
主题中讨论的其他器件:MSP430G2553、、 RF430CL330HRF430CL331H

工具/软件:Code Composer Studio

您好!

  我在 MSP430G2553和 MSP430FRL152H 之间的 I2C 通信中遇到问题。 我将 MSP430FRL152H 用作从器件。  

对于主站:我从 \slac485j\MSP430G2xx3_Code_examples\C\msp430g2xx3_uscib0_i2c_08.c 中选择了示例代码

/*-版权所有-、BSD_EX
*版权所有(c) 2012、德州仪器(TI)公司
*保留所有权利。
*
*
只要
符合以下条件*、允许以源代码和二进制形式重新分发和使用:
*
*源代码的重新分发必须保留上述版权
声明*、此条件列表和以下免责声明。
*
***二进制形式的再发行必须在

*随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
*
***未经

事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
*
*本软件由版权所有者和贡献者"按原样"提供
*、

不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
*贡献者都不对任何直接、间接、偶然、特殊、
*模范、 或相应的损害(包括但不限于
*采购替代产品或服务;丧失使用、数据或利润;
*或业务中断)、但出于任何责任理论
、*无论是在合同中、严格责任还是由于
使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
、*即使已获悉可能会发生此类损坏。
*
***
*
* MSP430代码示例免责声明
*
* MSP430代码示例是自包含的低级程序
,通常*以
高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认
值*寄存器值和时钟配置等设置、
并且在组合多个示例中的代码时必须*小心以避免潜在的副作用
*。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware
*了解外设配置的 API 函数库方法。
*
*--/版权--*
//*********
// MSP430G2xx3演示- USCI_B0 I2C 主器件 TX 多个字节到 MSP430从器
件//
//说明:此演示通过 I2C 总线连接两个 MSP430。 主
器件//发送到从器件。 这是主代码。 它持续
//传输一组数据并演示如何使用
USCI_B0 TX 中断实现发送多个字节的 I2C //主发送器。
// ACLK = n/a、MCLK = SMCLK = BRCLK =默认 DCO =~1.2MHz
//
//***与"msp430g2xx3_uscib0_i2c_09.c"***
//
/|\/|\
// MSP430G2xx3. 10k 10k MSP430G2xx3
// 从器件 || 主器件
// -------- |||---
// -|XIN P3.1/UCB0SDA|-|--+->|P3.1/UCB0SDA XIN|-
// | || | |
// -|XOUT || | XOUT|-
// | P3.2/UCB.S.|<---- >|P3.2/UCB.S. |
// | | | |////

D. Dang
// Texas Instruments Inc.
// 2011年2月
//使用 CCS 版本4.2.0和 IAR Embedded Workbench 版本构建:5.10
//*********
#include 

unsigned char * PTxData; //指向 TX 数据
的指针 unsigned char TXByteCtr;
const unsigned char TxData[]= //要发送
的数据表{
0x11、
0x22、
0x33、
0x44、
0x55
};

int main (void)
{
WDTCTL = WDTPW + WDTHOLD; //停止 WDT
P1SEL |= BIT6 + BIT7; //将 I2C 引脚分配给 USCI_B0
P1SEL2|= BIT6 + BIT7; //将 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 中断

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


// USCIAB0TX_ISR 的结构使其可用于通过
预加载带有字节计数的 TXByteCtr 来发送任何//字节数。 此外、TXData
//指向要发送的下一个字节。
///----------------------------------
#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 =* PTxData++; //加载 TX 缓冲区
TXByteCtr --; //减量 TX 字节计数
器}
否则
{
UCB0CTL1 |= UCTXSTP; // I2C 停止条件
IFG2 &=~UCB0TXIFG; //清除 USCI_B0 TX int 标志
_BIC_SR_REGISTER_ON_EXIT (CPUOFF); //退出 LPM0
}

 

 

对于从机:源代码:  

/*
* main.c
*
* RF430FRL152H 仅 NFC 示例项目
*
*版权所有(C) 2014德州仪器(TI)公司- http://www.ti.com/
*

**允许以源代码和二进制形式重新分发和使用
(无论是否进行*修改),前提是
满足以下条件*:
*
*源代码的重新分发必须保留上述版权
声明*、此条件列表和以下免责声明。
*
*二进制形式的再发行必须在

*
发行版随附的*文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
*
*未经

事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件派生的产品*。
*
*本软件由版权所有者和贡献者
*按原样"提供、

且不承认任何明示或暗示的保证、包括但不限于*特定用途*的适销性和适用性的暗示保证。 在任何情况下、版权
*所有者或贡献者都不对任何直接、间接、偶然、
*特殊、模范、 或相应的损害(包括但不
限于*采购替代产品或服务;丧失使用、
*数据或利润; 或业务中断)、但出于
任何*责任理论、无论是合同、严格责任还是侵权
行为*(包括疏忽或其他原因)、即使
被告知可能会造成此类损坏、也是出于此类责任理论。
*
*/

#include "NDEF.h"
#include "types.h"
#include "patch.h"
#include 


#define PORT_I2C_OUT P1OUT
#define PORT_I2C_DIR P1DIR
#define PORT_I2C_SEL0 P1SEL0
#define PORT_I2C_SEL1 P1SEL1
#define SDA BIT0
#define SCL BIT1



//********* 函数原型******** /
void DeviceInit(void);
//******** /


#pragma RETAIN (PRxData);
unsigned char * PRxData; //指向 RX 数据的指针
#pragma RETAIN (RXByteCtr);
unsigned char RXByteCtr;
#pragma RETAIN (RxBuffer);
volatile unsigned char RxBuffer[128]; //分配128字节的 RAM


void I2C_init (void);

void main ()
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗

// ROM RF13M 模块设置**正确的 RF 堆栈操作需要以下三行
DS = 1;//需要在此处初始化 ROM 变量
ASM ("调用#0x5CDA ");//调用 ROM 函数(初始化函数指针)
asm ("调用#0x5CAC ");//调用 ROM 函数(检查器件配置)


initISO15693 (clear_block_locks);//清除所有块锁定
//initISO15693 (0);//将块锁定保留为在 FRAM 中设置//

JTAG 设置为在该函数调用
CopyInit()中禁用;//CopyDeviceInit()

;//FRAMI2C

;CopyDeviceIntoI2C;

_bis_SR_register (GIE);

while (1)
{
PRxData =(unsigned char *) RxBuffer;// RX 缓冲区开始
RXByteCtr = 0; //清除 RX 字节计数
__bis_SR_register (LPM3_bits + GIE);
}


/
*DeviceInit

*
*简介:初始化时钟系统和其他设置
* patchable function
*
* param[in]:parameters:具有这些独立选项
* Initialize_device_clock_system -初始化时钟系统
* populate_interrupt_vector_in_initialization -填充默认中断矢量并重新计算其 CRC
*
param[out]:无
*
返回无
*
*可修补:是
/

void DeviceInit (void)
{
P1SEL0 = 0xF0;//保留 JTAG
P1SEL1 = 0xF0;//保留 JTAG
//P1SEL0 = 0x00;//无 JTAG
//P1SEL1 = 0x00;//无 JTAG
P1DIR &=~0xEF;
P1REN = 0;

CCSCTL0 = CCSKEY; //解锁 CCS

CCSCTL1 = 0; //时钟速度不要减半
CCSCTL4 = SELA_1 + SELM_0 + SELS_0; //为 ACLK 选择 VLO 并为 MCLK 和 SMCLK 选择 HFCLK/DCO
CCSCTL5 = DIVA_2 + DIVM_1 + DIVS_1; //将 ACLK (4)、MCLK 和 SMCLK 的分频器设置为1
CCSCTL6 = XTOFF; //如果不使用晶振、则将其旋转
CCSCTL8 = ACLKREQEN + MCLKREQEN + SMCLKREQEN;//如果未使用时钟、则禁用时钟

CCSCTL0_H |= 0xFF; //锁定 CCS

返回;
}



void I2C_init (void)
{
//ROM 设置 P1OUT = 0x0F、然后消耗一些电流
P1OUT = 0x00;//需要降低 RF430FRL152H EVM 的功耗、因为 P1.3连接到 EVM 上的2.2K 欧姆电阻接地

//为 I2C 模式配置 P1.0和 P1.1引脚
PORT_I2C_SEL0 |= SCL + SDA;
PORT_I2C_SEL1 &=~Ω(SCL + SDA);

UCB0CTL1 |= UCSWRST;// eUSCI_B 处于复位状态
UCB0CTLW0 |= UCMODE_3;// I2C 从模式
UCB0I2COA0 = 0x0048;//自身地址为12十六进制

// P2SEL |= 0x03;//配置 I2C 引脚(特定于器件)

UCB0CTL1 &=~UCSWRST;// eUSCI_B 处于运行状态
// UCB0IE |= UCTXIE + UCRXIE;//启用 Tx&RX-INTERRUPT
UCB0IE |= UCTXIE;

_bis_SR_register (GIE);//常规中断使能

return;
}


#pragma vector = RF13M_vector
__interrupt void RF13M_ISR (void)
{
switch (__evo_in_range (UCB0IV、0x1E)){
情况0x00://向量0:无中断
中断;

情况0x16://向量22:RXIFG0
UCB0STAT &=~(UCSTPIFG + UCSTTIFG); //清除中断标志
IF (RXByteCtr) //检查 RX 字节计数器
// _BIC_SR_REGISTER_ON_EXIT (CPUOFF); //如果数据是,则退出 LPM0

_BIC_SR_REGISTER_ON_EXIT (LPM0_Bits | GIE);//退出 LPM0



中断;
情况0x18://向量24:TXIFG0

* PRxData++= UCB0RXBUF; //将 RX 数据移动到地址 PRxData
RXByteCtr +; //增加 RX 字节计数


中断;

默认值:break;
}

} 

我 无法接收 T2C Rx/Tx 中断。  在 SCL 和 ADA 引脚上,30k 上拉电阻连接到主端(EXP430G2 lanch pad),2.2K 上拉电阻连接到从端(RF430FRL152HEVM 电路板)。  

请提供任何提示以继续。  

 

谢谢、

AG

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

    具有两个上拉电阻对我来说是没有意义的、而且主机端的值也非常高。 您能否将其减少到单个上拉电阻器? 2.2k 欧姆可能可以、也可以使用4.7k 欧姆的电阻。

    当您查看 I2C 线路时、您在信号方面看到了什么? 您是否看到主输出? 如果是、是否有从器件的任何答复?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您的回复。

    在调试过程中,我观察到时钟 是从主设备端正确生成的。

    起始位也正常。

    我多次观察到 rf430frl152h 的中断处理与其他 MSP430器件略有不同。 您能否通过连接的从源代码确认并检查 i2c 初始化和中断处理。 ?

    提前感谢您的回复。

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

    你(们)好

    请查找有关同一报告问题的更多观察结果。  

    我将 MSP430G2 (EXP430G2)用作主机控制器、将 RF430FRL152H 用作 I2C 从设备。 在从器件侧、SDA 和 SCL 引脚上只连接了2.2k 上拉电阻器。  

     开始位和器件地址在主器件与从器件之间显示正确(在 CRO 上变化)、但从器件不响应 ACK。 时钟(SCL)也正常。 



    2、所有引脚状态均根据以下数据表和原理图进行了变化:  

    3.据观察,接收到地址命令 UCBBUSY 变为高电平。 如果它变高、那么为什么从器件不响应 ACK?

     

    4.从机源代码:  

     

    #include "NDEF.h"
    #include "types.h"
    #include "patch.h"
    #include 
    
    #define firmware_control_address 0xF867
    #pragma RETAIN (Firmware_System_Control_Byte);
    #pragma LOCATION = firmware_control_address
    //此变量需要声明为"volatile"、以便 BlockLockLockROM_Patched 函数正常工作。 但是、可以更改分配。
    volatile const u08_t Firmware_System_Control_Byte = ROM_SENSOR_SUPPORT_DISABLED + ROM_EUSCI_SUPPORTING_ENABLED + NFC_BYTE_BLOCK + FIRST_ISO_PAGE;//0x7F、//此值设置固件系统控制寄存
    
    
    
    器#define PORT_I2C_OUT P1SDA #SCPORT_I2C_PAGE 0 #define PSEL1DIC_PAGE 0
    
    
    
    
    
    
    
    
    * define 1 #define 0 #define PSEI2C_CL1 #define 0 #define 1 SELTR1 #define 0 函数原型******** /
    void DeviceInit(void);
    //******** /
    
    
    #pragma RETAIN (PRxData);
    unsigned char * PRxData; //指向 RX 数据的指针
    #pragma RETAIN (RXByteCtr);
    unsigned char RXByteCtr;
    #pragma RETAIN (RxBuffer);
    volatile unsigned char RxBuffer[128]; //分配128字节的 RAM
    
    #pragma RETAIN (RxBufferTemp);
    volatile unsigned char RxBufferTemp; //分配128字节的 RAM
    
    void I2C_init (void);
    
    void main ()
    {
    WDTCTL = WDTPW + WDTHOLD; //停止看门狗
    //
    ///// ROM RF13M 模块设置**正确的射频堆栈操作需要以下三行
    // DS = 1;//此处需要初始化 ROM 变量
    // asm ("调用#0x5CDA ");//调用 ROM 函数(初始化函数指针)
    // asm ("调用#0x5CAC ");//调用 ROM 函数(检查器件配置)
    //
    
    initISO15693 (clear_block_lock);//清除所有块锁定
    //initISO15693 (0);//在 FRAM 中设置块锁定时保留块锁定
    
    //在此函数中将 JTAG 设置为禁用调用
    DeviceInit();
    
    //CopyFRAMtoNDEF();
    
    I2C_init();
    
    _bis_SR_register (GIE);
    
    while (1)
    {
    PRxData =(unsigned char *) RxBuffer;// RX 缓冲区开始
    RXByteCtr = 0; //清除 RX 字节计数
    _bis_SR_register (LPM3_bits + GIE);
    //_bis_SR_register ((SCG1+SCG0)+ GIE);
    
    }
    
    
    /
    *DeviceInit
    
    *
    *简介:初始化时钟系统和其他设置
    * patchable function
    *
    * param[in]:parameters:具有这些独立选项
    * Initialize_device_clock_system -初始化时钟系统
    * populate_interrupt_vector_in_initialization -填充默认中断矢量并重新计算其 CRC
    *
    param[out]:无
    *
    返回无
    *
    *可修补:是
    /
    
    void DeviceInit (void)
    {
    P1SEL0 = 0xF0;//保留 JTAG
    P1SEL1 = 0xF0;//保留 JTAG
    //P1SEL0 = 0x00;//无 JTAG
    //P1SEL1 = 0x00;//无 JTAG
    P1DIR &=~0xEF;
    P1REN = 0;
    
    CCSCTL0 = CCSKEY; //解锁 CCS
    
    CCSCTL1 = 0; //时钟速度不要减半
    CCSCTL4 = SELA_1 + SELM_0 + SELS_0; //为 ACLK 选择 VLO 并为 MCLK 和 SMCLK 选择 HFCLK/DCO
    CCSCTL5 = DIVA_2 + DIVM_1 + DIVS_1; //将 ACLK (4)、MCLK 和 SMCLK 的分频器设置为1
    CCSCTL6 = XTOFF; //如果不使用晶振、则将其旋转
    CCSCTL8 = ACLKREQEN + MCLKREQEN + SMCLKREQEN;//如果未使用时钟、则禁用时钟
    
    CCSCTL0_H |= 0xFF; //锁定 CCS
    
    返回;
    }
    
    
    
    void I2C_init (void)
    {
    ///ROM 设置 P1OUT = 0x0F、然后消耗一些电流
    // P1OUT = 0x00; //需要降低 RF430FRL152H EVM 的功耗、因为 P1.3连接到 EVM 上的2.2K 欧姆电阻接地
    
    //将 P1.0和 P1.1引脚配置为 I2C 模式
    // PORT_I2C_SEL0 |= SCL + SDA;
    // PORT_I2C_SEL1 &=~Ω(SCL + SDA);
    
    UCB0CTL1 |= UCSWRST;// eUSCI_B 处于复位状态
    UCB0CTLW0 |= UCMODE_3;// I2C 从模式
    UCB0I2COA0 = 0x30;//自身地址为12十六进制
    
    P1SEL0 |=(0x03);//配置 I2C 引脚(特定于器件)
    P1SEL1 &=~(0x03);//配置 I2C 引脚(特定于器件)
    
    UCB0CTL1 &=~UCSWRST;// eUSCI_B 处于运行状态
    // UCB0IE |= UCSTPIE + UCSTTIE; //启用 STT 和 STP 中断
    UCB0IE |= UCTXIE + UCRXIE;//启用 Tx&RX-INTERRUPT
    //UCB0IE |= UCTXIE;
    //GIE;
    _bis_SR_register (GIE);//常规中断使能
    
    return;
    }
    
    
    #pragma vector = RF13M_vector
    __interrupt void RF13M_ISR (void)
    {
    switch (__evo_in_range (UCB0IV、0x1E)){
    情况0x00://向量0:无中断
    中断;
    
    情况0x16://向量22:RXIFG0
    UCB0STAT &=~(UCSTPIFG + UCSTTIFG); //清除中断标志
    IF (RXByteCtr) //检查 RX 字节计数器
    // _BIC_SR_REGISTER_ON_EXIT (CPUOFF); //如果数据是,则退出 LPM0
    
    _BIC_SR_REGISTER_ON_EXIT (LPM0_Bits | GIE);//退出 LPM0
    
    
    
    中断;
    情况0x18://向量24:TXIFG0
    
    * PRxData++= UCB0RXBUF; //将 RX 数据移动到地址 PRxData
    RXByteCtr +; //增加 RX 字节计数
    
    
    中断;
    
    默认值:
    __no_operation(); //在此处设置断点<<并读取
    __no_operation(); //在此处设置断点<<并读取
    中断;
    }
    
    }
    

     

    
    

    主主机源代码:  我从 \slac485j\MSP430G2xx3_Code_examples\C\msp430g2xx3_uscib0_i2c_08.c 中选择了示例代码

    /*-版权所有-、BSD_EX
    *版权所有(c) 2012、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *
    ***
    *
    * MSP430代码示例免责声明
    *
    * MSP430代码示例是自包含的低级程序
    ,通常*以
    高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认
    值*寄存器值和时钟配置等设置、
    并且在组合多个示例中的代码时必须*小心以避免潜在的副作用
    *。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware
    *了解外设配置的 API 函数库方法。
    *
    *--/版权--*
    //*********
    // MSP430G2xx3演示- USCI_B0 I2C 主器件 TX 多个字节到 MSP430从器
    件//
    //说明:此演示通过 I2C 总线连接两个 MSP430。 主
    器件//发送到从器件。 这是主代码。 它持续
    //传输一组数据并演示如何使用
    USCI_B0 TX 中断实现发送多个字节的 I2C //主发送器。
    // ACLK = n/a、MCLK = SMCLK = BRCLK =默认 DCO =~1.2MHz
    //
    //***与"msp430g2xx3_uscib0_i2c_09.c"***
    //
    /|\/|\
    // MSP430G2xx3. 10k 10k MSP430G2xx3
    // 从器件 || 主器件
    // -------- |||---
    // -|XIN P3.1/UCB0SDA|-|--+->|P3.1/UCB0SDA XIN|-
    // | || | |
    // -|XOUT || | XOUT|-
    // | P3.2/UCB.S.|<---- >|P3.2/UCB.S. |
    // | | | |////
    
    D. Dang
    // Texas Instruments Inc.
    // 2011年2月
    //使用 CCS 版本4.2.0和 IAR Embedded Workbench 版本构建:5.10
    //*********
    #include 
    
    unsigned char * PTxData; //指向 TX 数据
    的指针 unsigned char TXByteCtr;
    const unsigned char TxData[]= //要发送
    的数据表{
    0x11、
    0x22、
    0x33、
    0x44、
    0x55
    };
    
    int main (void)
    {
    WDTCTL = WDTPW + WDTHOLD; //停止 WDT
    P1SEL |= BIT6 + BIT7; //将 I2C 引脚分配给 USCI_B0
    P1SEL2|= BIT6 + BIT7; //将 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 = 0x30; //从器件地址为048h
    UCB0CTL1 &=~UCSWRST; //清除 SW 复位,恢复操作
    IE2 |= UCB0TXIE; //启用 TX 中断
    
    while (1)
    {
    PTxData =(unsigned char *) TxData; // TX 数组起始地址
    TXByteCtr = TxData 的大小; //加载 TX 字节计数器
    while (UCB0CTL1 & UCTXSTP); //确保发送了停止条件
    UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX、启动条件
    _bis_SR_register (CPUOFF + GIE); //输入带中断的 LPM0
    //保持在 LPM0中直到所有数据
    //是发送
    的}
    }-->-----------------
    
    
    // USCIAB0TX_ISR 的结构使其可用于通过
    预加载带有字节计数的 TXByteCtr 来发送任何//字节数。 此外、TXData
    //指向要发送的下一个字节。
    ///----------------------------------
    #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 =* PTxData++; //加载 TX 缓冲区
    TXByteCtr --; //减量 TX 字节计数
    器}
    否则
    {
    UCB0CTL1 |= UCTXSTP; // I2C 停止条件
    IFG2 &=~UCB0TXIFG; //清除 USCI_B0 TX int 标志
    _BIC_SR_REGISTER_ON_EXIT (CPUOFF); //退出 LPM0
    }
    
    

    请检查初始化序列和中断处理。 请帮助您继续。  

    谢谢、

    AG

     

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

    我已经和我的团队讨论过这篇帖子以及前一篇帖子中您的应用要求。

    鉴于您希望使用 NDEF 消息格式、并且预计 NFC 数据可能来自主机 MCU 和 NFC 读取器设备、因此它们需要同步、以及对 FRAM 存储器的要求、RF430FRL15xH 并不适合您的系统。 尤其是在 RF430FRL15xH 甚至可以向主机 MCU 发出从读取器器器件接收 NFC 数据的警报时、仍有待观察。

    另一方面、与 FRAM MSP430主机 MCU 配对的 RF430CL330H 或 RF430CL331H 可提供更好的功能、因为它旨在在发生 NFC 通信时与主机 MCU 进行通信。 与 RF430FRL15xH 器件不同、专用 GPIO 可用于向 NFC 通信发出警报、以便同步主机 MCU 何时可以更改数据。 默认情况下、它还支持 NDEF 消息传递、而 RF430FRL15xH 器件通过删除其他器件功能(虚拟寄存器)来支持该消息传递。 最后、您可能需要考虑该解决方案的温度范围为-40至85°C、其中 RF430FRL152H 限制为0至70°C

    关于您的具体问题、直接的答案是我们没有现有的从属示例、也不会开发出从属示例。 如果没有这样的基准、这也意味着我们无法支持在从模式下使用 RF430FRL15xH 器件的代码调试。

    考虑到所有这些因素、如果您希望在系统中使用 RF430FRL15xH、您可以随意使用、但您需要了解我们的支持产品将非常有限。