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.

[参考译文] CCS/MSP432P401R:我需要使用 msp432401r 的 timerA 的延迟程序

Guru**** 2560080 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/601140/ccs-msp432p401r-i-need-a-delay-program-using-timera-of-msp432401r

器件型号:MSP432P401R

工具/软件:Code Composer Studio

大家好、

我需要在项目中使用延迟函数。 我已经在 CCS 中创建了一个计时器中断代码。 其内容如下:

#include "msp.h"

int main (void){
WDTCTL = WDTPW | WDTHOLD;

CSKEY = CSKKEY_VAL;
CSCTL0=DCOEN+DCORSEL_3+DCOTUNE_OFS;
CSCTL1=DIVA_0+SELM_3+SELM_3+SELA_2;
CSCLKEN=0x0000030f;

CSKEY = 0;

//配置 GPIO
P1DIR |= BIT0;
P1OUT |= BIT0;

TA0CCTL0 = CCIE;
TA0CCR0 = 32767;
TA0CTL = tassel_1 + MC_1;
SCB->SCR |= SCB_SCR_SLEEPONEXIT_MSK;//从 ISR 退出时启用睡眠


//启用全局中断
_enable_interrupt ();

NVIC_ISER0 = 1 <<(TA0_0_IRQn)& 31);

while (1)

_SLEEP();

__no_operation();//用于调试器

//计时器 A0中断服务例程

void TA0_0_IRQHandler (void){
TA0CCTL0 &=~CCIFG;
P1OUT ^= BIT0;
TA0CCR0 = 62259;
//TA0CCR0 += 0xFFFF;//将偏移添加到 TACCR0

使用此代码、我可以使 LED 闪烁。 但我需要10ms、100ms、400ms 等精确延迟 那么、您能告诉我、我必须如何通过配置这些寄存器来创建自定义延迟函数。 如果有公式、请解释、请直接回答。

提前感谢:)

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

    抱歉、我的错误、中断处理程序中的代码与上面的代码不符、如下所示、

    void TA0_0_IRQHandler (void){
    TA0CCTL0 &=~CCIFG;
    P1OUT ^= BIT0;

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

    Yadhukrishnan、

    [引用 user="Yadhukrishnan V M72"]void TA0_0_IRQHandler (void){
    TA0CCTL0 &=~CCIFG;
    P1OUT ^= BIT0;

    }[/报价]

    由于您使用的是增模式配置中的计时器、这是正确的。 您无需在中断本身内更改 TACCR0寄存器。

    William

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

    要添加此项、要调整计时器所需的时间量、请调整 TA0CCR0寄存器。 计时器计数到该值、您将需要根据计时器模块的时钟源和器件时钟速度计算该寄存器的值。 请参阅 TRM: www.ti.com/.../litabsmultiplefilelist.tsp 中的计时器部分
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Evan、

    感谢你的答复。 我知道、如果我调整 TA0CCR0寄存 器、我可以更改时间、并且我已经参考了这个计时器部分 www.ti.com/.../litabsmultiplefilelist.tsp。 如上所示、本参考手册在制作定时器中断程序方面提供了很多帮助。 我不是在问您如何配置寄存器、而是问如果我需要特定的延迟、例如100毫秒、我应该存储什么值。  

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

    无论 TACLK 的 CLK 源是多少、都将其除以多少次、而将其除以多少次。 (例如、如果您以~32kHz 的频率使用分频器1来提供 LFXT、那么1秒的计时器将需要在 TA0CCR0中使用32767个周期。) 要执行100ms、请将32767除以10、因为100ms 是每秒1/10。

    如果 LFXT 为~32kHz 且分频器为2、则 TA0CLK 的感知时钟源将为16kHz、 这意味着在1秒内、您需要在 TA0CCR0中输入16k 个周期、因此要执行100ms、请将16000除以10、因为100ms 是每秒1/10的时间、并将其放置在 TA0CCR0中。

    如您所见、要实现100ms 的延迟、您需要考虑计时器时钟的时钟源和分频器。 然后可以计算其余的值。