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.

[参考译文] TM4C123GH6PM:两个计时器、具有反向中断的相同周期(180度相移)

Guru**** 2472990 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/680251/tm4c123gh6pm-two-timers-of-same-period-that-interrupt-inversely-180deg-phase-shifted

器件型号:TM4C123GH6PM

我使用了 Launchpad Workshop 工作手册练习4中的演示;仅作了细微修改、我添加了第二个计时器 TIMER1A。  是否有办法同步时间、使它们处于相同的周期、但让它们以180度相移进行中断?  我已经阅读过 Tivaware API、但有时却找不到最清晰的文档。

0A ---- |---- |----

1A --|---- |---- |--

我的代码如下、但实际上几乎是库存形式、

提前感谢。

#include 
#include 
#include "inc/tm4c123gh6m.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h"
#include "driverlib/interrupt.h"
#include "driverlib/gpio.h"
#include "driverlib/timer.h"

{invoid (main)
uint32_t ui32Period;
SysCtlClockSet (
SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHz | SYSCTL_OSC_MAIN);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);

SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
SysCtlPeripheralEnable (SYSCTL_Periph_Timer1);


TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE);
TimerConfigure (Timer1_base、timer_CFG_PERIODICRACRACASE);

ui32Period =(SysCtlClockGet ()/1);

TimerLoadSet (TIMER0_BASE、TIMER_A、ui32Period - 1);
TimerLoadSet (Timer1_base、timer_A、ui32Period/2 - 1);

IntEnable (INT_TIMER0A);
IntEnable (INT_TIMER1A);

TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);
TimerIntEnable (Timer1_base、timer_TINA_TIMEOUT);

IntMasterEnable();

TimerEnable (TIMER0_BASE、TIMER_A);
TimerEnable (Timer1_base、timer_A);


while (1)
{
}
}
空 Timer0IntHandler (空)
{
//清除计时器中断
TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);

//读取 GPIO 引脚和的当前状态
//写回相反的状态
IF (GPIOPinRead (GPIO_PORTF_BASE、GPIO_PIN_2)
{
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、0);
}
其他
{
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、GPIO_PIN_2);
}
}

空 Timer1IntHandler (空)
{
//清除计时器中断
TimerIntClear (Timer1_base、timer_TINA_TIMEOUT);

//读取 GPIO 引脚和的当前状态
//写回相反的状态
IF (GPIOPinRead (GPIO_PORTF_BASE、GPIO_PIN_1))
{
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、0);
}
其他
{
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、GPIO_PIN_1);
}
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您是90乘180、请先弄清楚。 它们涉及非常不同的技术。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    180。非常像我的小图。 如果它们都在100ms 时中断、一个将在100、200、300等时中断、而另外150、250、350等

    (笑声) 但如果90项要容易得多,我也可能对此感兴趣。



    谢谢。

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

    1.设置定时器使其在所需时间上溢。 在其 ISR 中、选通引脚。
    2.将定时器输出比较寄存器设置为上面指定周期的1/2。 在其 ISR 中、选择另一个输出引脚。
    3.坐下来享受您的劳动成果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不会想到这一点、谢谢。  我给它一个旋涡。