请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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);
}
}