搜索
bottom↓
回复: 2

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

[复制链接]

出0入0汤圆

发表于 2016-9-9 21:02:33 | 显示全部楼层 |阅读模式
#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 = 2  7.3728MHz/2= 2MHz
    PLLFBDbits.PLLDIV = 74;//M = 76  3.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;// 清中断
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2016-9-9 21:04:30 | 显示全部楼层
定时器都正常工作,但OCx不起作用,我用Timer2就完全没有问题,但不知道为什么用Timer3 OCx就没有输出

出0入0汤圆

 楼主| 发表于 2016-9-10 08:42:14 | 显示全部楼层
已经解决问题,还差一个位没有设置

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 06:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表