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.

[参考译文] RF430FRL152H:计时器和 NFC 使能、RF430FRL152H 崩溃

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1384689/rf430frl152h-timer-and-nfc-enable-rf430frl152h-crashes

器件型号:RF430FRL152H
主题中讨论的其他器件:MSP430L092

工具与软件:

你(们)好、

我们使用 NFC 示例代码:RF430FRL15xH_projects_v1_5\RF430FRL15xH NFC projects\RF430FRL152H

修改了示例代码以启用 TIMER_A0 和 ISR 对数字进行计数。

    CCSCTL4 = SELA_1 + SELM_0 + SELS_0;      // Select VLO for ACLK and select HFCLK/DCO for MCLK, and SMCLK
    CCSCTL5 = DIVA_2 + DIVM_1 + DIVS_1;      // Set the Dividers for ACLK (4), MCLK, and SMCLK to 1
    CCSCTL6 = XTOFF;                         // Turns of the crystal if it is not being used
    CCSCTL8 = ACLKREQEN + MCLKREQEN + SMCLKREQEN; //disable clocks if they are not being used
    TA0CCTL0 = CCIE;                        // Timer A0 Capture/compare interrupt enable
    TA0CTL = TASSEL__ACLK +                 // Timer_A clock source select -> ACLK
                 MC_1 +                     // Mode control, Timer counts up to the value stored in TA0CCR0
                 ID_3;                      // divide 8

	TA0CCR0 = 2000; 

#pragma vector = TIMER0_A0_VECTOR
__interrupt void TimerA0_ISR(void)
{
    nfc_sys_data.timerCnt += 1;

	if(nfc_sys_data.timerCnt >= 1500) {	
		nfc_sys_data.timerCnt = 0;
    }

}

并且、手机通过 NFC 联系 RF430FRL152H。  

测试场景:移动触点持续60秒、然后 反复关闭 RF430FRL152H 30秒。 (一个循环为90秒)。


该图显示了 RF430FRL152H 的电流。

当移动设备接触 RF430FRL152H 时、电流下降60秒  

当移动设备关闭 RF430FRL152H 时、电流上升30秒  

测试13小时后崩溃。

如果我遗漏了什么内容、请提供帮助。

代码已附加。

e2e.ti.com/.../main_5F00_0708_5F00_NFC_5F00_sample_5F00_timer_5F00_.c

 由于 TI 网站上传、lnk_rf430frl152h_nf_only .cmd 被重命名为 lnk_rf430frl152h_nf_only .cmd.c。

e2e.ti.com/.../lnk_5F00_rf430frl152h_5F00_NFC_5F00_Only.cmd.c

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

    您好!

     13小时意味着接近520个循环。 我不知道失败的原因。 如果13个小时后出现故障、我不会认为这是软件问题。 您能做几个实验吗?  

     您可以在同一块电路板上再次重复相同的测试吗? 测试数小时后是否始终失败?  

     如果您只使用了没有添加任何代码的示例、您是否看到了故障?

     您是否需要测试另一个电路板? 您可以在另一块电路板上重复相同的故障吗?

     您能否进行 ABA 交换测试? 换用新装置。 您能重复同样的失败吗?  

     您能否在 RF430FRL152HEVM 电路板上重复相同的故障。 我想您的定制电路板上出现了故障、对吧?  

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

    尊敬的 Charles:

    感谢您的答复。

    我们做了一些测试。

    1.在同一块电路板上运行数小时后、它始终会出现故障

    2.两个不同的板在几个小时后就会崩溃。

    3.只运行示例代码(NFC 示例代码:RF430FRL15xH_projects_v1_5\RF430FRL15xH NFC projects\RF430FRL152H)即可运行良好

    但是、如果启用  TIMER_A0、则系统会失败。

    使用计时器对 NFC 有任何限制吗?

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

    Chris、您好!

     我目前不在办公室。 我将在下周三回来时回答您的问题。  

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

    Chris、您好!

     很抱歉我刚刚回来、耽误了时间。  

     您能详细说明一下崩溃情况吗? 如果通过调试器连接到器件、那么处理器位于哪一行代码? 我真的不明白启用计时器会使器件崩溃的原因。 如果您将计时器周期更改为更大或更小的值、这是否会使崩溃在稍后或更早发生?  

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

    尊敬的 Charles:

    感谢您的答复。

    我们只需应用其他时钟源(高频时钟、4MHz)

    38小时后它仍然崩溃。

     CCSCTL0 = CCSKEY;                        // Unlock CCS
    
        CCSCTL1 = 0;                             // do not half the clock speed
        CCSCTL4 = SELA_0 + SELM_0 + SELS_0;      // Select VLO for ACLK and select HFCLK/DCO for MCLK, and SMCLK
        CCSCTL5 = DIVA_5 + DIVM_1 + DIVS_1;      // Set the Dividers for ACLK (4), MCLK, and SMCLK to 1
        CCSCTL6 = XTOFF;                         // Turns of the crystal if it is not being used
        CCSCTL8 = ACLKREQEN + MCLKREQEN + SMCLKREQEN; //disable clocks if they are not being used
        TA0CCTL0 = CCIE;                        // Timer A0 Capture/compare interrupt enable
        TA0CTL = TASSEL__ACLK +                 // Timer_A clock source select -> ACLK
                     MC_1 +                     // Mode control, Timer counts up to the value stored in TA0CCR0
                     ID_1;                      
    
    
    	TA0CCR0 = 15624;
        CCSCTL0_H |= 0xFF;                       // Lock CCS

    测试用例:启用 I2C 以显示 计时器 ISR 中的日志。

    它不会在计时器 ISR 中显示任何内容。 我认为这意味着它在计时器 ISR 之前崩溃、从而我们无法获取任何消息。

    I2C 显示111和222、然后系统崩溃。  

    #pragma vector = TIMER0_A0_VECTOR
    __interrupt void TimerA0_ISR(void)
    {
    	ADC_I2C_Write(111);
        nfc_sys_data.timerCnt += 1;
    
    	if(nfc_sys_data.timerCnt >= 1500) {	
    		nfc_sys_data.timerCnt = 0;
        }
    	ADC_I2C_Write(222);
    
    }

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

    Chris、您好!

     我仍然无法理解为什么它只会在几个小时后失败,而不是在一开始。 如果您省略所有代码(例如 NFC 代码和 I2C 代码)但仅保留计时器代码、您是否仍会看到相同的问题? 我只是想找出问题所在。  

    RF430FRL152H 处理器基于 MSP430L092。 下面链接中有一个计时器示例。 您能否看一下与代码相比有何差异?  

    https://dev.ti.com/tirex/nodeContent?node=A__AGXwsAJ6U0aUfj3qaDj5Xg__msp430ware__IOGqZri__LATEST

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

    尊敬的 Charles:

    感谢您的答复。

    经过一些测试后、我们有2个问题:

    https://dev.ti.com/tirex/nodeContent?node=A__AGXwsAJ6U0aUfj3qaDj5Xg__msp430ware__IOGqZri__LATEST

     

    在我们修改定时器除法之后、系统将在接触 NFC 后崩溃。

     代码如下:

    CCSCTL5 = DIVS_0;  

    CCSCTL4 |= SELM_0 + SELS_0 + SEL_0;   //选择 LFCLK/VLO 作为 ACLK、MCLK 和 SMCLK 的时钟源   

    最终目的

    CCSCTL5 = DIVS_5;  

    void DeviceInit(void)
    {
    	P1SEL0 = 0x00; //no JTAG
    	P1SEL1 = 0x00; //no JTAG
    	
    /*************************/
    /* Setup Ports           */
    /*************************/
      
      	P1OUT |= BIT0;                          // P1.0 output
      	P1DIR |= BIT0 + BIT1;                           
      	P1SEL0 |=  BIT1 ;                
      	P1SEL1 |=  BIT1 ; 
    	
    	
    	// Configure P1.0 and P1.1 pins for I2C mode (mode2)
        PORT_I2C_SEL0 |= SCL + SDA;
        PORT_I2C_SEL1 &= ~(SCL + SDA);
    
        // configure eUSCI for I2C
        UCB0CTL1 |= UCSWRST;                   // Software reset enabled
        UCB0CTLW0 |= UCMODE_3  + UCMST + UCSYNC + UCTR;     // I2C mode, Master mode, sync, transmitter
        UCB0CTLW0 |= UCSSEL_2;                              // select SMCLK at 2MHz
        UCB0BRW = 20;                                       // 2Mhz / 20 = 100kHz
        UCB0I2CSA = 0x0040;                                 // slave address of SHT21, initially
        UCB0CTL1  &= ~UCSWRST;                              // exit reset mode
    	
    	   
        
    /************************/
    /* Setup CCS            */
    /* SMCLK = LFCLK        */
    /************************/
        	CCSCTL0 = CCSKEY;                       // Unlock CCS
        	CCSCTL5 = DIVS_0;                            // Set the Dividers for SMCLK to 1
    		//CCSCTL5 = DIVS_5
    
        	CCSCTL4 |= SELM_0  + SELS_0 + SELA_0;    // Select LFCLK/VLO as the source for ACLK, MCLK, and SMCLK   
    	
    /* Lock by writing to upper byte */
      
      	TA0CCTL0 = CCIE;                        // TA0CCR0 interrupt enabled
      	TA0CCR0 = 1000;				    // Set value for TA0CCR0
    
     	TA0CTL = TASSEL_2 + MC_2 + TACLR;       // SMCLK, cont. mode
    	
    				 
    	CCSCTL0_H |= 0xFF;                      // Lock CCS			 
    	timerCnt_5min_ = 0;			 
    
      return;
    }

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

    Chris、您好!

     您说如果您设置  CCSCTL5 = divs_0、则不会发生崩溃吗?

      DIVS_1、DIVS_2 、DIVS_3 或 DIVS_4的情况如何 ? 我只是想知道问题是否只针对 divs_5而不是其他人。

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

      What about DIVS_1, DIVS_2, DIVS_3, or DIVS_4? I just wanted to know if the problem is only specific to DIVS_5 and not others.

    有什么限制吗?

    我们希望不要试错。
    您能否重现? 还是我没能设置的东西?

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

    Chris、您好!

     您的代码显示、在将分频后的时钟传递给定时器模块之前、您正在对 SMCLK 进行5分频。  然而、阅读 Timer_A 用户指南、我认为您应该将一个未分频的 SMCLK 传递到定时器模块并使用 ID 或 IDEX 寄存器在16位定时器之前进一步分频时钟。 请参阅下图。  

    要实现与当前现有功能相同的效果(5分频)、您是否可以将未分频的 SMCLK 传递到 TIMER_A 模块、然后使用 TAIDEX 寄存器进行5分频。 30小时以上后是否会出现相同的崩溃问题?

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

    尊敬的 Charles:

    SMCLK 基于时钟树可以选择 HF-SOC 和分频器(1~32)。

    我们想知道对 DIVS 有什么限制吗?

    NFC 使用 divs_5联系3~ 5次后、系统将崩溃。

    它易于复制。

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

    Chris、您好!

     我正在尝试获取硬件和调试工具、以便自己进行测试。 根据 TRM、DIVS_5是支持的分频值、但我不知道崩溃的原因。 我只是想知道,如果你有同样的问题,其他分居。 在获取硬件进行测试之前、您能否提供以下反馈?

     -它崩溃使用 divs_4或更低?

     -如果你使用 divs_0作为 SMCLK 到 Timer_A 模块,并使用 TAIDEX_4在计时器模块内将 SMCLK 除以5。 它会崩溃吗? 此设置应该会为应用程序产生相同的超时。  

     -你可以试试 LF-OSC? 我之所以提出这个问题、是因为 HF-OSC 具有更宽的不进行修整的容差、见下文。 我不知道您的崩溃是否是由于 对高频的更广泛容忍。  

     -如果你使用 LF-OSC 进行实验,会怎么样? 与 HF 相比、其容差更小。