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/MSP430FR6972:msp430fr6972

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/916390/ccs-msp430fr6972-msp430fr6972

器件型号:MSP430FR6972
主题中讨论的其他器件: MSP430FR6989

工具/软件:Code Composer Studio

您好,

我正在制作捕捉程序。

我正在使用 MSP430FR6972 (我正在制作脉冲计数器)

我的目的 是1)通过捕获程序获取模拟值、

            2)、然后将值发送到示波器(以检查频率)。

我还在使用 UART 程序,并将"Tx Data"检查为范围  

(我不确定……我做的是正确还是不正确……  捕获接收到的数据..... 通过 UART 发送)

但我在示波器处获得了一些随机值(某些时间 MHz、有时是 KHz)

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


PM5CTL0 &=~LOCKLPM5;

//================================= 引脚已定义================================================================================

P1SEL0 |=BIT3; //脉冲捕捉
P1SEL1 &=~BIT3;
P1DIR &=~BIT3;


//======================================== clock========================================================================================
/*
//时钟系统设置
CSCTL0_H = CSKEY >> 8; //注释
CSCTL2 |= SE拉美 经济体系7; //注释
CSCTL2 |= SELA_VLOCLK; //注释
CSCTL0_H = 0x00; //注释

//_delay_cycles (1000); //注释
*/


CSCTL0_H = CSKEY >> 8;
CSCTL1 = DCOFSEL_0;
CSCTL2 = SELA_LFXTCLK | SELESS__DCOCLK | SELM_DCOCLK;
CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1;
CSCTL4 &=~LFXTOFF;
操作
{
CSCTL5 &=~LFXTOFFG;
SFRIFG1 &=~OFIFG;
} while (SFRIFG1&OFIFG);
CSCTL0_H = 0;


//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

// lcd_init(); //注释
UART_INIT();
// adc (); //tal意见///=================================

捕获========================================================================================================================
// Timer0_A3设置
TA0CCTL2 = CM_1 | CCIS_1 | SCS | CAP | CCIE;//捕获上升沿,使用 CCI2B=ACLK,同步捕获,启用捕获模式,启用捕获中断

TA0CTL = tassel_SMCLK | MC_Continuous;//使用 SMCLK 作为时钟源



,启用 PMIS_1中断模式;{_PMIS_Rsbis}在 PM_bis_bis_bis}寄存器中的





中断模式下


#pragma vector = TIMER0_A1_vector
__interrupt void Timer0_A1_ISR (void)
{
switch (__even_in_range (TA0IV、TA0IV_TAIFG)}{
案例 TA0IV_TA0CCR1:


中断;
案例 TA0IV_TA0CCR2:
timerAcapturePointer = TA0CCR2;

putchar (timerAcapturePointer);

_DELAY_CYCLES (100000);
LPM3_EXIT;
中断;
案例 TA0IV_TA0IFG:
中断;
默认值:
break;
}
我

正在使用 MSP430FR6972。
我想检查"示波器"上的频率。
UART 没有问题。 

您能检查一下吗、

请告诉我 …

我在哪里出错了?

(我也不知道该计划… 请回复)

此致、

Srijit。

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

    >  TA0CCTL2 = CM_1 | CCIS_1 | SCS | CAP | CCIE;   // Capture rising edge,Use CCI2B=ACLK,Synchronous capture,Enable capture mode,Enable capture interrupt

    P1.3 is [TA1.]CCI2A, not [TA0.]CCI2B [Ref Data Sheet (SLASE23E) Table 6-19]. [TA0.]CCI2A is over on P1.7 [Table 6-20].

    You can move your input wire or change TA0->TA1. Then:

    >  TA0CCTL2 = CM_1 | CCIS_0 | SCS | CAP | CCIE;   // Capture rising edge,Use CCI2A=P1.7,Synchronous capture,Enable capture mode,Enable capture interrupt

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

    >         putchar(timerAcapturePointer);

    这只会发送捕获值的低字节、这并不是很有用。 您应该发送两个字节、但如果您只能发送一个字节、那么高字节将(稍微)更有用:

    >         putchar((timerAcapturePointer >> 8) & 0xFF);  // high byte of timer value

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

    [编辑:在重新阅读数据表时、我注意到 P1.3根本不会进入 TA0、而是进入 TA1。 已相应地更新。]

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

    您好、Bruce、

    非常感谢您的回复。

    我做了一些改变:  

    中断:
    
    #pragma vector = Timer1_A1_vector
    __interrupt void Timer1_A1_ISR (void)
    {
    switch (__even_in_range (TA1IV、TA1IV_TAIFG)){
    案例 TA1IV_TA1CCR1:
    中断;
    案例 TA1IV_TA1CCR2:
    timerAcapturePointer = TA1CCR2;
    putchar ((timerAcapturePointer >> 8)& 0xFF);
    _DELAY_CYCLES (100000);
    LPM3_EXIT;
    中断;
    案例 TA1IV_TA1IFG:
    中断;
    默认值:
    中断;
    }
    
    
    
    主域:
    TA1CCTL2 = CM_1 | CCIS_1 | SCS | CAP | CCIE;//捕捉上升沿,使用 CCI2B=ACLK,同步捕捉,启用捕捉模式,启用捕捉中断
    TA1CTL = tassel_SMCLK | MC__Continous;//使用 SMCLK 作为时钟源,以连续模式启动计时
    
    器#如果我使用 CCIS_0 (对于 CCI2A):中断不起作用,
    但是、如果我使用 CCIS_0 (CCI2B)...中断工作。
    
    

    您能告诉我吗,  

    有什么想法吗?

    (根据数据表,它应该是 CCIS_0 (CCI2A)。

    此致、

    Srijit。

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

    HII、

    [引用 user="Srijit Munian"]But ifI use CCIS_0(CCI2B)...the interrupts is working.

    它将为"CCIS_1 "而不是"CCIS_0"。

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

    我也看不到任何明显的东西。 您仍在将 P1.3用于输入信号?

    如果您使用 LPM0而不是 LPM3、它会发生什么变化吗?

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

    HII.I 使用同一个引脚。

    P1.3。

    它是定制板。

    我现在需要使用该引脚。

    此致、

    Srijit

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

    我将代码放在 MSP430FR6989 Launchpad 上、在 P1.7上生成(1kHz)信号、并将其修补为 P1.3。 结果:CCIS=0时、我按预期获得捕获。 我必须添加"PJSEL0 |=(BIT4|BIT5);"才能通过 LFXT 启动循环。

    我能想到的是、您的信号不会达到 P1.3、因为其他一切似乎都已到位。 您是否有观察 P1.3的范围?