Files
datalink_repo/datalink814_ge/unit_test/tmc_emulate_unit_test.c
T
2024-01-22 16:12:10 +08:00

90 lines
1.9 KiB
C

#include <stdint.h>
#include <math.h>
#include "error.h"
#include "unit_test_framework.h"
#include "time_ctrl/time_ctrl.h"
#define HARDWARE_VERSION 0x00000001
#define TIMER_H 0x00253253
#define TIMER_L 0x00225533
#define MAX_OPT_DELAY 100 // 1us = 100*10ns
uint32_t tmcReg[32] = {0};
TMC_CONFIG tmcConfig = {
.baseAddr = 0,
.reset = 10};
TMC_INST *tmcInstPtr = NULL;
void tmc_setup(void)
{
int32_t Status;
tmcReg[1] = HARDWARE_VERSION; // Version
tmcReg[2] = 253; // Int
tmcReg[3] = 253; // Frac
tmcReg[4] = 0; // Reset
tmcReg[5] = 0; // Preset H
tmcReg[6] = 0; // Preset L
tmcReg[7] = 0; // Adjustment H
tmcReg[8] = 0; // Adjustment L
tmcReg[9] = 0; // Adjustment Trigger
tmcReg[10] = 0; // step opt
tmcConfig.baseAddr = (uintptr_t)tmcReg;
Status = TimeCtrl_Init(&tmcInstPtr, &tmcConfig);
ASSERT_EQUAL(SUCCESS, Status);
}
void tmc_teardown(void)
{
TimeCtrl_Destroy(tmcInstPtr);
}
TEST(tmc_version)
{
ASSERT_EQUAL(HARDWARE_VERSION, TimeCtrl_GetVersion(tmcInstPtr));
return;
}
TEST(tmc_basic_operations)
{
TIME_WORD timeStamp;
TIME_INT timeH;
TIME_FRAC timeL;
TimeCtrl_GetCurrentTime(tmcInstPtr, &timeStamp);
timeH = TimeCtrl_GetIntCnt(tmcInstPtr);
timeL = TimeCtrl_GetFracCnt(tmcInstPtr);
if (timeL >= timeStamp.frac_part)
{
ASSERT_EQUAL(timeH, timeStamp.int_part);
ASSERT_TRUE(timeL - timeStamp.frac_part < MAX_OPT_DELAY);
}
else
{
ASSERT_EQUAL(timeH, timeStamp.int_part + 1);
ASSERT_TRUE(timeL + TIME_FRAC_MAX - timeStamp.frac_part < MAX_OPT_DELAY);
}
TIME_FRAC stepOpt;
stepOpt = 0x00000253;
TimeCtrl_SetOptimizeStep(tmcInstPtr, &stepOpt);
TimeCtrl_GetCurrentStep(tmcInstPtr, &stepOpt);
ASSERT_EQUAL(0x00000253, stepOpt);
TimeCtrl_Reset(tmcInstPtr);
return;
}
TEST_SUITE(tmc_unit_test)
{
TEST_SUITE_CONFIGURE(tmc_setup, tmc_teardown);
RUN_TEST(tmc_version);
RUN_TEST(tmc_basic_operations);
}
int main(void)
{
RUN_TEST_SUITE(tmc_unit_test);
TEST_REPORT();
return TEST_EXIT_CODE;
}