打印
[PIC®/AVR®/dsPIC®产品]

新手发帖,请教关于PWM中断的问题。

[复制链接]
1671|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nevermorever|  楼主 | 2013-8-25 13:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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 呢?是不是没有进入到中断里面?哪位大侠指点下!
沙发
nevermorever|  楼主 | 2013-8-25 19:25 | 只看该作者
没人知道么。顶一下!  知道的请帮忙看一下。

使用特权

评论回复
板凳
yewuyi| | 2013-8-26 08:53 | 只看该作者
请检查相关中断寄存器的各项设置。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝