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.

[参考译文] MSP430FR5043:从器件地址后无确认

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1049434/msp430fr5043-no-acknowledgement-after-slave-address

器件型号:MSP430FR5043
主题中讨论的其他器件: MSP-FET430UIFHDC2022

大家好、

我在 msp430fr5043中使用 I2C。 我尝试连接 AD5122A (数字电位器)。  

我选择的 SCLK 频率为100KHz。  AD5122A 的 ADDR0和 ADDR1连接到 GND、因此根据 AD5122A 的数据表、从器件地址为0101111。

在开始条件和从器件地址之后、我再发送两个字节来设置10K 欧姆的电位器为0x10、0x0D。

这里的问题是在启动条件 UCNACKIFG 被置位后。  

请找到以下代码。

#include <msp430.h> 


/**
 * main.c
 */

char array[] = {0x10,0x0D};
int cnt=0;

int main(void)
{
	WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
	
	// Software reset enable
    UCB1CTLW0 |= UCSWRST;

    // Clock source selection and SCLK speed
    UCB1CTLW0 |= UCSSEL__SMCLK;
    UCB1BRW = 10;

    //I2C Mode
    UCB1CTLW0 |= UCMODE_3;

    //Master mode
    UCB1CTLW0 |= UCMST;

    //Transmitter mode
    UCB1CTLW0 |= UCTR;

    //Slave address
    UCB1I2CSA = 0x5E;

    //Auto stop
    UCB1CTLW1 |= UCASTP_2;
    UCB1TBCNT = sizeof(array);

    // GPIO Initialization
    P5SEL0 &=~ BIT5;
    P5SEL1 |= BIT5;

    P5SEL0 &=~ BIT6;
    P5SEL1 |= BIT6;

    PM5CTL0 &=~ LOCKLPM5;

    //Disable software reset
    UCB1CTLW0 &=~ UCSWRST;

    //Enable interrupt
    UCB1IE |= UCTXIE0;
    __enable_interrupt();

    int i=0;

    while(1)
    {
        UCB1CTLW0 |= UCTXSTT;

        for(i=0;i<10;i++);

    }

    return 0;
}

#pragma vector = EUSCI_B1_VECTOR
__interrupt void EUSCI_B1_I2C_ISR(void)
{
    if(cnt == sizeof(array)-1)
    {
        UCB1TXBUF = array[cnt];
        cnt=0;
    }

    else
    {
        UCB1TXBUF = array[cnt];
        cnt++;
    }
}

 

我正在使用  

MSP430-FR5043微控制器

2. MSP430 USB 调试-用于编程的接口(MSP-FET430UIF)。

请指引我出错的地方。

谢谢、

Ashok。   

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

    >UCB1I2CSA = 0x5E;

    0b0101111为0x2F、因此请尝试:

    >UCB1I2CSA = 0x2F;

    ----------

    未经请求:在事务期间发出启动(UCTXSTT)将破坏事务(I2C 重复启动)。 在 while (1)循环中、您应该等待每个操作完成、然后再启动另一个操作。 这通常是在主()中使用"LPM0;"来完成的、当它确定事务已完成时(例如、当你设置 cnt=0时)、ISR 中的"LPM0_EXIT";与之匹配。  

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

    Bruce、您好!

    感谢您的回复。  

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1049434/msp430fr5043-no-acknowledgment-after-slave-address/3882819 #3882819"]0b0101111为0x2F、因此请尝试:

    我尝试了这种方法,但仍然没有解决。 并进行了以下更改。

    while (1)

    UCB1CTLW0 |= UCTXSTT;

    _DELAY_CYCLES (4);

    //输入 LPM4并启用中断
    _bis_SR_register (LPM0 + GIE);

    //用于调试器
    __no_operation();


    在 ISR 中:-  

    if (cnt =sizeof (array)-1)

    UCB1TXBUF =数组[cnt];
    CNT=0;
    _bis_SR_register (LPM0_EXIT + GIE);

    其他

    UCB1TXBUF =数组[cnt];
    CNT++;

    在调试中、在开始命令 UCNACKIFG 被置位后  

    谢谢、

    Ashok。

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

    >_bis_SR_register  (LPM0 + GIE);

    应该是这样

    >_bis_SR_register  (LPM0_bits + GIE);

    (或仅"LPM0;")

    ----------

    >_bis_SR_register (LPM0_EXIT + GIE);

    这应该是:

    >_BIC_SR_REGISTER_ON_EXIT (LPM0_Bits);

    (或仅"LPM0_EXIT";)

    --------

    如果您使用的是正确的 I2C 地址、我不确定会导致 NACK 的原因。 它是否发生在第一个事务的第一个字节上? (如果您有示波器、这通常很有帮助。)

    此外、AD5122A 安装在什么板上? 这是不是 ADI 公司的产品?

    --------

    更一般而言、我建议您阅读 TI 示例。 示例 map430fr6043_euscib0_i2c_10.c 不是完美的选择、但会显示一些常见做法:

    https://dev.ti.com/tirex/explore/node?node=AL26X3u7yNV4F76.1azaJQ__IOGqZri__LATEST

    --------

    未经请求:

    >__DELAY_CYCLES (4);

    我建议您删除这一行。 这里有一场比赛、这条线增加了遇到它的可能性。 (这不会导致 NACK、但最终会导致故障。)

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

    Bruce、您好!

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1049434/msp430fr5043-no-acknowledgment-after-slave-address/3882838 #3882838"]

    >_bis_SR_register  (LPM0 + GIE);

    应该是这样

    >_bis_SR_register  (LPM0_bits + GIE);

    (或仅"LPM0;")

    ----------

    >_bis_SR_register (LPM0_EXIT + GIE);

    这应该是:

    >_BIC_SR_REGISTER_ON_EXIT (LPM0_Bits);

    (或仅"LPM0_EXIT";)

    [/报价]

    我进行了更改并进行了测试、但问题未得到解决。  

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1049434/msp430fr5043-no-acknowledgment-after-slave-address/3882838 #3882838">如果您使用的是正确的 I2C 地址、我不确定是什么导致 NACK。 它是否发生在第一个事务的第一个字节上? (如果您有范围、这通常很有帮助。)

    我更改了代码、如下所述

    #include <msp430.h> 
    
    char array[] = {0x10,0x0D};
    int cnt=0;
    
    int main(void)
    {
    	WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
    	
    	// Software reset enable
        UCB1CTLW0 |= UCSWRST;
    
        // Clock source selection and SCLK speed
        UCB1CTLW0 |= UCSSEL__SMCLK;
        UCB1BRW = 10;
    
        //I2C Mode
        UCB1CTLW0 |= UCMODE_3;
    
        //Master mode
        UCB1CTLW0 |= UCMST;
    
        //Transmitter mode
        UCB1CTLW0 |= UCTR;
    
        //Slave address
        UCB1I2CSA = 0x5E;
    
        //Auto stop
        UCB1CTLW1 |= UCASTP_2;
        UCB1TBCNT = sizeof(array);
    
        // GPIO Initialization
        P5SEL0 &=~ BIT5;
        P5SEL1 |= BIT5;
    
        P5SEL0 &=~ BIT6;
        P5SEL1 |= BIT6;
    
        PM5CTL0 &=~ LOCKLPM5;
    
        //Disable software reset
        UCB1CTLW0 &=~ UCSWRST;
    
        //Enable interrupt
       // UCB1IE |= UCRXIE0 | UCTXIE0;
        //__enable_interrupt();
    
        int i=0;
    
        while(1)
        {
            UCB1CTLW0 |= UCTXSTT;
    
            if(UCB1IFG & UCNACKIFG)
            {
               // UCB1CTLW0 |= UCTXSTT;
            }
    
            else
            {
                if(UCB1IFG & UCTXIFG)
                {
                    if(cnt <= sizeof(array)-1)
                        {
                            UCB1TXBUF = array[cnt];
                            cnt++;
                        }
    
                }
            }
        }
    
         return 0;
    }
    
    

    我发现、在从器件地址之后、我没有得到任何确认。

    如果我将从器件地址指定为0x5e、那么示波器中显示为0xBC、其中不包含任何确认。

    SCL:  1   2   3   4   5   6   7   8 (r/w)   9 (ack)

    SDA:  1   0   1      1   1   0   0        1

    同样、当我给从地址0x2F 时、示波器中显示为0x5E、其中没有确认。

    SCL:  1   2   3   4   5   6   7   8 (r/w)   9 (ack)

    SDA:  0   1   0   1      1   1   0        1

    在起始条件之后、写入代码的从地址被左移1、并且由于写入、第0位被视为0。  

    但在这两种情况下、第九个时钟位都是1。 I2C 的初始化是否正确或我忘记了什么?

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1049434/msp430fr5043-no-acknowledgment-after-slave-address/3882838 #3882838">另外,AD5122A 安装在哪个主板上? 这是不是 ADI 公司的产品吗?[/引述]

    这是一款定制电路板、其中包括由模拟器件提供的 Msp430fr5043、AD5122 (数字电位器)。 I2C 总线上有三个从器件挂起、AD5122是从器件之一。

    请指引我出错的地方。

    谢谢、

    Ashok。  

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

    是否有可能/RESET (引脚2)被保持在低电平?

    您能否连接到总线上的其他 I2C 器件?

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

    Bruce、您好!

    [报价 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1049434/msp430fr5043-no-acknowledgment-after-slave-address/3884201 #3884201"]是否可能/复位(引脚2)保持低电平?[/quot]

    我不理解这个问题。

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1049434/msp430fr5043-no-acknowledgment-after-slave-address/3884201 #3884201"]您能否访问总线上的其他 I2C 器件?

    我尝试使用另一个 I2C 从设备 hdc2022、但仍然没有得到确认。  

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

    检查电路板的原理图、以查看 AD5122A 的/RESET 引脚(2或16、取决于封装)连接到了什么。 如果它被保持在低电平(GND)、我预计器件将不会响应。 如果您不使用此器件、数据表建议将其绑定到 Vlogic。

    如果您无法访问 I2C 总线上的任何(其他)器件、这听起来是电气的、因此请检查您的接线。

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

    Bruce、您好!

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1049434/msp430fr5043-no-acknowledgment-after-slave-address/3884818 #3884818">查看电路板原理图、了解 AD5122A 的/RESET 引脚(2或16、具体取决于封装)连接到什么。 如果它保持低电平(GND)、我希望器件不会响应。

     AD5122的 RESET 引脚连接到 Vcc。  

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1049434/msp430fr5043-no-acknowledgment-after-slave-address/3884818 #3884818"]如果无法访问 I2C 总线上的任何(其他)设备,这些设备听起来是电气设备,因此请检查您的接线。

    我将检查它。  

    谢谢、

    Ashok。

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

    您好、Lakkoji、

    此问题是否已解决?

    谢谢!

    此致

    Johnson  

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

    Bruce、您好!

    我验证了电路板、并且存在接线问题、这可能是未得到确认的原因。

    此外、我还使用另一个从器件进行了验证、它获得了确认。

    但问题是、我无法在示波器中看到 SCL 和 SDA 信号。

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

    您好、Johnson、

    是的、我在总线上尝试了另一个从器件、我获得了确认、但我无法看到 SCL 和 SDA。 即 SCL 始终为低电平、SDA 始终为高电平。

    I 将 AT24CM02的 EEPROM 与 MSP430 fr-5043连接。

    从机地址为1010 A2地址 adr16 r/w ->我写为0x50 (A2接地。)

    请检查以下代码

    #include <msp430.h> 
    #include"stdio.h"
    
    char array[]={0x00,0x00,0x12};
    char array_2[]={0x00,0x00};
    
    int cnt=0;
    
    int main(void)
    {
    	WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
    	
    
    	    CSCTL0_H = CSKEY_H;                                                 // Unlock CS registers
    	    CSCTL1 = DCOFSEL_3 | DCORSEL;                                       // Set DCO to 8MHz
    	    CSCTL2 = SELA__VLOCLK | SELS__DCOCLK | SELM__DCOCLK;
    	    CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1;                               // Set all dividers
    	    CSCTL0_H = 0;                                                       // Lock CS registers
    
    	// GPIO Initialization
    	    P5SEL0 &=~ BIT5;            // SDA
    	    P5SEL1 |= BIT5;
    
    	    P5SEL0 &=~ BIT6;            //SCL
    	    P5SEL1 |= BIT6;
    
    	    P5DIR |= BIT6;
    
    	    PM5CTL0 &=~ LOCKLPM5;
    
    	// Software reset enable
        UCB1CTLW0 |= UCSWRST;
    
        // Clock source selection and SCLK speed
        UCB1CTLW0 |= UCSSEL__SMCLK | UCSWRST;
        UCB1BRW = 160;
    
        //I2C Mode
        UCB1CTLW0 |= UCMODE_3;
    
        //SYNC
        UCB1CTLW0 |= UCSYNC;
    
        //Master mode
        UCB1CTLW0 |= UCMST;
    
        //Transmitter mode
        UCB1CTLW0 |= UCTR;
    
        //Slave address
        UCB1I2CSA = 0x50;     
    
        //Auto stop
        UCB1CTLW1 |= UCASTP_2;
        UCB1TBCNT = sizeof(array);
    
        //Disable software reset
        UCB1CTLW0 &=~ UCSWRST;
    
        //Enable interrupt
       // UCB1IE |= UCRXIE0 | UCTXIE0;
        //__enable_interrupt();
    
        int i=0;
    
        while(1)
        {
            UCB1CTLW0 |= UCTXSTT;
    
            if(UCB1IFG & UCNACKIFG)
                {
                   // UCB1CTLW0 |= UCTXSTP;
                }
    
            else
                {
                    while(cnt <= sizeof(array)-1)
                            {
                                while(!(UCB1IFG & UCTXIFG0));
                                UCB1TXBUF = array[cnt];
                                cnt++;
    
                            }
    
                        cnt=0;
                        __delay_cycles(8000000);
    
                        UCB1CTLW0 |= UCTR;
                        UCB1TBCNT = sizeof(array_2);
                        UCB1CTLW0 |= UCTXSTT;
    
    
                        while(cnt <= sizeof(array_2)-1)
                            {
                                 while(!(UCB1IFG & UCTXIFG0));
                                 UCB1TXBUF = array_2[cnt];
                                 cnt++;
    
                            }
                        UCB1CTLW0 &=~ UCTR;
                        UCB1TBCNT =1;
                        UCB1CTLW0 |= UCTXSTT;
                        while(!(UCB1IFG & UCRXIFG));
                        rcv = UCRXBUF;
    
                    }
    
    
            }
    
        
        return 0;
    }
    
    

    在调试过程中、我不会得到任何无 NACK 标志、并且在地址00 00000000 00000000处写入值= 0x01、但我无法看到 SDA 和 SCL、而且在从 EEPROM 读取数据时、我得到的是 oxff 而不是0x01。

    请指引我出错的地方。

    谢谢、

    Ashok。

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

    1) 1)如果 SCL 始终为低电平("拉伸")、则总线会挂起、因为主器件无法发出启动(或停止)命令。 这可能是由总线上的任何器件(包括主器件)引起的。 检查您的 SCL 上拉电阻(再次)并重启整个系统以将其清除。 (这种情况可能是由您之前的一些实验触发的。)

    2) UCB1TBCNT 只能在 I2C 处于复位状态时进行更改(UCSWRST=1)[参考用户指南(SLAU367P)表32-8]。 是的、这有点麻烦。 这意味着您的第二次(共3次)事务将地址指针保留在0x0001上、但您只写入了地址0x0000。 (EEPROM 最初填充为0xFF。)

    3) 3) UCNACKIFG 不会在您检查时就置1、因为 I2C 单元没有时间发送地址字节。 根据 UG (图32-12)、只有在您第一次写入 TXBUF 后、才会将其置1。  (我认为我之前看过它、但没有太多。)

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

    Bruce、您好!

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1049434/msp430fr5043-no-acknowledgment-after-slave-address/3886491 #3886491"]检查 SCL 上拉电阻(再次)并重启整个系统以将其清除。 (这种情况可能是由您之前的一些实验触发的。)

    根据 at24cm02上拉电阻、SCL 上拉电阻为4.7k Ω、最大为10k Ω。 什么是对整个系统进行循环通电以将其清除? 我重置板、刷写另一个切换引脚的代码并重新刷写 i2c 代码、但所有这些都不能解决问题。

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1049434/msp430fr5043-no-acknowledgment-after-slave-address/3886491 #3886491"]只有在 I2C 处于复位状态时才能更改 UCB1TBCNT (UCSWRST=1)[参考用户指南(SLAU367P)表32-8]。 是的、这有点麻烦。 [/报价]

    根据您的建议完成、但问题未解决。

    ----------------------------------------------------------------------

    在 I2C 初始化之后(清除软件复位后) UCBUSY 被置位并且包括(UCTXIFG)在内的所有标志都为零。  

    SCL 和 SDA 为高电平。  

    完成该帖子  

    https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/625641/msp430f5529-i2c-stuck-waiting-for-uctxifg

    我修改了代码并进行了测试  

    #include <msp430.h> 
    #include"stdio.h"
    
    char array[]={0x00,0x01,0x04};
    char array_2[]={0x00,0x01};
    char rcv=0;
    char uart[5]={0};
    
    int cnt=0,i=0;
    
    void toggle_busy()
    {
       // UCB1CTLW0 |= UCTXSTP;
    
        P5SEL0 = 0X00;
        P5SEL1 = 0x00;
    
        P5REN |= 0X60;
    
        P5DIR |= 0X60;
    
        P5OUT |= 0X60;
    
        for(i=0;i<10;i++)
        {
            P5OUT &=~ 0x60;
            __delay_cycles(1000000);
            P5OUT |= 0x60;
            __delay_cycles(1000000);
        }
    
        // GPIO Initialization
    
            P5REN &=~ 0X60;
    
            P5DIR &=~ 0X60;
    
            P5SEL0 &=~ BIT5;            // SDA
            P5SEL1 |= BIT5;
    
            P5SEL0 &=~ BIT6;            //SCL
            P5SEL1 |= BIT6;
    
            //UCB1CTLW0 |= UCTXSTT;
            if(UCB1STATW & UCBBUSY)
            {
                toggle_busy();
            }
    }
    
    int main(void)
    {
    	WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
    	
    
    	    CSCTL0_H = CSKEY_H;                                                 // Unlock CS registers
    	    CSCTL1 = DCOFSEL_0 | DCORSEL;                                       // Set DCO to 1MHz
    	    CSCTL2 = SELA__VLOCLK | SELS__DCOCLK | SELM__DCOCLK;
    	    CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1;                               // Set all dividers
    	    CSCTL0_H = 0;                                                       // Lock CS registers
    
    
    	    //------------------------------------------CHANGES MADE HERE -----------------------------------------//
    //	    P5SEL0 &=~ 0X60;
    //	    P5SEL1 &=~ 0X60;
    
    	    P5SEL0 &=~ BIT5;
    	    P5SEL1 &=~ BIT5;
    
    	    P5SEL0 &=~ BIT6;
    	    P5SEL1 &=~ BIT6;
    
    
    	    P5REN |= BIT6;
    	    P5REN |= BIT5;
    
    	    P5DIR |= BIT5;
    	    P5DIR |= BIT6;
    
    	    P5OUT |= BIT6;
    	    P5OUT |= BIT5;
    
    
    	    //-------------------------------------------CHANGES END HERE-----------------------------------------//
    
    	// Software reset enable
        UCB1CTLW0 |= UCSWRST;
    
        // Clock source selection and SCLK speed
        UCB1CTLW0 |= UCSSEL__SMCLK | UCSWRST;
        UCB1BRW = 10;
    
        //I2C Mode
        UCB1CTLW0 |= UCMODE_3;
    
        //SYNC
        UCB1CTLW0 |= UCSYNC;
    
        //Master mode
        UCB1CTLW0 |= UCMST;
    
        //Transmitter mode
        UCB1CTLW0 |= UCTR;
    
        //Single master
        UCB1CTLW0 &=~ UCMM;
    
        //Slave address
        UCB1I2CSA = 0x50;     //0x23 or 0x2f for pot and 0x50 for eeprom ;
    
        //Auto stop
        UCB1CTLW1 |= UCASTP_2;
        UCB1TBCNT = sizeof(array);
    
        //Disable software reset
            UCB1CTLW0 &=~ UCSWRST;
    
            // GPIO Initialization
    
                    P5REN &=~ BIT6;
                    P5REN &=~ BIT5;
    
                    P5DIR &=~ BIT5;
                    P5DIR &=~ BIT6;
    
                    P5OUT &=~ BIT6;
                    P5OUT &=~ BIT5;
    
                    P5SEL0 &=~ BIT5;
                    P5SEL1 |= BIT5;
    
                    P5SEL0 &=~ BIT6;
                    P5SEL1 |= BIT6;
    
    
    
            if(UCB1STATW & UCBBUSY)
                  {
                      toggle_busy();
                  }
    
    
        while(1)
        {
               // UCB1CTLW0 |= UCTXSTP;
                UCB1CTLW0 |= UCTXSTT;
    
    
    
                if(UCB1IFG & UCNACKIFG)
                {
                   // UCB1CTLW0 |= UCTXSTP;
                }
    
    
                else
                {
    2               // UCB1CTLW0 |= UCTXSTP;
    
    
                        while(cnt <= sizeof(array)-1)
                            {
                                while(!(UCB1IFG & UCTXIFG0));
                                UCB1TXBUF = array[cnt];
                                cnt++;
    
                            }
    
                       // UCB1CTLW0 |= UCTXSTP;
                        cnt=0;
                        __delay_cycles(8000000);
    
                }
    
    
            }
    
        return 0;
    }
    
    

    在我的案例中、UCBBUSY 仍然不清楚。

    请指导我。

    谢谢、

    Ashok

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

    您好、Ashok、

    此线程是否已解决或需要其他支持?  

    谢谢!

    此致

    Johnson