/*--------------------------------------------------------------------------------------*/ void CalPeriodTime(PWM_T *PWM, uint32_t u32Ch) { uint16_t u32Count[4]; uint32_t u32i; uint16_t u16RisingTime, u16FallingTime, u16HighPeroid, u16LowPeroid, u16TotalPeroid; /* Clear Capture Falling Indicator (Time A) */ PWM_ClearCaptureIntFlag(PWM, u32Ch, PWM_CAPTURE_INT_FALLING_LATCH); /* Wait for Capture Falling Indicator */ while(PWM_GetCaptureIntFlag(PWM, u32Ch) < 2); /* Clear Capture Falling Indicator (Time B)*/ PWM_ClearCaptureIntFlag(PWM, u32Ch, PWM_CAPTURE_INT_FALLING_LATCH); u32i = 0; while(u32i < 4) { /* Wait for Capture Falling Indicator */ while(PWM_GetCaptureIntFlag(PWM, u32Ch) < 2); /* Clear Capture Falling and Rising Indicator */ PWM_ClearCaptureIntFlag(PWM, u32Ch, PWM_CAPTURE_INT_FALLING_LATCH | PWM_CAPTURE_INT_RISING_LATCH); /* Get Capture Falling Latch Counter Data */ u32Count[u32i++] = PWM_GET_CAPTURE_FALLING_DATA(PWM, u32Ch); /* Wait for Capture Rising Indicator */ while(PWM_GetCaptureIntFlag(PWM, u32Ch) < 2); /* Clear Capture Rising Indicator */ PWM_ClearCaptureIntFlag(PWM, u32Ch, PWM_CAPTURE_INT_RISING_LATCH); /* Get Capture Rising Latch Counter Data */ u32Count[u32i++] = PWM_GET_CAPTURE_RISING_DATA(PWM, u32Ch); } u16RisingTime = u32Count[1]; u16FallingTime = u32Count[0]; u16HighPeroid = u32Count[1] - u32Count[2]; u16LowPeroid = 0x10000 - u32Count[1]; u16TotalPeroid = 0x10000 - u32Count[2]; printf("\nPWM generate: \nHigh Period=7199 ~ 7201, Low Period=16799 ~ 16801, Total Period=23999 ~ 24001\n"); printf("\nCapture Result: Rising Time = %d, Falling Time = %d \nHigh Period = %d, Low Period = %d, Total Period = %d.\n\n", u16RisingTime, u16FallingTime, u16HighPeroid, u16LowPeroid, u16TotalPeroid); if((u16HighPeroid < 7199) || (u16HighPeroid > 7201) || (u16LowPeroid < 16799) || (u16LowPeroid > 16801) || (u16TotalPeroid < 23999) || (u16TotalPeroid > 24001)) printf("Capture Test Fail!!\n"); else printf("Capture Test Pass!!\n"); }
// ============================================================ // caculate time during pwm0_ch4 falling and rising edge // ============================================================ uint16_t IrSonar_CalPeriodTime(PWM_T *PWM, uint32_t u32Ch) { uint16_t u16RisingTime, u16FallingTime, u16Period; u16RisingTime = PWM_GET_CAPTURE_RISING_DATA(PWM, u32Ch); u16FallingTime = PWM_GET_CAPTURE_FALLING_DATA(PWM, u32Ch); u16Period = u16RisingTime - u16FallingTime; //printf("\nCapture Result: Rising Time = %d, Falling Time = %d \nHigh Period = %d", //u16RisingTime, u16FallingTime, u16Period); return u16Period; }