#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"
#include "driverlib/fpu.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/systick.h"
#include "driverlib/interrupt.h"
#include "driverlib/pwm.h"
#include "driverlib/timer.h"
#define uint unsigned int
const uint spwm[256] = {
0x4000,0x4405,0x4805,0x4BFE,0x4FEA,0x53C7,0x578F,0x5B40,0x5ED5,0x624A,
0x659E,0x68CB,0x6BCF,0x6EA7,0x714F,0x73C6,0x7609,0x7815,0x79E8,0x7B81,
0x7CDD,0x7DFC,0x7EDD,0x7F7E,0x7FDF,0x7FFF,0x7FDF,0x7F7E,0x7EDD,0x7DFC,
0x7CDD,0x7B81,0x79E8,0x7815,0x7609,0x73C6,0x714F,0x6EA7,0x6BCF,0x68CB,
0x659E,0x624A,0x5ED5,0x5B40,0x578F,0x53C7,0x4FEA,0x4BFE,0x4805,0x4405,
0x4000,0x3BFB,0x37FB,0x3402,0x3016,0x2C39,0x2871,0x24C0,0x212B,0x1DB6,
0x1A62,0x1735,0x1431,0x1159,0x0EB1,0x0C3A,0x09F7,0x07EB,0x0618,0x047F,
0x0323,0x0204,0x0123,0x0082,0x0021,0x0001,0x0021,0x0082,0x0123,0x0204,
0x0323,0x047F,0x0618,0x07EB,0x09F7,0x0C3A,0x0EB1,0x1159,0x1431,0x1735,
0x1A62,0x1DB6,0x212B,0x24C0,0x2871,0x2C39,0x3016,0x3402,0x37FB,0x3BFB
} ;
#define uint unsigned int
#define uchar unsigned char
uint i = 0;
//定时器中断处理程序
void Timer0IntHandler(void)
{
//清除定时器中断
TimerIntClear(TIMER0_BASE,TIMER_TIMA_TIMEOUT);
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,GPIO_PIN_2);
i = 1;
//IntMasterDisable();
//IntMasterEnable();
}
//两路PWM输出,反相互补
void init_pwm()
{
SysCtlPWMClockSet(SYSCTL_PWMDIV_1);//设置PWM所使用的时钟
//InitConsole();//初始化UART
SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//使能F系列端口,供后置使用
GPIOPinConfigure(GPIO_PF3_M1PWM7);
GPIOPinConfigure(GPIO_PF2_M1PWM6);//配置GPIO口的输出状态
GPIOPinTypePWM(GPIO_PORTF_BASE,GPIO_PIN_2|GPIO_PIN_3);//配置F2为PWM模式
PWMGenConfigure(PWM1_BASE,PWM_GEN_3,PWM_GEN_MODE_UP_DOWN|PWM_GEN_MODE_NO_SYNC);//PWM1,发生器1,先增再减,异步模式
PWMGenPeriodSet(PWM1_BASE,PWM_GEN_3,6400);//周期为2500HZ(16M÷250 = 6400)
//设置PWM的占空比,设置模块1,输出6,获取PWM周期T,再T/4就是占空比为25%
//PWMPulseWidthSet(PWM1_BASE,PWM_OUT_6,(5*PWMGenPeriodGet(PWM1_BASE,PWM_GEN_3))/8);
// PWMPulseWidthSet(PWM1_BASE,PWM_OUT_7,(5*PWMGenPeriodGet(PWM1_BASE,PWM_GEN_3))/12);
PWMOutputState(PWM1_BASE,PWM_OUT_6_BIT,true);//PWM6bit,true
PWMOutputState(PWM1_BASE,PWM_OUT_7_BIT,true);
PWMGenEnable(PWM1_BASE,PWM_GEN_3);//发生器模块1
//while(1)
//{
// for(i = 10; i > 0;i--){
// PWMPulseWidthSet(PWM1_BASE,PWM_OUT_6,PWMGenPeriodGet(PWM1_BASE,PWM_GEN_3)/i);
// PWMOutputInvert(PWM1_BASE,PWM_OUT_6_BIT,false);
PWMOutputInvert(PWM1_BASE,PWM_OUT_6_BIT,true);//反相输出
}
int main()
{
//浮点型运算
FPULazyStackingEnable();
SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_2);
//使能TIMER0使用的外设
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
// init_pwm();
//使能处理器中断
IntMasterEnable();
//配置定时器的属性为:全宽实时时钟定时器
TimerConfigure(TIMER0_BASE,TIMER_CFG_PERIODIC);
//PWMPulseWidthSet(PWM1_BASE,PWM_OUT_6,(5*PWMGenPeriodGet(PWM1_BASE,PWM_GEN_3))/8);
//配置装载值
TimerLoadSet(TIMER0_BASE,TIMER_A,SysCtlClockGet());
//配置定时器的超时中断
IntEnable(INT_TIMER0A);
TimerIntEnable(TIMER0_BASE,TIMER_TIMA_TIMEOUT);
//使能定时器0
TimerEnable(TIMER0_BASE,TIMER_A);
while(1)
{
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------------
上面是代码部分,我设置一个GPIO输出想看看定时器中断的结果,后来发现根本进不去中断,而且在“DEBUG”模式中没办法在定时器中断处理程序中设置断点,求解答。本代码本来是想用来产生SPWM波的,但是定时器都不能使用了。。。求指点