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/MSP430FR2310:I2C 在400kHz 频率下由 SMCLK 提供、MSP430是主器件

Guru**** 2620655 points

Other Parts Discussed in Thread: MSP430FR2310

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/674983/ccs-msp430fr2310-i2c-at-400-khz-sourced-from-smclk-msp430-is-master

器件型号:MSP430FR2310
主题中讨论的其他器件:MSPWARE

工具/软件:Code Composer Studio

您好!

我认为这是一项非常简单的任务,现在已经把一个项目推迟了两个星期,虽然我认为我已经查明了问题,但我希望得到专家的建议。

MSP430在系统启动时用于单个任务。 它会延迟30秒、然后在400kHz 频率下以0x33向 I2C 从设备发送0x1F。 就是这样。

我已经阅读了时钟系统和用户手册的 i2c 部分、不认为我缺少任何东西、并查看了代码示例[此处]。  

我尽量靠近示例。 我的方法如下:

首先、我跟随其中一个示例 msp430fr231x_CS_01.c   "将 MCLK 配置为8MHz、源自 DCO。" 将 DCO 设置为2.4kHz (尽管我不确定它不是2kHz)

然后、我使用 CSCTL5将 MCLK 设置为2.4MHz、并将 SMCLK 设置为400kHz。 接下来、我配置 I2C 引脚、然后为了测试目的、每3秒发送0x1F 至0x33。

我复制并粘贴了示例中的中断处理和修整函数、并修改了一些参数。

我已经验证了 SCL 信号是否与示波器一起存在、但除了从器件制造商提供的测试工具之外、我还使用了总相位的"aardvark "i2c 测试器件、两者都无法实际识别正在发送的信息。 以下代码是否与任务匹配? 上面的描述中是否有任何内容暗示了另一个错误?

提前感谢、

#include 


void Software_Trim (); //获取最佳 DCOFTRIM 值
的软件调整 unsigned char TXData =0x1F;
unsigned char TXByteCtr;

#define MCLK_FREQ_MHz 2.4 // MCLK = 2.4MHz


int main (void)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

_bis_SR_register (SCG0); //禁用 FLL
CSCTL3 |= SELREF_REFOCLK; //将 REFO 设置为 FLL 基准源
CSCTL1 = DCOFTRIMEN_1 | DCOFTRIM0 | DCOFTRIM1 | DCORSEL_3;// DCOFTRIM = 3、DCO 范围= 2.4MHz
CSCTL2 = FLLD_0 + 243; // DCODIV = 2.4MHz
_DELAY_CYCLES (3);
_BIC_SR_register (SCG0); //启用 FLL
Software_Trim (); //软件调整以获得最佳 DCOFTRIM 值


CSCTL4 = SELMS_DCOCLKDIV | SELA_REFOCLK;//将默认 REFO (~32768Hz)设置为 ACLK 源、ACLK = 32768Hz
//默认 DCODIV 为 MCLK 和 SMCLK 源

CSCTL5 |= DIVM_0 | DIVS_3; // MCLK = XT1CLK = 2.4MHZ、
// SMCLK = MCLK/2 = 0.4MHz = 400kHz

//配置 I2C 引脚
P1SEL0 |= BIT2 | BIT3; //I2C 引脚

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

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

while (1){
//延迟3秒
_DELAY_CYCLES (300000);//30000000

//所有4根天线的部署算法1
UCB0I2CSA = 0x33; //将从地址配置为0x33
TXByteCtr = 2; //加载 TX 字节计数器
while (UCB0CTLW0和 UCTXSTP); //确保发送了停止条件
UCB0CTLW0 |= UCTR | UCTXSTT; // I2C TX、启动条件

_bis_SR_register (LPM0_bits | GIE); //输入带中断的 LPM0
}
//返回0;
}

#if defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__)
#pragma vector = USCI_B0_vector
__interrupt void USCIB0_ISR (void)
#Elif defined (__GNU__)
#void __attribute__(interrupt (USCI_B0_ISR

)#vector (void USCIB0_ISR!)#USCIB0 Compiler!
#endif
{
switch (__even_in_range (UCB0IV、USCI_I2C_UCBIT9IFG))
}
USCI_NONE 案例:中断; //向量0:无中断
USCI_I2C_UCALIFG 案例:中断; //向量2:ALIFG
案例 USCI_I2C_UCNACKIFG:中断; //向量4:NACKIFG
案例 USCI_I2C_UCSTTIFG:中断; //向量6:STTIFG
USCI_I2C_UCSTPIFG 案例: //向量8:STPIFG
TXData = 0;
UCB0IFG &=~UCSTPIFG; //清除停止条件 int 标志
中断;
USCI_I2C_UCRXIFG3案例:中断; //向量10:RXIFG3
USCI_I2C_UCTXIFG3案例:中断; //向量14:TXIFG3
USCI_I2C_UCRXIFG2案例:中断; //向量16:RXIFG2
USCI_I2C_UCTXIFG2案例:中断; //向量18:TXIFG2
USCI_I2C_UCRXIFG1案例:中断; //向量20:RXIFG1
USCI_I2C_UCTXIFG1案例:中断; //向量22:TXIFG1
案例 USCI_I2C_UCRXIFG0:中断; //向量24:RXIFG0
USCI_I2C_UCTXIFG0案例:
UCB0TXBUF = TXData++;
中断; //向量26:TXIFG0
案例 USCI_I2C_UCBCNTIFG:break; //向量28:BCNTIFG
USCI_I2C_UCCLTOIFG 案例:中断; //向量30:时钟低电平超时
USCI_I2C_UCBIT9IFG 案例:中断; //向量32:第9位
默认值:break;
}


void Software_Trim ()
{
unsigned int oldDcotTap = 0xFFFF;
unsigned int newDcoTap = 0xFFFF;
unsigned int newDcoDelta = 0xFFFF;
unsigned int bestDcoDelta = 0xFFFF;
unsigned int csCtl0Copy = 0;
unsigned int csCtl1Copy = 0;
无符号 int csCtl0Read = 0;
无符号 int csCtl1Read = 0;
unsigned int dcoFreqTrim = 3;
unsigned char endLoop = 0;

操作
{
CSCTL0 = 0x100; // DCO 抽头= 256
操作
{
CSCTL7 &=~DCOFFG; //清除 DCO 故障标志
} while (CSCTL7 & DCOFFG); //测试 DCO 故障标志

__DELAY_CYCLLES ((unsigned int) 3000 * MCLK_FREQ_MHz);//等待 FLL 锁定状态(FLLUNLOCK)保持稳定
//建议等待24个经过分频的 FLL 参考时钟周期
while (((CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1))和&((CSCTL7 & DCOFFG)= 0));

CSCCtl0Read = CSCTL0; //读取 CSCTL0
CSCCtl1Read = CSCTL1; //读取 CSCTL1

oldDcoTap = newDcoTap; //记录上次的 DCOTAP 值
NewDcoTap = csCtl0Read & 0x01ff; //获取此次的 DCOTAP 值
dcoFreqTrim =(csCtl1Read & 0x0070)>>4;//获取 DCOFTRIM 值

if (newDcoTap < 256) // DCOTAP < 256
{
newDcoDelta = 256 - newDcoTap; // DCPTAP 和256之间的增量值
if ((oldDcotap!= 0xFFFF)&&(oldDcotap >= 256)// DCOTAP 交叉256
endLoop = 1; //停止 while 循环
其他
{
dcoFreqTrim --;
CSCTL1 =(csCtl1Read &(~DCOFTRIM))|(dcoFreqTrim<4);
}
}
其他 // DCOTAP >= 256
{
newDcoDelta = newDcoTap - 256; // DCPTAP 和256之间的增量值
if (oldDcoTap < 256) // DCOTAP 交叉256
endLoop = 1; //停止 while 循环
其他
{
dcoFreqTrim++;
CSCTL1 =(csCtl1Read &(~DCOFTRIM))|(dcoFreqTrim<4);
}
}

if (newDcoDelta < bestDcoDelta) //记录最接近256的 DCOTAP
{
csCtl0Copy = csCtl0Read;
csCtl1Copy = csCtl1Read;
bestDcoDelta = newDcoDelta;
}

}while (endLoop =0); //轮询直至 endLoop = 1

CSCTL0 = csCtl0Copy; //重新加载锁定的 DCOTAP
CSCTL1 = csCtl1Copy; //重新加载锁定的 DCOFTRIM
while (CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1));//轮询直到 FLL 被锁定
}

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

    对于您尝试的操作、不需要软件调整。 您只需启动 MCLK 并以8MHz 的频率运行即可。 您不在乎它是否不完美。 由于您将是 I2C 主设备、因此 SCL 时钟将基于来自 MCLK 的 SMCLK。 您应该能够实现400kHz、即使它不完全是400kHz、您正在与之通信的从器件也不会受到影响。

    让我来看看我是否能提出一个更好的例子来准确地完成你正在尝试的事情。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dennis:

    感谢您的快速回答:这消除了几种可能的错误来源。 考虑到上述情况、从器件配置为从器件时、从器件的制造商是否有任何理由声明"时钟速度为400kHz"? 我随函附上了以下数据表的摘录:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为了确保时钟速度、您可以在 P1.0上放置 SMCLK OUT 或在 P2.6上放置 MCLK OUT 并使用示波器进行检查。 [SLASE58C 表6-43、6-44]。
    是否确定 SoftwareTrim()正在完成? 尝试删除呼叫、因为(与 Dennis Lehman 一起)我怀疑呼叫是多余的。
    假设您已实现2.4MHz、

    > CSCTL5 |= DIVM_0 | DIVS_3; // MCLK = XT1CLK = 2.4MHZ、
    > UCB0BRW = 0x8; //波特率= SMCLK /8

    这会将 DCODIV 除以8 -> SMCLK、然后再除以8、从而使 I2C 时钟频率为37.5kHz。
    尽管如此、我的观察结果(以及 Dennis Lehman 的观察结果)是 I2C 从设备相当宽容慢时钟;我认为"时钟速度为400kHz"是措辞不好的。
    --------------
    > UCB0IE |= UCTXIE0 | UCNACKIE; //发送和 NACK 中断使能
    您正在启用 NACKIFG、但不检查它。 是否确定从器件正在堆栈地址字节?
    --------------
    > TXByteCtr = 2; //加载 TX 字节计数器
    此字节计数已设置、但实际上从未检查。 (也应为"易失性"。) 此代码将循环执行 ISR、永久地向从器件发送数据。
    [另请参见 SLAU45G 图23-12。 此图中实际上有很多有用的信息。]
    --------------
    >_bis_SR_register (LPM0_bits | GIE); //输入带中断的 LPM0
    这会将处理器置于睡眠状态、但 ISR 中没有相应的唤醒("LPM0_EXIT")、因此 main 将在这里永久停止。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Brendan、

    我获取了 MSP430FR2310的时钟和 I2C 示例、这些示例是 MSPWARE 驱动程序库的一部分、并将它们拼接在一起、然后设置相应的寄存器以生成400kHz。

    我使用逻辑探头检查以确认 MCLK 为8MHz、I2C 为400kHz。 您应该能够根据自己的需求进行此操作和修改。

    #include

    unsigned char TXData[]={1、2、3、4、5、6、7、8、9}; //指向 TX 数据的指针
    volatile unsigned char RXData;
    unsigned char DataLength = sizeof (TXData);
    unsigned char TXByteCtr;
    unsigned char SlaveFlag = 0;
    /**
    * main.c
    *
    int main (空)

    WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器

    _bis_SR_register (SCG0); //禁用 FLL
    CSCTL3 |= SELREF_REFOCLK; //将 REFO 设置为 FLL 基准源
    CSCTL1 = DCOFTRIMEN_1 | DCOFTRIM0 | DCOFTRIM1 | DCORSEL_3;// DCOFTRIM = 3、DCO 范围= 8MHz
    CSCTL2 = FLLD_0 + 243; // DCODIV = 8MHz
    _DELAY_CYCLES (3);
    _BIC_SR_register (SCG0); //启用 FLL

    CSCTL4 = SELMS_DCOCLKDIV | SELA_REFOCLK;//将默认 REFO (~32768Hz)设置为 ACLK 源、ACLK = 32768Hz
    //默认 DCODIV 为 MCLK 和 SMCLK 源

    CSCTL5 = DIVS__4; //将 SMCLK 缩放到2MHz

    P1OUT = 0;
    P1DIR = 0xff;

    P2OUT = 0;
    P2DIR = 0xff;

    #if 0
    //如果使用默认 I2C 引脚
    P1SEL0 =(BIT2 | BIT3);
    P1SEL1 = 0;
    其他
    //映射到备用引脚
    P2SEL0 =(BIT4 | BIT5);
    P2SEL1 = 0;
    SYSCFG2 |= USCIBRMP;
    #endif

    // TODO:要验证 SMCLK、请在引脚 P1.1上启用其输出
    //P1SEL1 =(BIT0);


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

    //将 USCI_B0配置为 I2C 模式
    UCB0CTLW0 |= UCSWRST; //将 eUSCI_B 置于复位状态
    UCB0CTLW0 |= UCMODE_3 | UCMST; // I2C 主控模式、SMCLK
    UCB0BRW=5; //波特率= SMCLK / 5 = 400kHz
    UCB0I2CSA = 0xA0; //配置从地址
    UCB0CTLW0 &=~ UCSWRST; //清除复位寄存器
    UCB0IE |= UCTXIE0 | UCNACKIE; //发送和 NACK 中断使能


    _enable_interrupt ();

    while (1)

    _delay_cycles (10000); //传输之间的延迟

    TXByteCtr =数据长度; //加载 TX 字节计数器

    while (UCB0CTLW0和 UCTXSTP); //确保发送了停止条件

    UCB0CTLW0 |= 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_B0_vector
    _interrupt void USCIB0_ISR (void)
    #Elif defined (_GNU_)
    void __attribute__((中断(USCI_B0_vector)) USCIB0_ISR (void)
    其他
    错误编译器不受支持!
    #endif

    开关(__evo_in_range (UCB0IV、USCI_I2C_UCBIT9IFG))

    USCI_NONE 案例:中断; //向量0:无中断中断;
    USCI_I2C_UCALIFG 案例:中断;
    USCI_I2C_UCNACKIFG 案例:
    UCB0CTL1 |= UCTXSTT; //重新发送启动(如果 NACK)
    中断; //向量4:NACKIFG 中断;
    案例 USCI_I2C_UCSTTIFG:中断; //向量6:STTIFG 中断;
    案例 USCI_I2C_UCSTPIFG:中断; //向量8:STPIFG 中断;
    USCI_I2C_UCRXIFG3案例:中断; //向量10:RXIFG3中断;
    USCI_I2C_UCTXIFG3案例:中断; //向量14:TXIFG3中断;
    USCI_I2C_UCRXIFG2案例:中断; //向量16:RXIFG2 break;
    USCI_I2C_UCTXIFG2案例:中断; //向量18:TXIFG2中断;
    USCI_I2C_UCRXIFG1案例:中断; //向量20:RXIFG1 break;
    USCI_I2C_UCTXIFG1案例:中断; //向量22:TXIFG1中断;
    案例 USCI_I2C_UCRXIFG0:中断; //向量24:RXIFG0中断;
    USCI_I2C_UCTXIFG0案例:
    IF (TXByteCtr) //检查 TX 字节计数器

    UCB0TXBUF = TXData[0]; //加载 TX 缓冲区
    TXByteCtr --; //测量 TX 字节计数器

    其他

    UCB0CTLW0 |= UCTXSTP; // I2C 停止条件
    UCB0IFG &=~UCTXIFG; //清除 USCI_B0 TX int 标志
    _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS); //退出 LPM0

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

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

    感谢 Dennis、I2C 工作正常、尽管出于某种原因、我必须将 while 环路中的延迟增加10倍、然后从设备才能读取任何内容。 但是、这不是问题、因为我们有30秒的延迟、我将附上我用于将来访问此主题的任何人参考的代码

    //MSP430 UHF 天线部署代码、适用于 Phoenix Cubesat 接口板
    
    #include 
    
    //unsigned char TXData[]={1、2、3、4、5、6、7、8、9};//指向 TX 数据
    的指针 unsigned char TXData[]={0x1F};//指向 TX 数据
    的指针 unsigned char RXData;
    unsigned char DataLength = sizeof (TXData);
    unsigned char TXByteCtr;
    WDchar SlaveFlag = 0;
    // unsigned char
    
    
    
    
    DTPW = 0;// main = 0;//* dTPW = void Wt = 0;* dTchar ( //停止看门狗计时器
    
    _bis_SR_register (SCG0);//禁用 FLL
    CSCTL3 |= SELREF_REFOLCLK;//将 REFO 设置为 FLL 基准源
    CSCTL1 = DCOFTRIMEN_1 | DCOFTRIM0 | DCOFTRIM1 | DCORSEL_3
    
    = DCOCL3;_ DCOFTRIM_3 = DCODCO = DCOTR0;DCO = DCOTRL_3;DCO = DCOREDCO_3 = DCOREDCO0MHz;DC_3 = DCOREDCOLD_3;DC_0MHz = DCOTRIN3 = DCOREDCOREDCOLD_3;
    //启用 FLL
    
    CSCTL4 = SELMS_DCOCLKDIV | SELA_REFOCLK;//将默认 REFO (~
    
    
    
    
    OUT 32768Hz)设置为 ACLK 源,ACLK = 32768Hz //默认 DCODIV 为 MCLK 和 SMCLK 源 CSCTL5 = DIVS__4;//将
    P2DIR
    
    = 0x1MHz / DIR 设置为0x2MHz;/缩小= 0xP2CLK;//= 0xP2CLK;/缩小
    
    
    //#if 0
    //如果使用默认的 I2C 引脚
    P1SEL0 =(BIT2 | BIT3);
    P1SEL1 = 0;
    //#else
    //映射到备用引脚
    // P2SEL0 =(BIT4 | BIT5);
    //P2SEL1 = 0;
    //SYSCFG2 |= USCIBRMP
    
    
    
    = USC1PM/ TOCL1;//验证其输出://
    
    
    PM5CTL0 &=~LOCKLPM5;//禁用 GPIO 上电默认高阻抗模式
    //激活先前配置的端口设置
    
    //将 USCI_B0配置为 I2C 模式
    UCB0CTLW0 |= UCSWRST;//将 eUSCI_B 置于复位状态
    UCB0CTLW0 |= UCB0CTLW0 | UCMODE | UCSWRST 模式;//将 eUSCI_B 置于复位状态 UCB0CTLW3
    | UCB0 = UCB0;UCB0 = UCB0 = UCLK = UCMOW3 //波特率= SMCLK / 5 = 400kHz
    UCB0I2CSA = 0x33;//配置从器件地址
    UCB0CTLW0 &=~
    
    
    
    
    
    
    
    ~UCSWRST;//清除复位寄存器 UCB0IE |= UCTXIE0 | UCNACKIE;//发送和 NACK 中断使能__ENABLE_INTERRUPT ();//清除复位寄存器 UCB0IE |= 24242424242424242430s ();
    
    
    
    
    // TX242424242424242424242424Ctr =/(2424242424242424242430s)/(24242424242424242424242424 //
    
    在(UCB0CTLW0和 UCTXSTP)期间加载 TX 字节计数器;//确保停止条件已发送
    
    UCB0CTLW0 |= UCTR | UCTXSTT;// I2C TX,开始条件
    
    __bis_SR_register (LPM0_bits | GIE);//输入 LPM0,带中断
    //保持在所有
    
    
    
    
    
    时间周期内;// TX324TXTCTR = 24个数据周期;//直到数据长度= 24个周期;//
    while (UCB0CTLW0 & UCTXSTP);
    UCB0CTLW0 |= UCTR | UCTXSTT;
    __bis_SR_register (LPM0_Bits | GIE);
    
    
    //TX third and last time
    __delay_cycles (243243245);
    TXByteCtr = DataLength;
    while (UCB0CTXST_bis 和 UCTX0
    
    | UCTLW0_BUCTST_UCTR | UCTX0 | UCTSTPTE_UCTST_0 | UCTLW0_BUCTR | UCTG0 | UCTSTCTG0
    //}
    
    #if
    
    defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__)
    #pragma vector = USCI_B0_vector
    __interrupt void USCIB0_ISR (void)
    #Elif defined (__GNU__)
    void __attribute__((interrupt (USCI_B0_ISR) void
    
    )#USCIB0 vector!
    #endif
    {
    switch (__even_in_range (UCB0IV、USCI_I2C_UCBIT9IFG))
    {
    case USCI_none:break;//向量0:no interrupts break;
    case USCI_I2C_UCALIFG:break;
    case USCI_I2C_UCCIFG:
    UCB0CTL1_中断;
    
    case USCI_CCIFG:USCI_中断/ UCCIFG;case 4:中断/中断/中断
    
    //向量10:RXIFG3中断;
    案例 USCI_I2C_UCTXIFG3:中断;//向量14:TXIFG3中断;
    案例 USCI_I2C_UCRXIFG2:中断;//向量16:RXIFG2中断;
    案例 USCI_I2C_UCTXIFG2:中断;//向量18:TXIFG2中断;
    案例 USCI_USCI_USCI_UCRXG1;案例 TXIFG 中断;案例 USCI_USCI_USCI_USCI_USCI_UCR20:中断;案例 RXIFG 中断;案例 USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_U
    
    //向量24:RXIFG0 break;
    case USCI_I2C_UCTXIFG0:
    if (TXByteCtr)//检查 TX 字节计数
    器{
    UCB0TXBUF = TXData[0];//加载 TX 缓冲区
    TXByteCtr -;//减量 TX 字节计数
    器}
    else
    {
    UCB0CTLW0 |= TXData[0];//加载 TXBUCTI_BIC_FLAG
    = UCT0TXC0 ~;//清除 UCT_BIC_TXIFG 条件
    = UCT0_0;// UCT0TXCK_FLAG = UCT0_= UCT0_= UCCT_B0;// WIT_TOP_ENSE = UCT0_TOP_ //退出 LPM0
    }
    中断;//向量26:TXIFG0中断;
    案例 USCI_I2C_UCBCNTIFG:中断;//向量28:BCNTIFG
    案例 USCI_I2C_UCCLTOIFG:中断;//向量30:时钟低超时
    案例 USCI_I2C_UCBIT9IFG:中断;//
    默认向量32:中断
    }