打印

求一个CCP的程序和Proteus的例子

[复制链接]
1988|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hpfily|  楼主 | 2013-3-12 16:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hpfily 于 2013-3-12 17:15 编辑

这几天我要让ccp搞疯了,实在没办法了,求大家一个能运行测量的例子,让我好好对照一下,是哪里写错了

只需要捕捉模块,测量脉宽就行,我自己写的一直进入中断
沙发
hpfily|  楼主 | 2013-3-12 17:28 | 只看该作者
搞出来了,我关了两遍中断,中断才关了,一个在中断开始,一个在中断末尾,真他妈奇怪,气死我了

使用特权

评论回复
板凳
azhe235| | 2013-4-22 16:54 | 只看该作者
void IR_CAP_ISR(void)
{
       
        if(Ir_SendData_AddrNo==0)
        {
                //DrvPWM_ClearCaptureIntStatus(DRVPWM_CAP5,DRVPWM_CAP_FALLING_FLAG);

                //PWMB->CCR0.CFLRI1=0;
               
                outp32(&PWMB->CCR0, inp32(&PWMB->CCR0) & 0x009E000F);          
               
                IR_Study_count =0;
        }
        else
        {
                if(PWMB->CCR0.CFLRI1==1)                                                    // ÊÇ·ñΪϽµÑØ´¥·¢
                {
                         High_Pulse_Times        = 0xfff0- PWMB->CFLR1;                       //¸ßµçƽʱ¼ä
                        outp32(&PWMB->CCR0, inp32(&PWMB->CCR0) & 0x008E000F);           //ϽµÑØ´¥·¢±ê×¼ÇåÁã
//                        DrvPWM_ClearCaptureIntStatus(DRVPWM_CAP5,DRVPWM_CAP_FALLING_FLAG);
                        if(High_Pulse_Times>0X10&&High_Pulse_Times<0X60)                   //±ê×¼38
                        {                                                                                                                                                                 
                                        IR_RevBuf[Ir_SendData_AddrNo]=56;
                        }
                        else if(High_Pulse_Times>0X80&&High_Pulse_Times<0XB3)
                        {
                                IR_RevBuf[Ir_SendData_AddrNo]=169;
                        }
                        else
                        {
                                IR_RevBuf[Ir_SendData_AddrNo]=High_Pulse_Times;
                        }
                       
                }
                else if(PWMB->CCR0.CRLRI1==1)                 // ÉÏÉýÑØ´¥·¢
                {
                        Low_Pulse_Times                = 0xfff0 - PWMB->CRLR1;                //µÍµçƽʱ¼ä
                        outp32(&PWMB->CCR0, inp32(&PWMB->CCR0) & 0x004E000F);           //ÉÏÉýÑØ´¥·¢±ê×¼ÇåÁã
                        //DrvPWM_ClearCaptureIntStatus(DRVPWM_CAP5,DRVPWM_CAP_RISING_FLAG);
                        if(Low_Pulse_Times>0x10&&Low_Pulse_Times<0X60)
                        {
                                IR_RevBuf[Ir_SendData_AddrNo]=56;       
                        }
                        else
                        {
                                IR_RevBuf[Ir_SendData_AddrNo]=Low_Pulse_Times;
                        }
                }
        }       
        Ir_SendData_AddrNo++;

}




void IR_CAP_Init(void)
{
        S_DRVPWM_TIME_DATA_T  CAP_Param;

        DrvGPIO_Open(E_PORT2,E_PIN5,E_IO_INPUT);                                  // ir²¶×½ÎªÊäÈë¹Ü½Å
        DrvGPIO_InitFunction(E_FUNC_PWM45);                       // ÉèÖÃGPIO¿ÚµÄPWM56¹¦ÄÜ
        DrvPWM_SelectClockSource(DRVPWM_TIMER5, DRVPWM_EXT_12M);
        DrvPWM_Open();                                            // ʹÄÜPWMʱÖÓ²¢¸´Î»

        //ÉèÖÃPWM²¶×½Í¨µÀ                 PWMƵÂÊ1M
        CAP_Param.u8Mode = DRVPWM_AUTO_RELOAD_MODE;
        CAP_Param.u32Frequency             = 0;               
        CAP_Param.u8ClockSelector        = DRVPWM_CLOCK_DIV_1;
        CAP_Param.u8PreScale                = 120;        //·ÖƵֵ
        CAP_Param.u32Duty                        = 0Xfff0;
        CAP_Param.i32Inverter       = FALSE ;                                       //·´×ªÊä³ö¿ªÆô

//        CAP_Param.u8Mode=DRVPWM_AUTO_RELOAD_MODE;            // ×Ô¶¯×°ÔØģʽ                             
//        CAP_Param.u8HighPulseRatio=50;                                    // Õ¼¿Õ±ÈÈ¡Öµ0 µ½ 100  */ High Pulse peroid : Total Pulse peroid = 50 : 100 */
//        CAP_Param.u8ClockSelector=0;
//        CAP_Param.u8PreScale=12;
//        CAP_Param.u32Frequency=0;                                   //É趨ƽÂÊΪ10000Hz  
//         CAP_Param.i32Inverter=TRUE;                                       //·´×ªÊä³ö¿ªÆô  
//        CAP_Param.u32Duty=0x10000;                                           //²¶×½¶¨Ê±ÓõļÆÊýÖµ            

        DrvPWM_SetTimerClk(DRVPWM_CAP5,&CAP_Param);    //³õʼ»¯DRVPWM_CAP5ʱÖÓ       
        outp32(&PWMB->CCR0, inp32(&PWMB->CCR0) & 0x000E000F);
        DrvPWM_EnableInt(DRVPWM_CAP5,DRVPWM_CAP_ALL_INT,IR_CAP_ISR);          // PWM²¶×½¶ÏÖк¯Êý³õʼ»¯
        DrvPWM_SetTimerIO(DRVPWM_CAP5,1);              //ʹÄÜIO²¶×½¹¦ÄÜ
    DrvPWM_Enable(DRVPWM_CAP5,1);
//        DrvPWM_ClearCaptureIntStatus(DRVPWM_CAP5,DRVPWM_CAP_FALLING_FLAG);
//        DrvPWM_ClearCaptureIntStatus(DRVPWM_CAP5,DRVPWM_CAP_RISING_FLAG);
//         DrvPWM_ClearInt(DRVPWM_CAP5);

}

使用特权

评论回复
地板
azhe235| | 2013-4-22 16:56 | 只看该作者
试一下,我这个是做红外学习遥控器的,可以用
不是很准,不知道为什么

使用特权

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

本版积分规则

32

主题

36

帖子

0

粉丝