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.

[参考译文] MSP430FR5969:TimerA 最小中断周期

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1387702/msp430fr5969-timera-minimum-interrupt-period

器件型号:MSP430FR5969

工具与软件:

我有两个问题。
1. TimerA 的 TimerCLK 的输出是 SMCLK 的一半。
分频器设置为1/1。 为什么会这样?
(例如:SMCLK 为16MHz、TimerCLK 为8MHz。)

2.我希望 TimerA 中断周期为8MHz、中断周期只有大约382kHz。

以下是源代码。

我想有一些奇怪的器件、如果您找到它们、请告诉我。

#include
#include
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void intializeMCU (void){
WDTCTL = WDTPW | WDTHOLD;//停止 WDT

CSCTL0 = 0xA500;

FRCTL0 = FRCTLPW | NWAITS_1;

//时钟系统设置
CSCTL0_H = CSKEY_H;//解锁 CS 寄存器
CSCTL1 = DCOFSEL_0;//将 DCO 设置为1MHz
//设置 SMCLK = MCLK = DCO、ACLK = VLOCLK
CSCTL2 = SELA__VLOCLK | SELS__DCOCLK | SELM__DCOCLK;
//每器件勘误表将分频器设置为4、然后再将频率更改为
//防止过冲瞬态导致超出规格的操作
CSCTL3 = DIVA__4 | DIVS__4 | DIVM__4;//将所有相应的 clk 源设置为4分频、以进行勘误操作
CSCTL1 = DCOFSEL_4 | DCORSEL;//将 DCO 设置为16MHz
//延迟~10us 以使 DCO 稳定。 60个周期= 20个周期缓冲区+(10us /(1 / 4MHz))
__delay_cycles (60);
CSCTL3 = DIVA__1 | DIVS__8 | DIVM__8;//将所有分频器设置为1以进行16MHz 操作
CSCTL0_H = 0;//锁定 CS 寄存器//锁定 CS 寄存器

//配置 GPIO

P1DIR |= BIT0;//将 P1.0设置为输出方向
P1OUT |= BIT0;//清除 P1.0输出锁存以显示定义的上电状态

P4DIR |=(BIT5 + BIT6);//将 P4.5设置为输出方向
P4OUT = 0x00;
P4OUT |=位5;
P4REN |=位5;

P3DIR |= BIT4;//将 P4.6设置为输出方向
P3OUT |=位4;
P3REN |=位4;
P3SEL0并且=位4;
P3SEL1 |=位4;

P1DIR |= BIT6;//将 P1.6设置为输出方向
P1OUT |=位6;
P1REN |=位6;
P1SEL0 |=位6;
P1SEL1 |=位6;

PM5CTL0 &=~Ω LOCKLPM5;//禁用 GPIO 加电缺省高阻抗模式
//激活以前配置的端口设置
// TimerA 設定*/
TA0CTL = TASSEL_2 + ID_0 + MC_1 + TAIE;  
TA0CCTL0 = CCIS_0 + CCIE + OUTMOD_3;

TA0CCR0 = 1;
TA0EX0 = 0です。μ A

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

* Timer0_A0

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#pragma VECTOR=TIMER0_A0_VECTOR
_interrupt void TIMER0_A0_ISR (void)

TA0CTL &=~μ H TAIFG;
P4OUT ^= BIT6;
}
int main (void)

intializeMCU();
_BIS_SR (GIE);
for (;;){

}

返回0
}

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

    你好、 千叶大树

    请参阅 25.1 Timer_A MSP430FR58xx、MSP430FR59xx 和 MSP430FR6xx 系列简介(修订版 P)

    计时器 A 的时钟源可选择为 SMCLK

    ID 和 IDEX 分频器可选为1

    定时器针对源代码、请参考示例代码: https://www.ti.com/tool/download/SLAC536 和 https://www.ti.com/tool/download/SLAC668

    谢谢!

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

    您好李暁東

    我知道可以选择它作为 SMCLK 时钟。

    即使将 ID 和 IDEX 之间的分隔符设置为1、也将是1/2。

    另外、我想在8MHz 处有一个计时器中断。 这是可行的吗? 我应该如何设置它、以便它能够在8MHz 上生成中断?

     

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

    简短答案:不可以、你不能使用(max) 8MHz SMCLK 实现16MHz 中断(ISR 调用)速率。

    为此、您的 ISR 必须在2个 MCLK (CPU 时钟)内执行、此时最小值约为20个 MCLK。 如果您尝试使用更短的定时器周期、中断将会溢出、且(GPIO)输出信号周期将被限制为 ISR 执行时间。

    此外、在计时器 ISR 中通过切换 GPIO 来生成输出信号、即使在最好的情况下、只要您的代码尝试其他操作、也会受到抖动/漂移的影响。 最好是使用 OUTMOD 机制。