出于测试目的、我正在使用外部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 (); //启用全局
}
皮特·英格兰