任务要求:使用定时器输出两路不同占空比的PWM波形。
#include <stdint.h>
#include <stdbool.h>
#include "inc/tm4c123gh6pm.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/interrupt.h"
#include "driverlib/gpio.h"
#include "driverlib/timer.h"
int main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);//5分频,使用PLL,外部晶振16M,system时钟源选择 main osc。系统时钟40MHZ
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//使能GPIOF外设
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
//亮灯检测,判断程序是否正常运行
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE,GPIO_PIN_6|GPIO_PIN_4);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0);
SysCtlDelay(10000000);
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,0x02); // 开发板红色LED亮 1<<1
SysCtlDelay(10000000);
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,0x00);
SysCtlDelay(10000000);
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);//使能TIMER0
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1);//使能TIMER0
//配置PWM模式
TimerConfigure(TIMER0_BASE,TIMER_CFG_SPLIT_PAIR|TIMER_CFG_A_PWM);
TimerConfigure(TIMER1_BASE,TIMER_CFG_SPLIT_PAIR|TIMER_CFG_A_PWM);
GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_6|GPIO_PIN_4);//设置B4和B6为输出
GPIOPinConfigure(GPIO_PB6_T0CCP0);
GPIOPinConfigure(GPIO_PB4_T1CCP0);
GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_6|GPIO_PIN_4);
//A定时器,高电平有效
TimerControlLevel(TIMER0_BASE,TIMER_A,false);
TimerControlLevel(TIMER1_BASE,TIMER_A,false);
TimerLoadSet(TIMER0_BASE, TIMER_A, 0xC350);//装载值(频率)
TimerMatchSet(TIMER0_BASE, TIMER_A, 0x1388);//匹配值(占空比)
TimerLoadSet(TIMER1_BASE, TIMER_A, 0xC350);//装载值
TimerMatchSet(TIMER1_BASE, TIMER_A, 0x61A8);//匹配值
IntEnable(INT_TIMER0A); //使能TIMER0A
IntEnable(INT_TIMER1A);
TimerIntEnable(TIMER0_BASE, TIMER_CAPA_MATCH);//使能TIMER0A的捕获事件触发中断
TimerIntEnable(TIMER1_BASE, TIMER_CAPA_MATCH);
IntMasterEnable();
TimerEnable(TIMER0_BASE, TIMER_A); //TIMER0A开始计数,当计数值等于TimerLoadSet,触发中断
TimerEnable(TIMER1_BASE, TIMER_A);
while(1)
{
}
}