badhtnnw88 发表于 2016-9-9 21:15:46

大家帮忙看看dspic33EP32MC202 Timer3 输出比较OC 无法工作

#include "P33ep32mc202.h"
/** CONFIGURATION **************************************************/
_FGS(0xff);//写保护关闭
_FOSCSEL(0xfb);//双速振荡器启动使能 PWM锁定 带PLL的主振荡器
_FOSC(0xdd);//禁止时钟切换 外设引脚多次配置 SOC2数字IO XT晶振模式
_FWDT(0x7f);//看门狗禁止
_FPOR(0xff);//I2C1被映射到SAD1/SCL1引脚 欠压复位_
_FICD(0x03);//禁止JTAG 通过PGEC1 PGED1通讯

//振荡器配置
void System_Colck(void)
{
    //产生Fosc = 140MHz 70MIPS
    CLKDIVbits.PLLPRE = 0;//N1 = 27.3728MHz/2= 2MHz
    PLLFBDbits.PLLDIV = 74;//M = 763.6864*76 = 279.68MHz
    CLKDIVbits.PLLPOST = 0;//N2 = 2 279.68/2 = 139.84MHz
    while (OSCCONbits.COSC!= 0b011)
    while (OSCCONbits.LOCK!= 1) {};//PLL 处于锁定状态
}
void System_Init(void)
{
    TRISB &= ~0xfc00;//RB10-RB15 清零
    IOCON1 = 0x0000;//GPIO 模块控制 PWMxH PWMxL引脚
}
void Timer3_Timing_Init(void)//定时器模式
{
    T3CONbits.TON = 0;//禁止16位Timer3
    T3CONbits.TCS = 0;//内部时钟Fosc/2
    T3CONbits.TGATE = 0;//门控时间累加位 禁止
    T3CONbits.TCKPS = 0x00;//输入时钟预分频比1:1
    T3CONbits.TSIDL = 0;//空闲模式继续工作
   

    T2CONbits.T32 = 0;//TMR2和TMR C类构成独立的16位定时器
    TMR3 = 0x0000;//初始值
    PR3 = 5535;//周期值
    IPC2bits.T3IP = 0x03; // 优先级1
    IFS0bits.T3IF = 0; // Timer3中断标志状态位 清零
    IEC0bits.T3IE = 1; // Timer3中断允许位 允许
    T3CONbits.TON = 1;//启动使能16位Timer3
}
void OC1_Init(void)
{
    RPOR4bits.RP43R = 0b010000;//RP43连接到输出比较 1 输出   OC1映射到RP引脚
      RPOR4bits.RP42R = 0b010001;//RP43连接到输出比较 1 输出
    OC1CON1bits.OCM = 0b000;//禁止输出比较
    OC1CON1bits.OCSIDL = 0;//空闲模式继续
    OC1CON1bits.OCTSEL = 0b001;//比较Timer3的时钟源
    OC1R = 0;//输出比较寄存器
    OC1RS =2520;


    OC2CON1bits.OCM = 0b000;//禁止输出比较
    OC2CON1bits.OCSIDL = 0;//空闲模式继续
    OC2CON1bits.OCTSEL = 0b001;//比较Timer3的时钟源
    OC2R = 0;//输出比较寄存器
    OC2RS = 5535;

    IPC0bits.OC1IP = 0x02;// 中断优先级2
    IFS0bits.OC1IF = 0;// 清中断
    IEC0bits.OC1IE = 1;// 允许中断

   IPC1bits.OC2IP = 0x01;// 中断优先级2
   IFS0bits.OC2IF = 0;// 清中断
    IEC0bits.OC2IE = 1;// 允许中断
    OC1CON1bits.OCM = 0b101;//将OC1引脚初始化为低电平,在OCx引脚上产生连续输出脉冲
    OC2CON1bits.OCM = 0b101;//将OC1引脚初始化为低电平,在OCx引脚上产生连续输出脉冲

}
int main()
{
    System_Colck();
    System_Init();
    Timer3_Timing_Init();
   OC1_Init();
   
    while(1)
    {

    }
}
/* 定时器3中断*/
void __attribute__((__interrupt__, auto_psv)) _T3Interrupt(void)
{
      int T;
    IFS0bits.T3IF = 0;//清中断
    T ++;
    if( T == 1089)
    {
      T = 0;
       _RB15 =~_RB15;
    }   
}
/********(C) COPYRIGHT 2015 TaobaoID:paifeng253625 *****END OF FILE********/
/* OC1中断*/
void __attribute__((__interrupt__, auto_psv)) _OC1Interrupt(void)
{
    IFS0bits.OC1IF = 0;// 清中断
}
/* OC1中断*/
void __attribute__((__interrupt__, auto_psv)) _OC2Interrupt(void)
{
    IFS0bits.OC2IF = 0;// 清中断
}
页: [1]
查看完整版本: 大家帮忙看看dspic33EP32MC202 Timer3 输出比较OC 无法工作