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);
}
|