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.

[参考译文] MSP430F5529:定时器中断的运行速度比预期慢

Guru**** 2589265 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/624755/msp430f5529-timer-interrupt-running-slower-than-expected

器件型号:MSP430F5529

Howdy、

我使用的是与 I2C 和 SPI 类似的专有通信协议、但与无法使用 CCS 库的位置足够不同、因此我尝试使用 MSP430来实现它。 目前、我有 P1.4使用 TA0.3输出时钟信号(500kHz PWM)、我想使用 GPIO 发送数据。

我的最终目标是使用 Timer0 A0中断、以便位在 PWM 的每个上升沿或高电平状态移出。 作为测试、每次调用中断时我只想翻转该位、但 GPIO 以37.7kHz 左右的频率进行切换、比预期慢得多。 我可以运行通信的最小值为100kHz。 中断真的很慢、还是代码中缺少一些基本内容?  

#include 

void PWMinit (void);


int main (void)
{
unsigned int I;

WDTCTL = WDTPW + WDTHOLD; //停止 WDT

PWMinit ();
dataformation ();
__bis_SR_register (GIE); //在

(1)
{

}


void PWMinit (void){时启用中断

P1DIR |= BIT6; // P1.6中断调试

P1DIR |= BIT4; //P1.4输出
P1SEL |= BIT4; //P1.4至 TA0.3

TA0CCR0 = 1; // PWM 频率= 1MHz/(TA0CCR0+1)= 500kHz
TA0CCTL3 = OUTMOD_7; // CCR3复位/置位
TA0CCR3 = 1; // CCR3 PWM 占空比 Ton =(TB0CCR1)/1MHz
TA0CCTL0 = CCIE; //启用 CCR0中断
TA0CTL = tassel_SMCLK | MC_UP | TACLR;// SMCLK、UP 模式、Clear TAR

}


// Timer0 A0中断服务例程
#if defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__)
#elima vector=TIMER0_A0中断服务例程#if defined (__TI_COMPION_ERR_A0




)#TIMER0_NOT_VERSIMPLE_TRIBRATION_TRIBU_TRIBU_TRIBU_TRIBU_TRIBU_ER0_TRU_TRU_ERA0 (#TI_TRU_ER0_TRU_TRU_TRU_INTRU_INTRU_INTRU_INTRU_ER_ER
#endif
{
P1OUT ^= BIT6; //切换 P1.0
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    > TA0CCR0 = 1; // PWM 频率= 1MHz/(TA0CCR0+1)= 500kHz
    这会每2个 MCU 时钟触发一次 CCR0中断、这太快了。 硬件可以处理这种转换速率、但您无法足够快地馈送它。

    根据您的数字、您的 ISR 所用的时钟大约为1MHz/37.7kHz = 26个时钟。 您可能能够对此进行倒计时、但您将无法到达2个时钟。

    首先加快您的 CPU 速度。 我记得 F5529可以在25MHz 下运行;我希望有一个示例程序(请查看产品页面)来展示如何执行此操作。 这将为您提供一些呼吸空间、但不会给您太多的松弛时间。

    如果您的协议是基于消息的(bursty)协议、您可能能够从 DMA 中获得一些里程。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Kevin、

    如果您认为此问题已解决、请继续并选择上述帖子已解决您的问题、以便我们可以关闭此主题。

    谢谢!

    Matt Calvo