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.

[参考译文] MSP430FR2355:时钟和计时器

Guru**** 2535750 points
Other Parts Discussed in Thread: MSP430FR2355

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/978987/msp430fr2355-clock-and-timer

器件型号:MSP430FR2355

大家好、

我尝试创建一个函数、 通过计时器 B1生成3个时钟、频率如下:

500kHz、600kHz 和700kHz。

在计时器中断中、我切换输出引脚。

我无法创建这些频率。 我在示波器上看到的频率为~200-300kHz。

计时器的时钟是 smclk。

是否可以通过 Msp430fr2355生成此类频率?

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

    您需要同时生成全部3个时钟、还是必须在单个输出上调整频率。

    最后、您需要为计时器选择正确的源时钟并相应地设置 PWM。 看起来您的源时钟太慢或您选择的计时器间隔太长。

    请记住、如果您的计时器时钟源速度更快、您的频率分辨率就会更好。 您有何类型的精度要求?

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

    您好!

    我需要同时生成一个时钟。 例如:600kHz。

    我在中断中使用 timerB1。  在中断处、我切换输出引脚。

    timerB1的源时钟为 SMCLK (DCO 为24MHz)。

    我已经定义了 timerB1的以下寄存器:

    TB1CTL |= TBCLR;

    TB1CTL |= CNTL_0 | TBSSEL_SMCLK | ID_0 | MC_UP;

    TB1EX0 = 0;

    TB1CCR0 = 0x28;//(24MHz/600kHz = 40 = 0x28)。

    TB1CTL |=  TBIE; //启用 TB1

    TB1CTL &=~TBIFG;//清除 IRQ

    我得到的最大频率输出约为200-300kHz。

    问题可能是 CPU 没有足够的时钟周期来进入中断和切换输出引脚。  你怎么看?

    BR、

    Mor。

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

    尊敬的 Mor:

    是的、对于这种高频、每个时钟周期计数、这取决于 ISR 代码的时长。

    为什么不使用 TimerB 的输出逻辑来切换 GPIO、这样可以消除所有 CPU 开销并获得可预测的 PWM。

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

    我实际上不熟悉 MSP430。
    您能否向我解释 一下如何在没有中断的情况下切换输出引脚?

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

    尊敬的 Mor GE:

    假设您使用 SMCLK 作为 timerB 的时钟源、您将需要选择一个可以使用 TBCCRx 计数寄存器之一进行分频的基频、例如本示例中的 TBCCR1。  考虑到1/500kHz = 2us、1/600kHz = 1.67us 和1/700kHz = 1.43us、这是很棘手的问题。  

    例如、如果 SMCLK 为1MHz、则最小分辨率为1us。  这可能会生成500kHz、但不会生成其他频率。

    幸运的是、FR2355可在高达24MHz 的频率下运行、从而为计时器提供更多粒度。  因此、如果您将 SMCLK 设置为24MHz、这将提供1/24MHz 或41.67nS 的计时器分辨率。  当定时器配置为增模式时(定时器从0增到= TB0CCR1)、您可以使用以下 TB0CCR1值。

    • 500kHz -> TB0CCR1 = 48
    • 600kHz -> TB0CCR1 = 40
    • 700kHz -> TB0CCR1 = 34

    随附的示例可用于使计时器正常工作。  如果您想要动态切换频率、您应该能够弄清这一点。

    提示:请参阅 用户指南中的第14.2.4.2.1节

    e2e.ti.com/.../timerb_5F00_multiple_5F00_freq.c

    #include

    void initCS (void)

       FRCTL0 = FRCTLPW | NWAITS_2;

       P2SEL1 |= BIT6 | BIT7;                      // P2.6~P2.7:晶振引脚
       操作
       {
           CSCTL7 &=~(XT1OFFG | DCOFFG);          //清除 XT1和 DCO 故障标志
           SFRIFG1 &=~OFIFG;
       } while (SFRIFG1 & OFIFG);                  //测试振荡器故障标志

       _bis_SR_register (SCG0);                    //禁用 FLL
       CSCTL3 |= SELREF_XT1CLK;                   //将 XT1设置为 FLL 基准源
       CSCTL0 = 0;                                 //清除 DCO 和 MOD 寄存器
       CSCTL1 |= DCORSEL_7;                        //设置 DCO = 24MHz
       CSCTL2 = FLLD_0 + 731;                      // DCOCLKDIV = 24MHz
       _DELAY_CYCLES (3);
       _BIC_SR_register (SCG0);                    //启用 FLL
       while (CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1));  // FLL 锁定

       CSCTL4 = SELMS_DCOCLKDIV | SELA_XT1CLK;  //将 XT1 (~32768Hz)设置为 ACLK 源、ACLK = 32768Hz
                                                    //默认 DCOCLKDIV 为 MCLK 和 SMCLK 源


    #define FREQ_500K  48.
    #define FREQ_600K  40.
    #define FREQ_700K  34.
    #define FREQ       FREQ_600K
    int main (空)

       WDTCTL = WDTPW | WDTHOLD;                                  //停止 WDT

       initCS();

       P1DIR |= BIT6;
       P1SEL1 |= BIT6;       // P1.6/TB0.1输出

       //禁用 GPIO 上电默认高阻抗模式以激活
       //先前配置的端口设置
       PM5CTL0 &=~LOCKLPM5;

       //计时器将独立于 CPU 切换输出
       TB0CCTL1 |= OUTMOD_7;
       TB0CCR0 = FREQ;
       TB0CCR1 = FREQ >> 1;
       TB0CTL = TBSSEL_SMCLK | MC__UP;            // SMCLK、UP 模式

       // CPU 进入 while 循环
       //可以一直休眠或执行其他任务
       while (1)
       {
           _bis_SR_register (LPM0_bits);         //通过中断输入 LPM0
           __no_operation();                           //进行调试

       }

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

    尊敬的 Denis:

    感谢您的所有帮助。

    在我尝试执行你所写的操作后。 我有以下意见:

    MSP430:文件加载器:验证失败:地址0x0BFB8处的值不匹配请验证目标存储器和存储器映射。

    MSP430:GEL:C:\……输出:发生数据验证错误,文件加载失败。

    现在、我无法将软件加载到 MSP430。

    可以帮帮我吗?

    BR、

    Mor。

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

    尊敬的 Mor GE:

    是否可以加载其他程序?

    您使用的是哪些工具?

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

    我从您那里听说过几天,因此我假设您能够解决您的问题。
    如果情况并非如此,请单击“这无法解决我的问题”按钮,并使用更多信息回复此主题。
    如果此主题锁定、请单击"提出相关问题"按钮、然后在新主题中描述您的问题的当前状态以及您可能需要帮助我们帮助解决您的问题的任何其他详细信息。