3
#include <gtest/gtest.h>
4
#include <drivers/servo.h>
9
#include <DividerSelector.h>
11
using namespace Mcucpp;
12
using namespace Mcucpp::IO;
13
using namespace Mcucpp::Timers;
14
using namespace Mcucpp::Clock;
16
typedef PinList<Pa0, Pa1, Pa2, Pa3> Pins;
17
uint32_t SysClock::CpuFreq;
18
typedef Timer1 ServoTestTimer;
20
TEST(TestTimer, DividerSelection)
22
DividerSelector<ServoTestTimer> selector;
23
for(int j = 100; j < 20000; j+= 100)
25
bool result = selector.ProcessMkSek(24000000, j);
27
int t = selector.GetTicks();
32
TEST(Servo, AllTurnedOff)
34
SysClock::SetClockFreq(24000000);
36
Servo<Pins, ServoTestTimer> servo;
38
int expectedPauseDivider = 7;
40
servo.UpdateTimings();
43
for(int i = 0; i < Pins::Length + 2; i++)
46
EXPECT_EQ(expectedPauseDivider, ServoTestTimer::timerData.CurrentDivider);
47
EXPECT_NE(0, ServoTestTimer::timerData.Counter);
48
EXPECT_EQ(Pins::Read(), 0);
52
TEST(Servo, OneTurnedOn)
54
SysClock::SetClockFreq(24000000);
55
Servo<Pins, ServoTestTimer> servo;
57
int expectedPauseDivider = 7;
59
servo.UpdateTimings();
61
servo.SetPosition(0, 1);
64
EXPECT_EQ(expectedPauseDivider, ServoTestTimer::timerData.CurrentDivider);
65
EXPECT_NE(0, ServoTestTimer::timerData.Counter);
66
EXPECT_EQ(Pins::Read(), 0);
69
EXPECT_EQ(1, ServoTestTimer::timerData.CurrentDivider);
70
EXPECT_NE(0, ServoTestTimer::timerData.Counter);
71
EXPECT_EQ(Pins::Read(), 1);
74
EXPECT_EQ(expectedPauseDivider, ServoTestTimer::timerData.CurrentDivider);
75
EXPECT_NE(0, ServoTestTimer::timerData.Counter);
76
EXPECT_EQ(Pins::Read(), 0);
79
TEST(Servo, AllTurnedOnSamePosition)
81
SysClock::SetClockFreq(24000000);
82
Servo<Pins, ServoTestTimer> servo;
84
int expectedPauseDivider = 7;
86
servo.UpdateTimings();
88
servo.SetPosition(0, 1);
89
servo.SetPosition(1, 1);
90
servo.SetPosition(2, 1);
91
servo.SetPosition(3, 1);
94
EXPECT_EQ(expectedPauseDivider, ServoTestTimer::timerData.CurrentDivider);
95
EXPECT_NE(0, ServoTestTimer::timerData.Counter);
96
EXPECT_EQ(Pins::Read(), 0);
99
EXPECT_EQ(1, ServoTestTimer::timerData.CurrentDivider);
100
EXPECT_NE(0, ServoTestTimer::timerData.Counter);
101
EXPECT_EQ(Pins::Read(), 15);
103
servo.TimerHandler();
104
EXPECT_EQ(expectedPauseDivider, ServoTestTimer::timerData.CurrentDivider);
105
EXPECT_NE(0, ServoTestTimer::timerData.Counter);
106
EXPECT_EQ(Pins::Read(), 0);
109
TEST(Servo, AllTurnedOnDifferentPosition)
111
SysClock::SetClockFreq(24000000);
112
Servo<Pins, ServoTestTimer> servo;
114
int expectedPauseDivider = 7;
116
servo.UpdateTimings();
118
servo.SetPosition(0, 10);
119
servo.SetPosition(1, 20);
120
servo.SetPosition(2, 30);
121
servo.SetPosition(3, 40);
123
servo.TimerHandler();
124
EXPECT_EQ(expectedPauseDivider, ServoTestTimer::timerData.CurrentDivider);
125
EXPECT_NE(0, ServoTestTimer::timerData.Counter);
126
EXPECT_EQ(Pins::Read(), 0);
128
servo.TimerHandler();
129
EXPECT_EQ(1, ServoTestTimer::timerData.CurrentDivider);
130
EXPECT_NE(0, ServoTestTimer::timerData.Counter);
131
EXPECT_EQ(Pins::Read(), 15);
133
servo.TimerHandler();
134
EXPECT_EQ(1, ServoTestTimer::timerData.CurrentDivider);
135
EXPECT_NE(0, ServoTestTimer::timerData.Counter);
136
EXPECT_EQ(Pins::Read(), 14);
138
servo.TimerHandler();
139
EXPECT_EQ(1, ServoTestTimer::timerData.CurrentDivider);
140
EXPECT_NE(0, ServoTestTimer::timerData.Counter);
141
EXPECT_EQ(Pins::Read(), 12);
143
servo.TimerHandler();
144
EXPECT_EQ(1, ServoTestTimer::timerData.CurrentDivider);
145
EXPECT_NE(0, ServoTestTimer::timerData.Counter);
146
EXPECT_EQ(Pins::Read(), 8);
148
servo.TimerHandler();
149
EXPECT_EQ(expectedPauseDivider, ServoTestTimer::timerData.CurrentDivider);
150
EXPECT_NE(0, ServoTestTimer::timerData.Counter);
151
EXPECT_EQ(Pins::Read(), 0);