123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- #include "gtest/gtest.h"
- #include <gtest/gtest.h>
- #include <tuple>
- #include "test_user.h"
- #include "hwsetup.h"
- #include "scope.h"
- class CadenceTest : public testing::Test
- {
- protected:
- static void SetUpTestSuite()
- {
- cadence_voCadenceInit();
- }
- virtual void SetUp() override
- {
- }
- virtual void TearDown() override
- {
- }
- };
- class CadenceTest1 : public CadenceTest, public testing::WithParamInterface<int>
- {};
- TEST_P(CadenceTest1, FreCal)
- {
- /* Coef Cal */
- cadence_voCadenceCof();
- cadence_stFreGetCof.uwNumbersPulses = CADENCE_NUMBERS_PULSES;
- int timerPrd = TIM1CLK_KHZ * 1000 / (1000 / 25); // cnt = 18000, same as STM32
- int timerCnt = 0;
- int cadenceSignal = 0, cadCnt = 0, cadenceSignalLast = 0;
- int cadencePrd = GetParam();
- int capValue = 0;
- /* Cadence Cal */
- for(int i = 0; i < 100000000; i++)
- {
- /* Input Cadence Signal */
- cadCnt++;
- if(cadCnt <= (cadencePrd/2)) // 50% duty
- {
- cadenceSignal = 0;
- }
- else
- {
- cadenceSignal = 1;
- if(cadCnt >= cadencePrd)
- {
- cadCnt = 0;
- }
- }
-
- /* Timer */
- timerCnt ++ ;
- if(timerCnt >= timerPrd - 1)
- {
- timerCnt = 0;
- testTimerIntFlg[TIMER1][TIMER_INT_FLAG_UP] = 1;
- }
- /* Capture: rising and falling edge trigger*/
- if(cadenceSignal - cadenceSignalLast != 0)
- {
- testCh2CapValue[TIMER1] = timerCnt;
- testTimerIntFlg[TIMER1][TIMER_INT_FLAG_CH2] = 1;
- }
- cadenceSignalLast = cadenceSignal;
- /* Interrupt: update and capture */
- if(testTimerIntFlg[TIMER1][TIMER_INT_FLAG_UP])
- {
- cadence_voCadenceCal(1);
- testTimerIntFlg[TIMER1][TIMER_INT_FLAG_UP] = 0;
- }
- else if(testTimerIntFlg[TIMER1][TIMER_INT_FLAG_CH2])
- {
- cadence_voCadenceCal(2);
- testTimerIntFlg[TIMER1][TIMER_INT_FLAG_CH2] = 0;
- }
- //UdpScope::Send(0, cadence_stFreGetOut.uwFrequencyPu);
- }
- double cadFreqPu = (double)TIM1CLK_KHZ * 1000 * 2 * 1048576 / cadencePrd / FBASE / cadence_stFreGetCof.uwNumbersPulses; // Q20
- if(cadFreqPu > cadence_stFreGetCof.uwMaxCadenceFre || cadence_stFreGetOut.uwCaputureOverflowCnt >= cadence_stFreGetCof.uwHfMaxTimeCnt)
- {
- EXPECT_NEAR(cadence_stFreGetOut.uwFrequencyPu, 0, 0.1);
- }
- else
- {
- EXPECT_NEAR(cadence_stFreGetOut.uwFrequencyPu, cadFreqPu, 2);
- }
- }
- INSTANTIATE_TEST_SUITE_P(DiffCadencePeriod, CadenceTest1, ::testing::Values(0, 500, 3000, 26000,100000,1000000));
|