#include <p30f2010.h>
#include "varibals.h"
#define M 1 //调制比
#define FCY 20000000
#define FPWM 10000 //开关频率10KHz,需120000/50=200个正弦采样点,半周期100个
#define DEADTIME (unsigned int) (0.000002 *FCY) //2us 死区
extern int sindata[];
int psindata=0; //正弦表指针
int count=0;
void InitMCPWM(void)
{
TRISE = 0x0100; // 将PWM 和FLTA 引脚分别配置为输出和输入
PTPER = (FCY/FPWM - 1) >> 1; // 计算期望频率所对应的周期
OVDCON = 0x0000; // 禁止所有PWM 输出。
DTCON1 = DEADTIME; // 死区时间为~2 us@ 20 MIPS 且预分频比为1:1
PWMCON1 = 0x0077; // 使能PWM 输出引脚并使能互补模式
PDC1 = PTPER; //50% 占空比。
PDC2 = PTPER;
PDC3 = PTPER;
IFS2bits.PWMIF = 0; // 清零PWM 中断标志
IEC2bits.PWMIE = 1; // 允许PWM 中断
OVDCON = 0x3F00; // PWM 输出由PWM 模块进行控制
PTCONbits.PTMOD = 2; // 中心对齐PWM 工作
psindata=0;
PTMR=0;
PTCONbits.PTEN = 1; // 启动PWM
}
void __attribute__((__interrupt__)) _MCPWMInterrupt(void){
if(IFS2bits.PWMIF){
IFS2bits.PWMIF=0;
count++;
}
}
int main(){
InitMCPWM();
for(;;)
{
}
return 0;
}
手册上说每次PTMR一个计数周期完之后都会产生一个PWM中断,我在中断函数_MCPWMInterrupt(void)里面给中断计数count,为什么在mplab SIM下仿真下观察这个count变量一直为0 呢?是不是没有进入到中断里面?哪位大侠指点下! |