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.

[参考译文] MSP430FR59691:MSP430FR59691

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1279246/msp430fr59691-msp430fr59691

器件型号:MSP430FR59691

出于测试目的、我正在使用外部10MHz 晶体来生成高频时钟输入(HFIN)、选择该时钟输入作为我用于使 timerB 递增的 SMCLK。

Timer B 在向上计数模式下设置、计数为9999、每毫秒应降至零。

设置该中断后、会生成一个中断、我的软件将该中断用作保留时基。

中断确实发生、但以预期速率的一半运行。  如果晶体是5MHz、而不是10、这是预料之中的。

条件已确认、晶体在10MHz 处振荡。  我怀疑该计时器实际上在使用 MODCLK 频率(失效防护时钟)。

如上所述、我将使用 TI 开发板、但我也创建了一个配置基本相同的板、不同之处在于我将使用外部高稳定性振荡器提供10kHz 时钟。

该振荡器产生 TTL 逻辑电平方波。  该板也遇到了同样的问题、它可以半速运行。

我已经处理此问题数周了、无法使用外部频率基准驱动计时器。

请查看下面的初始化代码:

// HFIN 晶体引脚的 GPIO 设置

   PJSEL0 |= BIT6;                               // P.6 = (01)在高频晶体模式下设置 PJ.6
   PJSEL1 &=~BIT6;
   PJSEL0 |= BIT7;                               // P.7= (01)晶体模式
   PJSEL1 &=~BIT7;

//此处是 CS 初始化代码...

void init_void System_Clock (void)
{
   //在时钟系统设置为在10 MHz 运行微控制器之前,
   // FRAM 存储器的时钟源需要使用等待状态进行预分频
   //以使 MCLK 超越8 MHz 的方式运行。

   FRCTL0 = FRCTLPW | NWAITS_1;            //解锁 FRAM 并增加 FRAM 等待状态编号

   //设置时钟源
   CSCTL0 = 0xA500;
   CSCTL1 = 00000000;                                 //DCO 1MHz (未使用)
   CSCTL2 = SELS__HFXTCLK + SELM_HFXTCLK;            //SMCLK 和 MCLK 源= HFXT
   CSCTL3 = DIVS__1 + DIVM__1;                        //SMCLK/1和 MCLK/1

   CSCTL4 = HFXTDRIVE0 + HFFREQ_2;                    //设置频率= 10MHz
   CSCTL6 = SMCLKREQEN + MCLKREQEN;

   //检查故障标志
   正确
   {
        CSCTL5 &=~(HFXTOFFG + LFXTOFFG);
   } while (CSCTL5 & HFXTOFFG);

//以下是计时器初始化代码...

void init_void Timer_Capture (void)
{
    //设置 TimerB0 (1K 周期)
  TB0CCTL0 = CCIE;                                      // TBCCR0复位/置位
  TB0CCR0 = 9999;                                      // TBCCR0的时钟周期

  //启动计时器 B
  TB0CTL = TBSSEL__SMCLK | MC__UP;                   // SMCLK 高达 CCR0

//  TB0CTL |= TBIE;                                     //启用中断
  TB0CTL &&~TBIFG;                                   //清除中断标志
 _enable_interrupt ();                                //启用全局

皮特·英格兰