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.

[参考译文] MSP430FR5994:配置计时器 B0.4中断矢量

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1316530/msp430fr5994-configuring-timer-b0-4-interrupt-vector

器件型号:MSP430FR5994

大家好!

我正在尝试将 MSP 设置为测量 MSP430FR5994的信号@ TB0.4 (引脚52)的频率。

我的代码如下。

初始化计时器 TB0.4

void init_TB0_4()
{
    P1DIR &= ~BIT7;                                                 // Set P1.7 as an input
    P1SEL0 |= BIT7;                                                 // Select Timer_B function for P1.7
    P1SEL1 &= ~BIT7;

    TB0CTL = TBSSEL__SMCLK | MC__CONTINOUS | TBIE | ID_1 | TBCLR;   // Set Timer B0 clock source to system clock enable timer B interrupt
    TB0CCTL4 = CAP | CM_1 | CCIS_1 | SCS_1;                         // Configure Timer B0.4 CAPture mode. Rising edge. CCIxB. Synchronous capture
}

中断处理程序  

#pragma vector = TIMER0_B1_VECTOR
__interrupt void Timer0_B1_ISR(void)

{
  switch(__even_in_range(TB0IV,TB0IV_TB0IFG))//
       {
           case TB0IV_TB0CCR4:

               //FCount[Fpoint++] = TA1CCR1;

               if (TB0CCR4 < LastVal)
               {
                   Overflow += 0x10000;
               }

               FCount[Fpoint++] = TB0CCR4 + Overflow;
               LastVal = TB0CCR4;

               if (Fpoint >=64)
               {
                   TB0CCTL4 &= ~CCIE;
                   Freq = (FCount[63] - FCount[0])>>6;
                   splitUint16(Freq, &f_msb, &f_lsb);               // Split 16bit Freq into two 8bit numbers
                   UART_TXBuffer[0] = f_msb;                        // Element 0 of UART_TXBuffer array hold frequency count msb
                   UART_TXBuffer[1] = f_lsb;                        // Element 1 of UART_TXBuffer array hold frequency count lsb
                   TXbyte = 0;                                      // Initialise TXbyte
                   TX_Data_Len = 2;                                 // Number of bytes to be sent
                   UCA1TXBUF = UART_TXBuffer[TXbyte++];             // Transmit the first byte from UART_TXBuffer array
                   Fpoint = 0;
                   LastVal = 0;

                   //for(clrFCount=0; clrFCount<32; clrFCount++)
                   //{
                   //FCount[clrFCount] = 0;
                   //}
               }
               break;

           case TB0IV_TBIFG:
               break;

           default: break;
       }
}

我在开发板上使用计时器 A1.1 (引脚3)作为输入的代码工作、全部正常工作。

现在我使用 TB0.4在自己的电路板上运行、它不起作用、我甚至 在 TB0IV_TB0CCR4情况下也没有碰到断点:当中断被启用(TB0CCTL4 |= CCIE)、在我的代码中的位置设置。

我对 C 和 MSP 编码完全陌生、所以如果这是基本错误、我就看不出为什么出错了。

谢谢。

伊恩  

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

    我在这里看不到任何明显错误的东西。 我会从最基本的方面开始:

    1) 1)是否曾经调用 ISR? (即 switch ()上的断点,而不是条件:)

    2) 2)您是否使用低功耗模式(LPM)? 当 LPM 电平>= LPM2时、SMCLK 关闭。

    3) 3)您是否相当确定信号到达了引脚?

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

    您好!

    事实证明这是运算符错误的情况。 我的信号到达了引脚、但当正弦位于中心接地时、MSP 不喜欢它(我没有注意到我的函数发生器设置已更改)。 感谢您协助我检查输入信号、如果不是、我可能仍在盯着我的代码!

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

    小心、如果这是一个50欧姆发生器、您可能会损坏负电压过高的 ESD 二极管。

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

    这是的,我很幸运这次!

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

    你知道吗? 在不影响输入引脚运行的情况下、可能会损坏 ESD 二极管。