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.

[参考译文] 编译器:脉冲包的MSP430F149问题

Guru**** 2554380 points
Other Parts Discussed in Thread: MSP430F149

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/587037/compiler-msp430f149-issue-with-pulse-pack

主题中讨论的其他部件:MSP430F149

工具/软件:TI C/C++编译器

MSP430F149脉冲组问题

亲爱的朋友们:

请帮助我解决这个问题:我尝试从1.5 引脚MSP430F149获取脉冲包。

我需要从TA0生成频率为4万 Hz的脉冲组。 但我做不到。 我只得到脉冲。  

如何延迟计时器? 我需要它用于超声波接收器/发送器。 脉冲组需要 激活超声波传感器并暂停-以接收信号输入。

如果我只使用引脚1.5 (TA0) ,我可以使用CCR1来制作PWM吗?

如何制作PWM?  

请大家帮我解决这个问题。

void timerA_PWM()


TACR0=18;

TACR1=10;

TCCTL1=OUTMOD_7;

tacl=tassel_2 +MC_1;
}

void timera_pause()


TCCR0 = 1.2万-1;

TACTL0 = CCIE;

TACTL = MC_1|ID_3|Tassel_1|TALCLR;
}


#pragma vector = TIMERA0_vector
__interrupt void TIMERA0_vector_ISR(void)


timera_wm ();

_DELAY周期(1000);

timera_pause();
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    WFP 1.5 连接到TA0的CCR0,只能控制定时器的周期。 必须1.7 使用WFP PWM/CCR1或WFP PWM/CR2输出1.6。 您不应在中断内部控制TA0,停止计时器的唯一方法是从TACTL寄存器中清除MC位。 如果要暂停计时器输出,则需要清除TCCR1和TCCTL1。 请进一步查看TI提供的计时器代码示例。

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

    感谢您的及时回复。

    我不明白,如果我想发送4万 Hz的脉冲序列。 我应该使用哪些针脚? 我是否可以只使用一个输出-1.5引脚来执行此任务?

    在哪里可以找到代码示例? 我的示例不正确?

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

    计时器周期由CCR0确定,而给定输出的占空比则通过CCR1/CCR2选择。 请记住,默认MCLK/SMCLK频率来自DCO,频率为~800 kHz。 ACLK应由LFXT1CLK通过外部32 kHz晶体提供。

    www.ti.com/.../slac015

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

    请帮我处理脉冲包。
    如何仅执行5次脉冲,然后使用定时器A进行延迟?

    我需要1.1111万_________________ 1.1111万_________
    如何使用中断实现?
    我没有在slac015s中找到示例。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Nastya,

    使用CCR0中断来计算周期数,在计数到5之后,相应地关闭输出并将CCR0的值重新调整到所需的延迟,然后在下一个中断时将CCR0更改为脉冲周期并重新启动输出。 提供的计时器示例将帮助您入门。

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

    很遗憾,但我无法理解如何做到这一点。 也许您有更多例子来完成此任务?

    提前感谢您!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们提供了已知的计时器示例,您需要从此处调试您的程序,并进行一些更多的研究,以充分了解MSP430的计时器功能和应用代码。

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

    请你向我解释一下为什么我不能中断?

    void timera_pause()


    TCCR0 = 3.6564万;
    TACTL0 = CCIE;
    TACTL = MC_1|Tassel_2|TALCLR;
    }

    void timerA_PWM()

    TACR0=18;
    TACR1=7;
    TCCTL1=OUTMOD_7;
    TACTL || tassel_2+MC_1;
    }

    #pragma vector = TIMERA0_vector
    __interrupt void TIMERA0_vector_ISR(void)


    timera_wm ();

    _DELAY周期(5000);

    timera_pause();
    }
    Void主(void)

    WDTCTL=WDTPW+WDTHOLD;
    P1DIR|=BIT6;
    P1SEL|=BIT6;

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

    我想中断输入一次,但之后您遇到了问题。  在ISR内工作的时间不应太长。  以下是一些建议的更改(未经测试):

    void timera_paus()
    {
    
    TCCR0 = 3.6564万;
    TCCTL0 = CCIE;
    TCCTL1&=~OUTMOD_7;
    TCTL = MC_1|tassel_2|TALC;
    }
    
    void timerA_PWM()
    {
    TCCTL0&=~CCIE;
    TCCR0=18;
    TCCTR1=TAL;TALC=7;
    TALC=TADM;} TALCTAUTADD=7
    
    
    
    #pragma vector = TIMERA0_vector
    __interrupt void TIMERA0_vector_ISR(void)
    {
    _BIC_SR(LPM0_bits);
    
    }
    void main (void)
    {
    WDTCTL=WDTPW+WDTHOLD;
    P1DIR|=BIT6;
    P1SE|=BIT6;
    
    while (1)
    {
    timerBIS_PAUSE
    (void)
    timera_wm();
    
    _delay_cycles(5000);
    }
    
    } 

    此致,Ryan