工具/软件:Code Composer Studio
你(们)好
我需要生成两个用于驱动器件的信号、一个频率为25Hz、另一个频率为1.4MHz。 我已经使用下面的代码进行了测试、但即使将负载设置为1.4Mhz、我也只能实现645kHz、我是否有问题?
我还可以注意到、在某些频率下、占空比毫无理由地变化、因为我将其保持在50%。 我正在尝试弄清楚数据表和 Tiva 外设库上发生了什么、但由于我是 Tiva C 的初学者、因此非常感谢您的帮助。
提前感谢
伊斯拉
#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);
SysCtlClockSet (SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_1_GPIO_PIN_2|GPIO_PIN_3);
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE);
ui32Period =(SysCtlClockGet ()/25)/2;
TimerLoadSet (TIMER0_BASE、TIMER_A、ui32Period -1);
IntEnable (INT_TIMER0A);
TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);
//IntMasterEnable();
TimerEnable (TIMER0_BASE、TIMER_A);
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER2);
TimerConfigure (TIMER2_base、TIMER_CFG_PERIODICRACASE);
ui32Period =(SysCtlClockGet ()/10)/2;
TimerLoadSet (TIMER2_base、timer_A、ui32Period -1);
IntEnable (INT_TIMER2A);
TimerIntEnable (TIMER2_base、TIMER_TINA_TIMEOUT);
//IntMasterEnable();
TimerEnable (TIMER2_base、TIMER_A);
SysCtlPeripheralEnable (SYSCTL_Periph_Timer1);
TimerConfigure (Timer1_base、timer_CFG_PERIODICRACRACASE);
ui32Period =(SysCtlClockGet ()/1400000)/2;
TimerLoadSet (Timer1_base、timer_A、ui32Period -1);
IntEnable (INT_TIMER1A);
TimerIntEnable (Timer1_base、timer_TINA_TIMEOUT);
IntMasterEnable();
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_1|GPIO_PIN_2|GPIO_PIN_3、0);
}
其他
{
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、4);
}
}
空 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、2);
}
}
空 Timer2IntHandler (空)
{
//清除计时器中断
TimerIntClear (TIMER2_base、TIMER_TINA_TIMEOUT);
//读取 GPIO 引脚和的当前状态
//写回相反的状态
IF (GPIOPinRead (GPIO_PORTF_BASE、GPIO_PIN_3))
{
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_3、0);
}
其他
{
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_3、8);
}
}